记录一次因MySQL漏洞问题导致的生产数据库紧急迁移方案!
回顾
最开始部署的MySQL版本为5.7.21,因有部分漏洞因此需要紧急升级到MySQL 5.7.38版本。升级期间我们做了大概如下几个步骤:
1、备份数据库
2、考虑如何升级到指定MySQL
3、升级后的MySQL主从同步配置
4、源数据的导入
因为考虑到是生产环境所以对数据进行了双重备份,而且接下来的所有操作先在从节点进行操作。保证此环境的服务器可以满足升级,且能够再从库进行升级成功后,再对主节点MySQL进行升级。
一、从节点
1、备份数据
- 备份原有数据库的数据
sudo mysqldump -uroot -p --all-databases >allbackup20220704.sql
- 对原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、备份原有数据库的数据
sudo mysqldump -uroot -p --all-databases >
allbackup20220704.sql
- 对原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文件及位点信息
进入从节点执行如下命令
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;
四、导入源数据
1、主节点导入源数据,
mysql -uroot -p密码
source /data/*.sql
2、从节点查看主从状态是否正常
show slave status\G;
若显示正常,则此次升级就完美告一段落。