一、安装前准备
1、关闭防火墙并取消开机自启动
停止防火墙。
systemctl stop firewalld.service
关闭防火墙。
systemctl disable firewalld.service
查看防火墙。
systemctl status firewalld.service
2、关闭SELIinux
设置SELinux成为permissive模式,临时关闭selinux。
setenforce 0
查看selinux状态,确认为Disabled模式。
getenforce
永久关闭selinux的方法:
执行vim /etc/sysconfig/selinux命令,打开SELinux文件,把"SELINUX=enforcing" 改为 "SELINUX=disabled"。
保存文件,并重启服务器。
确认SELinux是否关闭,如果SELinux status参数显示为disabled即为关闭状态。
/usr/sbin/sestatus -v
3、创建用户组和用户
创建mysql用户组。
groupadd mysql
创建mysql用户。
useradd -g mysql mysql
设置mysql用户密码。Huawei@123
passwd mysql
4、搭建数据盘
非性能测试时,直接执行创建数据目录。
mkdir /data
第一次搭建数据盘(挂载单独硬盘操作):
mkdir /data
ls /dev/nvme*
mkfs.xfs -f /dev/nvme0n1
du -sh /dev/nvme0n1
mount /dev/nvme0n1 /data/
df -h
非第一次搭建数据盘(挂载单独硬盘操作):
umount /data/
ls /dev/nvme*
mkfs.xfs -f /dev/nvme0n1
du -sh /dev/nvme0n1
mount /dev/nvme0n1 /data/
df -h
注意:
如果执行umount /data/时报错,如下图所示。

