Mysql数据库主从同步小版本升级方案
如果下文中有任何问题敬请更新指证。
1.升级方式说明
MySQL升级的两种方式:
- in-place upgrade:
适合小版本的升级。
即:关闭当前的MySQL,替换当前的二进制文件或包,在现有的数据目录上重启MySQL,并运行mysql_upgrade.
特点:不改变数据文件,升级速度快;但不可以跨操作系统,不可以跨大版本(5.5—>5.7就不行)。
- logical upgrade:
适合不同操作系统的MySQL升级,大版本之间的升级。
即:使用mysqldump 或 mydumper 导出导入数据,实现版本的升级。
特点:可以跨操作系统,跨大版本;但升级速度慢,容易出现乱码等问题。
本次升级版本为:
现有版本 | 升级版本 |
Mysql 5.7.23 | Mysql 5.7.36 |
Mysql 8.0.20 | Mysql 8.0.27 |
本次升级版本为小版本范围内的升级,因此采用“in-place upgrade”的升级方式进行升级。
2.升级步骤
从库
2.1 预校验
5.7小版本升级,参数的变动列表可以参考官方文档:
https://dev.mysql.com/doc/refman/5.7/en/added-deprecated-removed.html
经过对比基于Mysql 5.7.23升级到Mysql5.7.36没有参数Removed和Deprecated。
5.7版本通过mysql_upgrade进行数据校验和修复。
以前在升级MySQL5.6、5.7的时候,通常我们会查阅官方文档,看看新老版本之间有什么变化,比如参数的变动,然后根据变动我们调整对应的参数,现在我们有了新的选择 MySQL Shell, 它让升级检查更加简单,容易,方便,快捷。如果系统未安装Mysql Shell需准备好相关安装包并进行安装。
#本地测试例子:
[root@localhost bin]# ./mysqlsh -- util checkForServerUpgrade root@localhost:3306 --target-version=8.0.27 --output-format=JSON --config-path=/etc/my.cnf
{
"serverAddress": "localhost:3306",
"serverVersion": "8.0.20 - MySQL Community Server - GPL",
"targetVersion": "8.0.27",
"errorCount": 0,
"warningCount": 0,
"noticeCount": 0,
"summary": "No known compatibility errors or issues were found.",
"checksPerformed": [
{
"id": "checkTableOutput",
"title": "Issues reported by 'check table x for upgrade' command",
"status": "OK",
"detectedProblems": []
}
],
"manualChecks": []
}
运行后即可直接看结果,按照输出的提示信息进行升级前各项的检查工作。
2.2新版本mysql环境准备
- 解压mysql 8.0.27
tar -zxvf mysql-commercial-8.0.27-el7-x86_64.tar.gz -C /software/
- 替换软链接/替换mysql程序二进制文件
没有软连接的话,将原dataDir数据目录在/usr/local/mysql目录下请保留$dataDir数据目录。
[root@hhdb software]# unlink mysql
[root@hhdb software]# ln -s mysql-commercial-8.0.27-el7-x86_64 /usr/local/mysql
- 修改目录权限
chown -R mysql.mysql mysql-commercial-8.0.27-el7-x86_64
2.3停从库流量和实例并备份数据
1.检查表是否损坏
mysql> select * from information_schema.tables where TABLE_COMMENT like '%repair%';
Empty set (0.06 sec)
2.检查从库主从是否正常及有无延迟
mysql> show slave status \G
3.停从库流量及io_thread
mysql> stop slave io_thread;
Query OK, 0 rows affected (0.03 sec)
4.数据全部落盘
待slave sql_thread完全应用后全部落盘
mysql> set global innodb_fast_shutdown=0;
Query OK, 0 rows affected (0.00 sec)
5.停从库
mysql> shutdown;
Query OK, 0 rows affected (0.01 sec)
6.备份数据
通过 cp datadir 目录的方式来备份
cp –r /oradata/data /backup/
2.4启动新版本MySQL
1.检查my.cnf配置文件
1.1 检查basedir指向位置是否正确
1.2 super_read_only 如果开启的话需要临时关闭,后期升级数据字典时候需要写入数据
2.检查启动脚本basedir指向是否正确,检查环境变量路劲配置是否正确。
3.启动mysql
service mysqld start
4.查看升级后的版本(8.0.16后版本到此升级成功)
mysql> select version();
±------------------+
| version() |
±------------------+
| 8.0.27-commercial |
±------------------+
1 row in set (0.00 sec)
2.5运行 mysql_upgrade 升级数据字典(MySQL 8.0.16之前的版本需要执行该步骤)
1.运行 mysql_upgrade
出现Upgrade process completed successfully字样表示成功
如果中间出现错误打断,需要再次运行
mysql_upgrade -uroot -S /tmp/mysql.sock
2.6升级后操作
1.检查主从状态及延迟情况
mysql> show slave status \G
主库
3.1.停主库流量
3.2.待主从数据一致后进行主从切换
3.3.原主库重复上述(2.1~2.5)步骤升级