记录一次因MySQL漏洞问题导致的生产数据库紧急迁移方案!

回顾

最开始部署的MySQL版本为5.7.21,因有部分漏洞因此需要紧急升级到MySQL 5.7.38版本。升级期间我们做了大概如下几个步骤:

1、备份数据库
2、考虑如何升级到指定MySQL
3、升级后的MySQL主从同步配置
4、源数据的导入

因为考虑到是生产环境所以对数据进行了双重备份,而且接下来的所有操作先在从节点进行操作。保证此环境的服务器可以满足升级,且能够再从库进行升级成功后,再对主节点MySQL进行升级。

一、从节点

1、备份数据

  1. 备份原有数据库的数据
sudo mysqldump -uroot -p --all-databases >allbackup20220704.sql
  1. 对原MySQL的数据目录进行备份
cp  -r /data/mysql /data/mysql_01

2、删除原有MySQL的rpm包

rpm -qa | grep mysql | xargs  rpm -e --nodeps

3、上传本次升级的rpm包

上传本次升级的rpm安装包,依次在上传目录下执行如下步骤

rpm -ivh mysql-community-common-5.7.38-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.38-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.38-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.38-1.el7.x86_64.rpm

4、修改my.cnf

原有的MySQL配置文件因对MySQL进行卸载后,其配置文件命名规则已经发生改变成为了my.cnf.rpmsave。因此我们需要将/etc/my.cnf 备份。执行下述命令:

mv /etc/my.cnf /etc/my.cnf.bak
mv /etc/my.cnf.rpmsave /etc/my.cnf

此处需要修改升级后的MySQL数据存放目录,切勿与第一次的目录一致。

5、重新启动

systemctl restart mysqld

6、查看密码

根据my.cnf里面配置的MySQL的日志路径,查找MySQL密码,并对其进行修改密码。

cat /data/mysql/mysqld.log | grep localhost

修改密码

set global validate_password_policy = 0;
SET PASSWORD = PASSWORD('root');
grant all privileges on *.* to root@'%' identified by 'root';

若机器安装过多次MySQL,密码则为最后一条数据显示的密码。

若从节点能够正常启动后,则接下来对主节点执行同样的上述操作。

二、主节点

1、备份数据

  1. 1、备份原有数据库的数据
sudo mysqldump -uroot -p --all-databases >
   allbackup20220704.sql
  1. 对原MySQL的数据目录进行备份
cp  -r /data/mysql /data/mysql_01

2、删除原有MySQL的rpm包

rpm -qa | grep mysql | xargs  rpm -e --nodeps

3、上传本次升级的rpm包

上传本次升级的rpm安装包,依次在上传目录下执行如下步骤

rpm -ivh mysql-community-common-5.7.38-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.38-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.38-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.38-1.el7.x86_64.rpm

4、修改my.cnf

原有的MySQL配置文件因对MySQL进行卸载后,其配置文件命名规则已经发生改变成为了my.cnf.rpmsave。因此我们需要将/etc/my.cnf 备份。执行下述命令:

mv /etc/my.cnf /etc/my.cnf.bak
mv /etc/my.cnf.rpmsave /etc/my.cnf

此处需要修改升级后的MySQL数据存放目录,切勿与第一次的目录一致。

5、重新启动

systemctl restart mysqld

6、查看密码

根据my.cnf里面配置的MySQL的日志路径,查找MySQL密码,并对其进行修改密码。

cat /data/mysql/mysqld.log | grep localhost

修改密码

set global validate_password_policy = 0;
SET PASSWORD = PASSWORD('root');
grant all privileges on *.* to root@'%' identified by 'root';

三、配置主从

此处一定要先配置主从同步,检查主从同步状态正常后。再将数据导入主节点MySQL,导入后可以在检查一遍主从状态是否正常。此处博主先导入数据,再配置同步,试了好几次主从都是有问题的。

1、查看主节点位点

进入主节点的MySQL命令行

mysql -uroot -p密码
show master status\G
#获取到主节点的bin文件及位点信息

mysql升级步骤 mysql版本怎么升级_mysql

进入从节点执行如下命令

stop slave;
CHANGE MASTER TO
MASTER_HOST='主节点IP'      ,
MASTER_PORT=MySQL端口,
MASTER_USER='同步账户'                 ,
MASTER_PASSWORD='同步密码'         ,
MASTER_LOG_FILE='主节点bin文件',
MASTER_LOG_POS=主节点位点;
start slave;
#查看主从是否正常
show slave status\G;

mysql升级步骤 mysql版本怎么升级_数据库_02

四、导入源数据

1、主节点导入源数据,

mysql -uroot -p密码
source /data/*.sql

2、从节点查看主从状态是否正常

show slave status\G;

mysql升级步骤 mysql版本怎么升级_MySQL_03

若显示正常,则此次升级就完美告一段落。