执行下面的操作解决。
yum -y provides fuser
yum -y install psmisc-*
fuser -km /data/ 该操作需要执行多次,直到没有回显为止
umount /data/
df -h
5、创建数据目录
创建数据目录/data和进程所需的相关目录。
mkdir -p /data/mysql
cd /data/mysql
mkdir data tmp run log
修改数据目录/data的用户组和用户权限为mysql:mysql。
chown -R mysql:mysql /data
ll /
二、安装mysql 8.0.20
1、安装依赖包
yum -y install bison ncurses ncurses-devel libaio-devel openssl openssl-devel gmp gmp-devel mpfr mpfr-devel libmpc libmpc-devel wget tar gcc gcc-c++ git rpcgen cmake m4
2、安装cmake
系统自带的CMake软件不能满足当前数据库版本的编译要求,需要升级CMake版本至3.4.3或者以上,本文以升级到3.5.2版本为例。
下载CMake 3.5.2。
CMake 3.5.2下载地址:https://cmake.org/files/v3.5/cmake-3.5.2.tar.gz
将软件包上传至服务器/home目录,并解压。
cd /home
tar -zxvf cmake-3.5.2.tar.gz
进入解压后目录。
cd cmake-3.5.2
升级CMake。
./bootstrap
make -j
make install
确认CMake的版本是否为3.5.2。
/usr/local/bin/cmake --version
3、编译和安装mysql 8.0.20
如果编译安装失败,需要执行如下命令清理环境,然后参照该章节的步骤重新解压并编译安装。
rm -rf /home/mysql-8.0.20
下载源码包。
下载MySQL源码包(includes Boost Headers)。
下载网站地址:https://downloads.mysql.com/archives/community/
直接下载地址:
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-8.0.20.tar.gz
将mysql-boost-8.0.20.tar.gz上传至服务器“/home”目录下,并解压。
cd /home
tar -zxvf mysql-boost-8.0.20.tar.gz
进入“/home/mysql-8.0.20”源码文件夹,并建立一个编译目录。
cd /home/mysql-8.0.20
mkdir build
进入编译目录,配置MySQL。
cd build
cmake .. -DBUILD_CONFIG=mysql_release -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql/data -DWITH_BOOST=/home/mysql-8.0.20/boost/boost_1_70_0
关键参数说明
参数
说明
DBUILD_CONFIG
设置为mysql_release的含义是指CMake编译参数采用Mysql官方发布release版本时的编译参数。
DCMAKE_INSTALL_PREFIX
用于指定软件的安装路径,本文安装路径为:/usr/local/mysql。文档中的安装路径只是参考,根据客户实际情况进行配置。
DMYSQL_DATADIR
创建数据库时,数据文件存放的路径。本次安装路径为:/data/mysql/data。
DWITH_BOOST
解压MySQL源码包后,解压文件中boost_1_70_0文件夹所在路径。例如,本文解压在“/home”目录下,则路径为:/home/mysql-8.0.20/boost/boost_1_70_0。
编译MySQL。
make -j
说明:
-j96 参数充分利用多核CPU优势,加快编译速度,参数-j后数字为CPU核数,可用“cat /proc/cpuinfo | grep processor | wc -l”进行查看,此数值应小于等于CPU核数。
安装MySQL。
make install
ls /usr/local/mysql/
查看数据库版本。
/usr/local/mysql/bin/mysql --version
三、运行
编译安装方式安装:软件安装目录默认为“/usr/local/mysql”
1、修改配置文件
编辑my.cnf文件。
rm -f /etc/my.cnf
echo -e "[mysqld_safe]\nlog-error=/data/mysql/log/mysql.log\npid-file=/data/mysql/run/mysqld.pid\n[mysqldump]\nquick\n[mysql]\nno-auto-rehash\n[client]\ndefault-character-set=utf8\n[mysqld]\nbasedir=/usr/local/mysql\nsocket=/data/mysql/run/mysql.sock\ntmpdir=/data/mysql/tmp\ndatadir=/data/mysql/data\ndefault_authentication_plugin=mysql_native_password\nport=3306\nuser=mysql\n" > /etc/my.cnf
说明:
其中文件路径(包括软件安装路径basedir、数据路径datadir等)根据实际情况修改。user=mysql是指操作系统层的用户,即创建用户组和用户中创建的用户。
确保my.cnf配置文件修改正确。
cat /etc/my.cnf
修改配置文件/etc/my.cnf的用户组和用户权限为mysql:mysql。
chown mysql:mysql /etc/my.cnf
ll /etc/my.cnf
2、MySQL加入service服务。
chmod 777 /usr/local/mysql/support-files/mysql.server
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
修改/etc/init.d/mysql的用户组和用户权限为mysql:mysql
chown -R mysql:mysql /etc/init.d/mysql
ll /etc/init.d/mysql
3、配置环境变量。
修改环境变量文件/etc/profile和/usr/local/mysql的用户组和用户权限为mysql:mysql。
chown mysql:mysql /etc/profile
ll /etc/profile
chown -R mysql:mysql /usr/local/mysql
ll /usr/local/mysql
切换到mysql用户。
su - mysql
whoami
安装完成后,将MySQL二进制文件路径到PATH。
echo export PATH=$PATH:/usr/local/mysql/bin >> /etc/profile
注意:
其中PATH中的“/usr/local/mysql/bin”路径,为MySQL软件安装目录下的bin文件的绝对路径,请根据实际情况修改。
使环境变量配置生效。
source /etc/profile
查看环境变量。
env
4、初始化数据库。
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize
说明(有报错在执行,正常不要执行此步操作):
以上步骤回显倒数第2行中有初始密码,请注意保存,后面会用到。
如果初始化失败,提示“--initialize specified but the data directory has files in it.”则执行下面命令删除数据后重新初始化。
ls /data/mysql/data
rm -rf /data/mysql/data/
初始化完成后,查看数据目录下数据文件/data/mysql/data的用户组和用户权限为mysql:mysql(因为前面/etc/my.cnf文件中配置的操作系统用户是user=mysql)。
ll /data/mysql/data
5、启动数据库(有3种方式)。
启动数据库进程
注意:
如果以root用户(su - root)第一次启动数据库服务(service mysql start),则启动时会提示缺少mysql.log文件而导致失败。切换到mysql用户(su - mysql)启动数据库服务后,会在/data/mysql/log目录下生成mysql.log文件,停止数据库服务(service mysql stop),再次以root用户启动数据库服务则不会报错。
如果采用的镜像站RPM方式安装或编译安装,执行一下三种中一种方式即可。
service mysql start
或者
mysqld --defaults-file=/etc/my.cnf &
或者
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
查看数据库进程。
ps -ef | grep mysql
查看数据库监测端口。
netstat -anpt
netstat -anpt | grep mysql
netstat -anpt | grep 3306
6、登录数据库。
说明:
提示输入密码时,请输入上面初始化产生的初始密码。
如果采用官网RPM安装方式,则mysql文件在/usr/bin目录下。登录数据库的命令根据实际情况修改。
/usr/local/mysql/bin/mysql -uroot -p -S /data/mysql/run/mysql.sock
配置数据库帐号密码。
说明:
登录数据库以后,修改通过root用户登录数据库的密码。
alter user 'root'@'localhost' identified by "123456";
创建全域root用户(允许root从其他服务器访问)。
create user 'root'@'%' identified by '123456';
进行授权。
grant all privileges on *.* to 'root'@'%';
flush privileges;
退出数据库。
执行\q或者exit退出数据库。
exit
用修改后的密码重新登录数据库。
/usr/local/mysql/bin/mysql -uroot -p -S /data/mysql/run/mysql.sock
退出数据库
exit
7、关闭数据库(可选)。
service mysql stop
查看数据库进程。
ps -ef | grep mysql
四、安装sysbench(可选)
yum -y install unzip unzip automake libtool* mysql-devel
tar -zxvf sysbench-0.5.tar.gz
cd sysbench-0.5
./autogen.sh
./configure
make -j
make install
五、在mysql源码目录,打补丁(打补丁操作)
1、编译安装卸载
关闭数据库进程。
ps -ef | grep mysql
/usr/local/mysql/bin/mysqladmin -uroot -p123456 shutdown -S /data/mysql/run/mysql.sock
源码编译安装只是生成对应的文件,不涉及卸载,直接删除对应的安装目录和数据目录即可
ls /usr/local/mysql
rm -rf /usr/local/mysql
ls /data/mysql
rm -rf /data/mysql
2、重新执行步骤二的第三步,解压缩源码包后,把补丁传到源码包的根目录(/home/mysql-8.0.20)
git apply --whitespace=nowarn -p2 < mtr-pq.patch
git apply --whitespace=nowarn -p2 < code-pq.patch
编译完成运行截图:

