主从复制环境下的mysql升级

本文详细描述了如何备份MySQL数据库、从库和主库的升级过程,包括停止服务、备份数据、替换二进制包、升级步骤以及注意事项,重点介绍了替代升级和逻辑升级的区别与操作方法。
摘要由CSDN通过智能技术生成

一、整体思路:

  1. 备份
  2. 停止从,升级从
  3. 升级主

二、详细步骤:

1. 备份

通过备份来保护数据库,未雨绸缪,当意外出现时能够恢复,推荐主从都备份。

​ 1)进入mysql安装目录,假设安装在 /usr/local/mysql

cd /usr/local/mysql/

2)备份数据

​ 例如,使用mysqldump备份,导出所有数据库:

bin/mysqldump --all-databases > dump.sql

3)备份二进制安装包目录(bin、docs、include、lib、man、share、support-files),如果采用替代方式升级,这些目录会被替换(没使用软连接)

​ 创建一个目录,比如 back+日期,然后拷贝bin,docs,include,lib,man,share,support-files至该目录

mkdir back-211123

cp -rp {bin,docs,include,lib,man,share,support-files} back-211123

2. 从库升级

2.1 停止MySQL server(从)

进入数据库执行sql:stop slave; 参考命令:

bin/mysql -u root -p -e "stop slave;"

设置innodb_fast_shutdown=0, 参考命令:

bin/mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0;"

停止mysql服务,参考命令:

bin/mysqladmin -u root -p shutdown

冷备份数据(如已备份则省去该步骤),例:

cp -rp data data_20211120

2.2 升级

  • 二进制安装包的升级,官网提供了两种升级方式:1.替代升级;2. 逻辑升级(见附录)

  • 升级前准备:
    1.再次强调,通过备份来保护数据库。
    2.支持的升级方式:

    • 升级仅支持在GA(General Availability)分支版本之间。
    • 支持从MySQL 5.6升级到5.7。推荐升级前先升级到最新版,例如,先更新至5.6的最新版,再更新到5.7。
    • 不支持跨版本升级。例如,不支持直接从MySQL 5.5跨版本到5.7。
    • 支持在同一个分支版本系列的升级。例如,支持从MySQL 5.7.x 升级到 5.7.y。也支持跨分支升级,例如,从MySQL 5.7.x升级到5.7.z。
  • 替代升级 (同一个分支版本系列的升级建议采用此方式,如从MySQL 5.7.x升级到5.7.z)

1) 替换二进制安装包为更新版本

解压缩,之后替换7个目录 (记得备份旧目录):bin、docs、include、lib、man、share、support-files

参考解压命令:

tar zxvf mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz

假设解压后,目录为/usr/local/mysql-5.7.34-linux-glibc2.12-x86_64;mysql安装目录,假设安装在 /usr/local/mysql,参考命令:

cp -rpf /usr/local/mysql-5.7.34-linux-glibc2.12-x86_64/* /usr/local/mysql/
2) 启动 MySQL 5.7 server,不要开启主从同步,参考命令:
bin/mysqld_safe --user=mysql --skip-slave-start &
3) 运行mysql_upgrade,参考命令;
bin/mysql_upgrade -u root -p --upgrade-system-tables 

可选项: --upgrade-system-tables 只更新系统表。

​ 如果没有使用 --upgrade-system-tables 这个可选项, mysql_upgrade会升级所有表,检查表可能会花费很长的时间,在这个过程中,所有的表都会被锁,其他会话将无法建立。特别是数据量大的表,检查和修复会很耗时。

官方文档原文如下:https://dev.mysql.com/doc/refman/5.7/en/mysql-upgrade.html

在这里插入图片描述

4) 重启mysql,参考命令:
bin/mysqladmin -u root -p shutdown
bin/mysqld_safe --user=mysql &

3. 主库升级

  • 当从库都更新完毕后,停止主库的运行,将主库更新至与从库相同的5.7.x分支版本,然后重启主库。

  • 记得备份,主库停止,替代升级,升级字典禁用二进制日志写入(skip-write-binlog),然后正常方式重启主库

3.1 停止MySQL server(主)

设置innodb_fast_shutdown=0, 参考命令:

bin/mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0"

停止mysql服务,参考命令:

bin/mysqladmin -u root -p shutdown

3.2 升级

1) 替换二进制安装包为更新版本
  1. 解压缩,之后替换7个目录
    (记得备份旧目录):bin、docs、include、lib、man、share、support-files

    附:参考解压命令:

tar zxvf mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz

假设解压后,目录为/usr/local/mysql-5.7.34-linux-glibc2.12-x86_64;mysql安装目录,假设安装在 /usr/local/mysql,参考命令:

cp -rpf /usr/local/mysql-5.7.34-linux-glibc2.12-x86_64/* /usr/local/mysql/
2) 启动

参考启动命令:

  1. bin/mysqld_safe --user=mysql &
  2. service mysql start
3) 运行mysql_upgrade(升级时禁用二进制日志写入–skip-write-binlog)
bin/mysql_upgrade --skip-write-binlog -u root -p --upgrade-system-tables 

可选项: --upgrade-system-tables 只更新系统表。

如果没有使用 --upgrade-system-tables 这个可选项, mysql_upgrade会升级所有表,检查表可能会花费很长的时间,在这个过程中,所有的表都会被锁,其他会话将无法建立。特别是数据量大的表,检查和修复会很耗时。

官方文档原文如下:https://dev.mysql.com/doc/refman/5.7/en/mysql-upgrade.html
在这里插入图片描述
4) 重启,参考命令如下

bin/mysqladmin -u root -p shutdown
bin/mysqld_safe --user=mysql &

参考资料

官方文档 version5.7 16.4.3 Upgrading a Replication Setup

https://dev.mysql.com/doc/refman/5.7/en/replication-upgrade.html

官方文档 version5.7 2.11.4 Upgrading MySQL Binary or Package-based Installations on Unix/Linux

https://dev.mysql.com/doc/refman/5.7/en/upgrade-binary-package.html

附录:

1.导出旧mysql服务数据:

bin/mysqldump -u root -p
     --add-drop-table --routines --events
     --all-databases --force > data-for-upgrade.sql

2.停止旧mysql服务

bin/mysqladmin -u root -p shutdown

3.安装新的MySQL 5.7.z (见mysql安装文档或百度)
4.初始化数据字典,参考命令:/path/to/5.7-datadir 是数据字典路径,可指定比如 --datadir=/usr/local/mysql/data

bin/mysqld --initialize --datadir=/path/to/5.7-datadir

5.启动MySQL 5.7 server,使用新的数据字典,参考命令:

bin/mysqld_safe --user=mysql --datadir=/path/to/5.7-datadir &

6.重置密码

mysql -u root -p

Enter password: * <- 输入刚才的临时密码,手动输入。

进入mysql client端后,运行SQL语句,your new password是你的新密码。

ALTER USER USER() IDENTIFIED BY 'your new password';

7.导入之前创建的文件到新的MySQL server,参考命令(若为从库,该步骤可省)

bin/mysql -u root -p --force < data-for-upgrade.sql

8.运行mysql_upgrade,

# 主库
bin/mysql_upgrade -u root -p --skip-write-binlog --upgrade-system-tables 

# 从库
bin/mysql_upgrade -u root -p --upgrade-system-tables 

9.重启

bin/mysqladmin -u root -p shutdown
bin/mysqld_safe --user=mysql --datadir=/path/to/5.7-datadir &

10.重新搭建从库。

  • 12
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值