崔虎龙
数据和云
墨墨导读:
每个 DBA 在工作中都会面临数据库升级的问题,本文详细介绍MySQL 从 5.7 升级到 8.0 的过程,希望可以帮助到大家。
为什么升级到MySQL 8.0
-
基于安全考虑
-
基于性能和 稳定性考虑:
mgr复制 ,并行复制writeset 等功能,性能提升
-
新的功能:
Hash join ,窗口函数,DDL即时,json 支持
-
原始环境中版本太多,统一版本
-
8.0版本基本已到稳定期,可以大量投入生产环境中
升级之前需要了解
-
数据库字典升级
schema,mysql,information_schema,performance_schema,sys
比如:密码测试 mysql_native_password → caching_sha2_password
-
关键词是不是兼容
https://dev.mysql.com/doc/refman/8.0/en/keywords.html
关键词 added in查询
-
SQL是不是兼容
Group by处理上的不兼容,触发器,存储过程
5.6 可以跑select id,count(*)from group by name;
5.7,8.0是不是允许的 sql_mode控制
-
数据文件存储格式是不是可以直接升级
Perconal 和 mysql 存储引擎一直,可以完全兼容
-
现有应用的兼容性是否满足
自定义函数,一些不规范的SQL语句等等
-
密码策略
What Is New in MySQL 8.0
作为DBA需要基本了解8.0的一些功能,参考:https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html
-
Added in 添加功能
-
Features Deprecated 弃用功能
-
Features Removed 移除功能
升级准备事项
已经了解8.0的特性,应对升级需要事先进行验证和准备工作
升级前检查
Mysql8.0还是提供了很多方便,不像之前一样5.6升级5.7那样。现在可以通过mysql shell进行确认。
https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-upgrade.html
下面2种方式
-
测试库升级,应用验证
-
数据库升级,末知问题发生
-
my.cnf配置信息调整
-
不兼容的操作方法,影响复制
一个平稳的过滤,列如先升级一个从库,到所有从库
最少停机时间,同样生产数据恢复到环境,进行模拟升级,评估时间
怎样进行数据验证:行数,表的数量 等等
考虑回滚方案
数据库备份
按照提示的要求进行更改
虽然shell做的很好,但还是存在一些缺陷。
比如以下内容都不会存在提示:
1. basedir,
2. sql_mode ,
3. 半同步配置,
4. 密码策略:default_authentication_plugin = mysql_native_password
开始升级
官网下载对应的tar包
https://downloads.mysql.com/archives/community/
下面是单机升级,高可用架构下 需要先升级从库,在逐步升级主库。
执行mysql_upgrade命令,会提示如下:
正确操作如下:
1)登录服务器进行正常关闭:innodb_fast_shutdown是默认是1,常常认为是安全关闭
在MySQL 8中mysql_upgrade客户端现已弃用。升级客户端执行的操作现在由服务器完成。
要升级,请使用较旧的数据目录启动新的 MySQL 二进制文件。自动修复用户表。升级后不需要重新启动。
所以必须在测试环境模拟准备对应SQL语句
正确操作如下:
1)登录服务器进行正常关闭:innodb_fast_shutdown是默认是1,常常认为是安全关闭
关闭innodb参数确认
确保数据都刷到硬盘上,更改成0
2)用mysql8.0.19客户端直接启动
启动mysql服务
登录服务器确认
无myisam引擎
剩下的就是验证 和 业务确认否应用正常。
总结
整个从升级准备开始 到结束,中间包含很多细致的工作。比如版本确认,功能确认,测试,准备,备份,验证,高可用切换等等。前期需要投入很多精力进行准备,这样才能做到一步到位。
升级完,下一步踏上8.0的使用旅程。
墨天轮原文链接:https://www.modb.co/db/24527(复制到浏览器中打开或者点击“阅读原文”)