MySQL8.1编译安装详细教程

安装必须依赖
[root@localhost ~]# yum install -y devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-binutils


 
创建相关目录和文件(不需要手动创建data目录,初始化数据库时会自动创建)
[root@localhost ~]# mkdir /program/mysql-8.1 && \
                    mkdir /program/mysql-8.1/ssl && \
                    mkdir /program/mysql-8.1/log && \
                    touch /program/mysql-8.1/log/error.log && \
                    touch /program/mysql-8.1/log/slow-query.log && \
                    touch /program/mysql-8.1/log/general.log && \
                    chown -R mysql:mysql /program/mysql-8.1
[root@localhost ~]#


 
开始安装
[root@localhost src]# ls
mysql-boost-8.1.0.tar.gz
[root@localhost src]# tar -xf mysql-boost-8.1.0.tar.gz && cd mysql-8.1.0/
[root@localhost mysql-8.1.0]# cp -r boost/ /program/mysql-8.1 # 和之前版本不同,8.1版本必须指定boost路径,所以将源码boost目录复制到安装目录下
[root@localhost mysql-8.1.0]# mkdir bld && cd bld/
[root@localhost bld]# cmake .. \
-DCMAKE_INSTALL_PREFIX=/program/mysql-8.1 \
-DSYSCONFDIR=/program/mysql-8.1 \
-DMYSQL_DATADIR=/program/mysql-8.1/data \
-DWITH_BOOST=/program/mysql-8.1/boost \
-DCMAKE_C_COMPILER=/usr/bin/cc \
-DCMAKE_CXX_COMPILER=/usr/bin/c++ \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_INNODB_MEMCACHED=ON \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DFORCE_INSOURCE_BUILD=1 \
-DMYSQL_TCP_PORT=3308
[root@localhost bld]# make # 此步骤非常耗时(建议泡壶茶&看个电影慢慢等)
[root@localhost bld]# make install
cmake部分参数说明
--------------------------------------------------
DCMAKE_INSTALL_PREFIX:指定安装目录
DMYSQL_DATADIR:指定data目录
DSYSCONFDIR:指定my.cnf配置文件目录
DMYSQL_TCP_PORT:指定端口号(由于3306已被旧版本占用,故这里使用3308)
 
 
 
生成SSL证书(非必须步骤,对安全性要求不高可跳过)
[root@localhost ~]# /program/mysql-8.1/bin/mysql_ssl_rsa_setup --datadir=/program/mysql-8.1/ssl
[root@localhost ~]# chown -R mysql:mysql /program/mysql-8.1
 
 
 
安装完后MySQL会自动生成几个配置文件,为避免出现配置混乱,只使用“{安装目录}/my.cnf”这一个配置文件,其它配置文件一律删除
[root@localhost ~]# /program/mysql-8.1/bin/mysql --help | grep 'Default options' -A 1
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /program/mysql-8.1/my.cnf ~/.my.cnf
[root@localhost ~]# rm -rf /etc/my.cnf /etc/mysql/my.cnf
 
 
 
创建my.cnf文件并进行配置
[root@localhost ~]# vim /program/mysql-8.1/my.cnf
# +---------------------------------------------------------------------------------------------------------------------
# | 官方文档
# | --------------------------------------------------------------------------------------------------------------------
# | https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html
# +---------------------------------------------------------------------------------------------------------------------
 
[client]
port   = 3308
socket = /dev/shm/mysql-8.1.sock
 
[mysql]
socket = /dev/shm/mysql-8.1.sock
 
[mysqld]
user                  = mysql
port                  = 3308
basedir               = /program/mysql-8.1
datadir               = /program/mysql-8.1/data
socket                = /dev/shm/mysql-8.1.sock
pid_file              = /dev/shm/mysql-8.1.pid
character_set_server  = utf8mb4
collation_server      = utf8mb4_general_ci
init_connect          = 'SET NAMES utf8mb4'
skip_name_resolve     = ON
log_timestamps        = SYSTEM
sql_mode              = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

#========== 密码加密方式配置 ==========#
# 备注①:authentication_policy参数要么支持所有加密方式(默认),要么只支持一种加密方式,建议使用caching_sha2_password作为唯一的加密方式。
# 备注②:在设置用户密码时,如果显示指定加密方式,那么该方式必须在authentication_policy参数里,否则会设置失败。
# 可选值:*,,[默认,支持所有方式] | mysql_native_password | sha256_password | caching_sha2_password
authentication_policy = caching_sha2_password

