主备集群升级
大体步骤
- 停止主备节点之间的同步;
- 停止备用节点keepalived,避免发生意外导致VIP迁移到正在升级的备用节点;
- 停止备用节点;
- 使用新版本预编译包替换备用节点预编译包,并执行upgrade;
- 启动备用节点,启动备用节点keepalived,开启主节点至从节点的同步,保持数据一致性;
- 停止主节点keepalived,使VIP迁移至备用节点;
- 停止主节点至从节点的同步。
- 停止主节点,并使用新版本预编译包替换主节点预编译包,并执行upgrade;
- 恢复主备节点之间的双向同步,启动主节点keepalived,使VIP迁移回主节点。
实现细节(在线)
检查同步状态
show slave status \G
show master status \G
备库升级新版本软件
停止主备节点同步,所有节点都需要执行
# 记录主节点当前position
mysql -uroot -p -e 'show master status;'
mysql -uroot -p -e "stop slave;"
停止备用节点keepalived进程和MySQL进程
systemctl stop keepalived
mysql -u root -p -e "SET GLOBAL innodb_fast_shutdown=0" # 必须设置该参数
systemctl stop mysqld
冷备数据
cp -rp /data/mysql/data /data/mysql/data_$(date +%Y%m%d)
# 备份旧版mysql目录
mv /usr/local/mysql /usr/local/mysql5.7.40
升级软件
先对 slave 进行升级
前往官网下载最新的5.7版本的源码包:
cd /usr/local/src/
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.41-linux-glibc2.12-x86_64.tar.gz
tar -zxf mysql-5.7.41-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.41-linux-glibc2.12-x86_64 /usr/local/mysql
# 4. 修改软件目录用户及用户组
chown -R mysql:mysql /usr/local/mysql
启动数据库服务
systemctl start mysqld
升级数据字典
/usr/local/mysql/bin/mysql_upgrade -uroot -pxxxx
检查数据库状态
select version();
status;
show slave status\G
show master status;
恢复备库同步
主库执行
# 查看主库当前position,对比之前备库升级前的position,如果没有变更可直接在备库重新开启slave同步即可
show master status;
备库执行
# 若主库position有变动,需要为备库重新配置master
CHANGE MASTER TO MASTER_HOST='xx.xx.xx.xx', MASTER_USER='xxxx', MASTER_PASSWORD='xxxx', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=xxxx;
start slave;
# 查看主从同步的IO和SQL状态是否为YES,若不对则查看日志解决
show slave status\G