如何升级到MySQL8.0
为什么要升级到MySQL8.0
- 基于安全考虑
- 基于性能和稳定性考虑
- 新的功能
- 原始环境中版本太多,统一版本
升级检查需要做什么
- 数据字典升级
schema:mysql、 information_schema、 performance_schema、 sys
- 关键词是不是兼容
- SQL是不是兼容
Group by 处理上的不兼容
- 数据文件存储格式是不是可以直接升级
- 担心有未知问题发生
- 需要考虑回滚方案
- 兼容老的配置
- 不兼容的操作方法,影响复制(grant user)
- 希望是一个平稳的过渡,例如先升级一个从库,到所有从库
- 最少停机时间
- 使用复制升级-->跨版本复制造成复制损坏
- grant-->create user,grant / old_password
- 更改用户权限 MySQL 8.0 只支持 alter user
- flush query cache
- Set @@global.sql_log_bin
利用MySQL Shell做升级检查
./mysqlsh root@127.0.0.1:3311 -e "util.checkForServerUpgrade();"
升级到MySQL8.0的正确步骤
8.0以前正常升级步骤
- 关闭MySQL
- 备份原来MySQL的datadir
- 更改MySQL server版本
- 备份my.cnf并做兼容8.0处理
- 启动MySQL(--skip-grant-tables)
- 运行mysql_upgrade
- 重启MySQL
MySQL 8.0升级流程
- 关闭MySQL
- 备份原来MySQL的datadir
- 更改MySQL server版本
- 备份my.cnf并做兼容8.0处理
- 启动MySQL(自动升级)
新的选型 --upgrade
- --upgrade = AUTO 默认,自动升级可以处理的一切
- --upgrade = NONE 什么也不做,遇到需要升级的报错退出
启动并查看日志更新过程
[root@study01 4444]# cat /dev/null > mysql-error.log
[root@study01 4444]# cat mysql-error.log
[root@study01 4444]# tailf mysql-error.log
...
tarting upgrade of data directory.
InnoDB initialization has started.
InnoDB initialization has ended.
X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /tmp/mysqlx.sock
Finished populating Data Dictionary tables with data.
Server upgrade from '50700' to '80021' started.
Server upgrade from '50700' to '80021' completed.
MySQL 8.0升级总结
降低风险
- 做好备份
- 利用upgrade_checker做好检查
快速的升级流程
- 自动化升级
- 快速metadata升级
- 减少了步骤
8.0的升级自动化升级了help tables
因为有悔,所以披星戴月;因为有梦,所以奋不顾身! 个人博客首发:easydb.net
微信公众号:easydb
关注我,不走丢!
因为有悔,所以披星戴月;因为有梦,所以奋不顾身!
个人博客首发:easydb.net
微信公众号:easydb
关注我,不走丢!