一、整体思路:
- 备份
- 停止从,升级从
- 升级主
二、详细步骤:
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) 替换二进制安装包为更新版本
-
解压缩,之后替换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) 启动
参考启动命令:
bin/mysqld_safe --user=mysql &
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
附录:
- 逻辑升级
逻辑升级后,需要重新搭建主从。
总体而言,逻辑升级涉及以下步骤:使用备份或导出工具,如mysqldump或mysqlpump,导出旧mysql服务的数据,安装新mysql服务,使用新的mysql服务。详见官方文档:https://dev.mysql.com/doc/refman/8.0/en/upgrade-binary-package.html#upgrade-procedure-logical
逻辑升级详细步骤:
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.重新搭建从库。