一、安装前准备
1、关闭防火墙并取消开机自启动
停止防火墙。
systemctl stop firewalld.service
关闭防火墙。
systemctl disable firewalld.service
查看防火墙。
systemctl status firewalld.service
2、关闭SELIinux
设置SELinux成为permissive模式,临时关闭selinux。
setenforce 0
查看selinux状态,确认为Disabled模式。
getenforce
永久关闭selinux的方法:
执行vim /etc/sysconfig/selinux命令,打开SELinux文件,把"SELINUX=enforcing" 改为 "SELINUX=disabled"。
保存文件,并重启服务器。
确认SELinux是否关闭,如果SELinux status参数显示为disabled即为关闭状态。
/usr/sbin/sestatus -v
3、创建用户组和用户
创建mysql用户组。
groupadd mysql
创建mysql用户。
useradd -g mysql mysql
设置mysql用户密码。Huawei@123
passwd mysql
4、搭建数据盘
非性能测试时,直接执行创建数据目录。
mkdir /data
第一次搭建数据盘(挂载单独硬盘操作):
mkdir /data
ls /dev/nvme*
mkfs.xfs -f /dev/nvme0n1
du -sh /dev/nvme0n1
mount /dev/nvme0n1 /data/
df -h
非第一次搭建数据盘(挂载单独硬盘操作):
umount /data/
ls /dev/nvme*
mkfs.xfs -f /dev/nvme0n1
du -sh /dev/nvme0n1
mount /dev/nvme0n1 /data/
df -h
注意:
如果执行umount /data/时报错,如下图所示。
执行下面的操作解决。
yum -y provides fuser
yum -y install psmisc-*
fuser -km /data/ 该操作需要执行多次,直到没有回显为止
umount /data/
df -h
5、创建数据目录
创建数据目录/data和进程所需的相关目录。
mkdir -p /data/mysql
cd /data/mysql
mkdir data tmp run log
修改数据目录/data的用户组和用户权限为mysql:mysql。
chown -R mysql:mysql /data
ll /
二、安装mysql 8.0.20
1、安装依赖包
yum -y install bison ncurses ncurses-devel libaio-devel openssl openssl-devel gmp gmp-devel mpfr mpfr-devel libmpc libmpc-devel wget tar gcc gcc-c++ git rpcgen cmake m4
2、安装cmake
系统自带的CMake软件不能满足当前数据库版本的编译要求,需要升级CMake版本至3.4.3或者以上,本文以升级到3.5.2版本为例。
下载CMake 3.5.2。
CMake 3.5.2下载地址:https://cmake.org/files/v3.5/cmake-3.5.2.tar.gz
将软件包上传至服务器/home目录,并解压。
cd /home
tar -zxvf cmake-3.5.2.tar.gz
进入解压后目录。
cd cmake-3.5.2
升级CMake。
./bootstrap
make -j
make install
确认CMake的版本是否为3.5.2。
/usr/local/bin/cmake --version
3、编译和安装mysql 8.0.20
如果编译安装失败,需要执行如下命令清理环境,然后参照该章节的步骤重新解压并编译安装。
rm -rf /home/mysql-8.0.20
下载源码包。
下载MySQL源码包(includes Boost Headers)。
下载网站地址:https://downloads.mysql.com/archives/community/
直接下载地址:
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-8.0.20.tar.gz
将mysql-boost-8.0.20.tar.gz上传至服务器“/home”目录下,并解压。
cd /home
tar -zxvf mysql-boost-8.0.20.tar.gz
进入“/home/mysql-8.0.20”源码文件夹,并建立一个编译目录。
cd /home/mysql-8.0.20
mkdir build
进入编译目录,配置MySQL。
cd build
cmake .. -DBUILD_CONFIG=mysql_release -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql/data -DWITH_BOOST=/home/mysql-8.0.20/boost/boost_1_70_0
关键参数说明
参数
说明
DBUILD_CONFIG
设置为mysql_release的含义是指CMake编译参数采用Mysql官方发布release版本时的编译参数。
DCMAKE_INSTALL_PREFIX
用于指定软件的安装路径,本文安装路径为:/usr/local/mysql。文档中的安装路径只是参考,根据客户实际情况进行配置。
DMYSQL_DATADIR
创建数据库时,数据文件存放的路径。本次安装路径为:/data/mysql/data。
DWITH_BOOST
解压MySQL源码包后,解压文件中boost_1_70_0文件夹所在路径。例如,本文解压在“/home”目录下,则路径为:/home/mysql-8.0.20/boost/boost_1_70_0。
编译MySQL。
make -j
说明:
-j96 参数充分利用多核CPU优势,加快编译速度,参数-j后数字为CPU核数,可用“cat /proc/cpuinfo | grep processor | wc -l”进行查看,此数值应小于等于CPU核数。
安装MySQL。
make install
ls /usr/local/mysql/
查看数据库版本。
/usr/local/mysql/bin/mysql --version
三、运行
编译安装方式安装:软件安装目录默认为“/usr/local/mysql”
1、修改配置文件
编辑my.cnf文件。
rm -f /etc/my.cnf
echo -e "[mysqld_safe]\nlog-error=/data/mysql/log/mysql.log\npid-file=/data/mysql/run/mysqld.pid\n[mysqldump]\nquick\n[mysql]\nno-auto-rehash\n[client]\ndefault-character-set=utf8\n[mysqld]\nbasedir=/usr/local/mysql\nsocket=/data/mysql/run/mysql.sock\ntmpdir=/data/mysql/tmp\ndatadir=/data/mysql/data\ndefault_authentication_plugin=mysql_native_password\nport=3306\nuser=mysql\n" > /etc/my.cnf
说明:
其中文件路径(包括软件安装路径basedir、数据路径datadir等)根据实际情况修改。user=mysql是指操作系统层的用户,即创建用户组和用户中创建的用户。
确保my.cnf配置文件修改正确。
cat /etc/my.cnf
修改配置文件/etc/my.cnf的用户组和用户权限为mysql:mysql。
chown mysql:mysql /etc/my.cnf
ll /etc/my.cnf
2、MySQL加入service服务。
chmod 777 /usr/local/mysql/support-files/mysql.server
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
修改/etc/init.d/mysql的用户组和用户权限为mysql:mysql
chown -R mysql:mysql /etc/init.d/mysql
ll /etc/init.d/mysql
3、配置环境变量。
修改环境变量文件/etc/profile和/usr/local/mysql的用户组和用户权限为mysql:mysql。
chown mysql:mysql /etc/profile
ll /etc/profile
chown -R mysql:mysql /usr/local/mysql
ll /usr/local/mysql
切换到mysql用户。
su - mysql
whoami
安装完成后,将MySQL二进制文件路径到PATH。
echo export PATH=$PATH:/usr/local/mysql/bin >> /etc/profile
注意:
其中PATH中的“/usr/local/mysql/bin”路径,为MySQL软件安装目录下的bin文件的绝对路径,请根据实际情况修改。
使环境变量配置生效。
source /etc/profile
查看环境变量。
env
4、初始化数据库。
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize
说明(有报错在执行,正常不要执行此步操作):
以上步骤回显倒数第2行中有初始密码,请注意保存,后面会用到。
如果初始化失败,提示“--initialize specified but the data directory has files in it.”则执行下面命令删除数据后重新初始化。
ls /data/mysql/data
rm -rf /data/mysql/data/
初始化完成后,查看数据目录下数据文件/data/mysql/data的用户组和用户权限为mysql:mysql(因为前面/etc/my.cnf文件中配置的操作系统用户是user=mysql)。
ll /data/mysql/data
5、启动数据库(有3种方式)。
启动数据库进程
注意:
如果以root用户(su - root)第一次启动数据库服务(service mysql start),则启动时会提示缺少mysql.log文件而导致失败。切换到mysql用户(su - mysql)启动数据库服务后,会在/data/mysql/log目录下生成mysql.log文件,停止数据库服务(service mysql stop),再次以root用户启动数据库服务则不会报错。
如果采用的镜像站RPM方式安装或编译安装,执行一下三种中一种方式即可。
service mysql start
或者
mysqld --defaults-file=/etc/my.cnf &
或者
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
查看数据库进程。
ps -ef | grep mysql
查看数据库监测端口。
netstat -anpt
netstat -anpt | grep mysql
netstat -anpt | grep 3306
6、登录数据库。
说明:
提示输入密码时,请输入上面初始化产生的初始密码。
如果采用官网RPM安装方式,则mysql文件在/usr/bin目录下。登录数据库的命令根据实际情况修改。
/usr/local/mysql/bin/mysql -uroot -p -S /data/mysql/run/mysql.sock
配置数据库帐号密码。
说明:
登录数据库以后,修改通过root用户登录数据库的密码。
alter user 'root'@'localhost' identified by "123456";
创建全域root用户(允许root从其他服务器访问)。
create user 'root'@'%' identified by '123456';
进行授权。
grant all privileges on *.* to 'root'@'%';
flush privileges;
退出数据库。
执行\q或者exit退出数据库。
exit
用修改后的密码重新登录数据库。
/usr/local/mysql/bin/mysql -uroot -p -S /data/mysql/run/mysql.sock
退出数据库
exit
7、关闭数据库(可选)。
service mysql stop
查看数据库进程。
ps -ef | grep mysql
四、安装sysbench(可选)
yum -y install unzip unzip automake libtool* mysql-devel
tar -zxvf sysbench-0.5.tar.gz
cd sysbench-0.5
./autogen.sh
./configure
make -j
make install
五、在mysql源码目录,打补丁(打补丁操作)
1、编译安装卸载
关闭数据库进程。
ps -ef | grep mysql
/usr/local/mysql/bin/mysqladmin -uroot -p123456 shutdown -S /data/mysql/run/mysql.sock
源码编译安装只是生成对应的文件,不涉及卸载,直接删除对应的安装目录和数据目录即可
ls /usr/local/mysql
rm -rf /usr/local/mysql
ls /data/mysql
rm -rf /data/mysql
2、重新执行步骤二的第三步,解压缩源码包后,把补丁传到源码包的根目录(/home/mysql-8.0.20)
git apply --whitespace=nowarn -p2 < mtr-pq.patch
git apply --whitespace=nowarn -p2 < code-pq.patch
编译完成运行截图: