步骤
离线方式
-
主从替换二进制安装包为最新版本
-
停从,通过mysql_upgrade升级后,加参数 --skip-slaves-start (不开启复制启动)进行启动从库
-
主库禁用二进制日志写入(skip-write-binlog),执行mysql_upgrade,然后正常方式重启主库
# 1. slave
mysql_upgrade
# 2. master
mysql_upgrade --skip-write-binlog
在线升级
- 升级从库
- 主从切换
- 再次按照从库升级方式完成集群中所有软件升级
实现细节(在线)
检查同步状态
show slave status G
show master status G
从库升级新版本软件
停止MySQL服务(slave端)
mysql -u root -p -e "stop slave;"
mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0" # 必须设置该参数
systemctl stop mysqld
冷备数据
cp -rp data data_$(date +%Y%M%D)
升级软件
先对slave进行升级
unlink mysql
tar -xf mysql-5.7.18-linux-glibc2.5-x86_64.zip
# 3. 创建软链接
ln -s mysql-5.7.18 mysql
# 4. 修改软件目录用户及用户组
chow -R mysql:mysql mysql-5.7.18
启动数据库服务
/usr/local/mysql/bin/mysqld_safe --user=mysql --defaults-file=/etc/my.cnf --skip-grant-tables --skip-networking &
升级数据字典
/usr/local/mysql/bin/mysql_upgrade --protocol=tcp -P 3308
检查数据库状态
select @@version();
status;
show slave statusG
show master statusG
主从切换
确认都已开启log_bin日志
确认主从都已开启log_bin
show variables like '%log_bin%';
-- 将主库设置成read_only模式
set global read_only=ON;
show variables like '%read_only%';
日志切换
flush tables;
flush logs;
show master status;
停止slave服务并开启写功能
stop slave;
set global read_only=off;
show variables like '%read_only%';
主从切换
原master端执行
# 基于binlog + position
CHANGE MASTER TO
MASTER_HOST='192.168.10.181',
MASTER_USER='sync',
MASTER_PASSWORD='sync',
MASTER_PORT=3308,
MASTER_LOG_FILE='b3308.000014',
MASTER_LOG_POS=852;
# 基于gtid
CHANGE MASTER TO
MASTER_HOST='192.168.10.181',
MASTER_USER='sync',
MASTER_PASSWORD='sync',
MASTER_PORT=3308,
master_auto_position=1;
start slave;
show slave statusG