Amazon RDS MySQL5无缝升级到MySQL8方案
操作前请在Amazon进行数据库快照备份,数据无价!!
1、Amazon官网已经给出三种方案
https://aws.amazon.com/cn/blogs/china/amazon-rds-for-mysql-5-7-to-8-0-upgrade-solution/
这里我们使用蓝绿部署,尽可能减少服务器停机时间
2、Amazon RDS for MySQL 5.7 到 8.0 升级前置检查
兼容性检查函数 util.checkForServerUpgrade()会根据目标版本和源版本之间的更改定义兼容性检查项
1)MySQL Shell 升级检查函数 util.checkForServerUpgrade()具体的使用方法如下:
[root@ip-bin]#wget https://dev.mysql.com/get/Downloads/MySQL-Shell/mysql-shell-8.0.32-linux-glibc2.12-x86-64bit.tar.gz
[root@ip-bin]#tar -xvzf mysql-shell-8.0.32-linux-glibc2.12-x86-64bit.tar.gz
[root@ip-bin]#cd mysql-shell-8.0.32-linux-glibc2.12-x86-64bit/bin
[root@ip-bin]#./mysqlsh
MySQL JS > util.checkForServerUpgrade('admin@your-instance.rds.amazonaws.com:3306',{"password":"123456","targetVersion":"8.0.30"})
The MySQL server at your-instance.rds.amazonaws.com:3306,
version 5.7.38-log - Source distribution, will now be checked for compatibility
issues for upgrade to MySQL 8.0.30...
Errors: 0
Warnings: 4
Notices: 0
2)使用 MySQL Shell 工具进行前置检查的时候,需选择正确的工具版本。MySQL Shell 8.0.21 及更高版本可用于 RDS 检测,如果版本低于 8.0.21,会出现以下报错:
Util.checkForServerUpgrade: Access denied for user 'admin'@' (using password: YES) (MySQL Error 1045)
3)需要注意选择正确版本且保证待检测实例版本与工具版本相匹配。MySQL Shell 默认可检测 8.0.11 至工具版本一致的 MySQL Server 版本。如果选择了与工具版本不相符的实例进行检测,如工具版本为 8.0.21,用来检测 RDS MySQL 5.7.38 版本实例升级至 RDS MySQL 8.0.32 版本会出现以下报错:
The MySQL server at your-instance.rds.amazonaws.com:3306,
version 5.7.38-log - Source distribution, will now be checked for compatibility
issues for upgrade to MySQL 8.0.30...
Util.checkForServerUpgrade: This tool supports checking upgrade to MySQL server versions 8.0.11 to 8.0.21 (LogicError)
如果选择了 RDS MySQL 实例目标版本小于待检测实例的版本,具体报错如下:
The MySQL server at
your-instance.rds.amazonaws.com:3306, version
8.0.26 - Source distribution, will now be checked for compatibility issues for
upgrade to MySQL 8.0.25...
Util.checkForServerUpgrade: Target version must be greater than current version of the server (ArgumentError)
3、解决出现的Error项。
对于数据库中包含存储过程的,需要对存储过程进行修改,需要在Amazon数据库控制台配置数据库参数组
log_bin_trust_function_creators=1 #设置 log_bin_trust_function_creators 为 1,避免二进制日志安全检查。
设置完以上配置,将数据库实例绑定到该配置,并重启数据库实例。
4、创建蓝绿部署
5、创建MySQL8自定义数据库配置,并将MySQL5的自定义配置拷贝到MySQL8
6、切换蓝绿部署
在Amazon控制台切换蓝绿部署,将MySQL5升级到MySQL8,切换完成后无需修改程序中的数据库连接信息,可无缝衔接到MySQL8数据库。