#========== SSL证书配置(非必须配置项,对安全性要求不高可忽略) ==========#
# ssl_ca      = /program/mysql-8.1/ssl/ca.pem
# ssl_cert    = /program/mysql-8.1/ssl/server-cert.pem
# ssl_key     = /program/mysql-8.1/ssl/server-key.pem
# tls_version = TLSv1.2,TLSv1.3
 
#========== 错误日志配置 ==========#
# log_error_verbosity为错误日志记录级别,可选值:1=ERROR|2=ERROR,WARNING[默认]|3=ERROR,WARNING,INFORMATION
log_error_verbosity = 2
log_error           = /program/mysql-8.1/log/error.log
 
#========== 慢查询日志配置 ==========#
# 备注:long_query_time为慢查询时间阈值(单位:秒),该参数可以设置为0.X的小数记录毫秒级慢查询
slow_query_log      = ON
slow_query_log_file = /program/mysql-8.1/log/slow-query.log
long_query_time     = 1
 
#========== SQL执行日志配置 ==========#
# 备注:所有执行过的SQL都会被记录,一般无需开启(除非需要调试),否则日志文件会非常大而严重占用磁盘空间
general_log      = OFF
general_log_file = /program/mysql-8.1/log/general.log
 
[mysqld_safe]
socket = /dev/shm/mysql-8.1.sock
[root@localhost ~]#
 
 
 
初始化数据库(如果需要重新初始化数据库请先手动删除data目录)
[root@localhost ~]# /program/mysql-8.1/bin/mysqld --initialize --user=mysql
 
 
 
获取root用户初始密码
[root@localhost ~]# cat /program/mysql-8.1/log/error.log
[System] [MY-015017] [Server] MySQL Server Initialization - start.
[System] [MY-013169] [Server] /program/mysql-8.1/bin/mysqld (mysqld 8.1.0) initializing of server in progress as process 63941
[System] [MY-013576] [InnoDB] InnoDB initialization has started.
[System] [MY-013577] [InnoDB] InnoDB initialization has ended.
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: AG/!lwLWG2yI # 这是root用户初始密码
[System] [MY-015018] [Server] MySQL Server Initialization - end.
[root@localhost ~]#
 
 
 
把MySQL加入chkconfig方便管理
[root@localhost ~]# cp /program/mysql-8.1/support-files/mysql.server /etc/init.d/mysql-8.1
[root@localhost ~]# chmod +x /etc/init.d/mysql-8.1
[root@localhost ~]# vim /etc/init.d/mysql-8.1 # 由于旧版本MySQL也在运行,需要将新版本的lock文件、pid文件和旧版本的区分开,不然启动时会出错
……(此处省略内容若干)……
# lock文件加上版本号和旧版本的lock文件区分开
lock_file_path="$lockdir/mysql-8.1

# pid文件加上版本号和旧版本的pid文件区分开
mysqld_pid_file_path="/dev/shm/mysql-8.1.pid"
……(此处省略内容若干)……
[root@localhost ~]# chkconfig --add mysql-8.1
 
 
 
常用管理命令
[root@localhost ~]# chkconfig mysql-8.1 on # 设置开机自动启动MySQL
[root@localhost ~]# chkconfig mysql-8.1 off # 取消开机自动启动MySQL
[root@localhost ~]# service mysql-8.1 status # 查看MySQL运行状态
[root@localhost ~]# service mysql-8.1 start # 启动MySQL
[root@localhost ~]# service mysql-8.1 stop # 停止MySQL
[root@localhost ~]# service mysql-8.1 restart # 重启MySQL
 
 
 
启动数据库并修改root用户初始密码
[root@localhost ~]# service mysql-8.1 status
[root@localhost ~]# service mysql-8.1 start
[root@localhost ~]# /program/mysql-8.1/bin/mysql --socket=/dev/shm/mysql-8.1.sock -u root -p # 由于旧版本MySQL也在运行,为了避免进入旧版本的命令行所以指定socket
Enter password: AG/!lwLWG2yI # 这里输入root用户初始密码
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.1.0 # 注意版本号,别改了旧版本的root用户密码
 
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '这里填写root用户新密码'; -- 修改root用户密码
Query OK, 0 rows affected (0.01 sec)
 
mysql> EXIT;
Bye
[root@localhost ~]#
 
 
 
MySQL默认是禁止root用户远程连接的,如要允许root用户远程连接可前往『允许root用户远程连接』。

Copyright © 2024 码农人生. All Rights Reserved