合 MySQL升级方法概述总结
概述
升级方法
1、从MySQL 8.0.16开始,做好备份,然后安装新软件,最后直接启动即可。
2、低于 MySQL 8.0.16
的版本,需要执行 mysql_upgrade
,以升级系统库
为什么升级MySQL
基于安全考虑
基于性能和稳定性考虑:mgr复制 ,并行复制writeset 等功能,性能提升
新的功能:Hash join ,窗口函数,DDL即时,json 支持
原始环境中版本太多,统一版本
8.0版本基本已到稳定期,可以大量投入生产环境中
升级前注意事项
注意字符集设置。为了避免新旧对象字符集不一致的情况,可以在配置文件将字符集和校验规则设置为旧版本的字符集和比较规则。
密码认证插件变更。为了避免连接问题,可以仍采用5.7的mysql_native_password认证插件。
sql_mode支持问题。8.0版本sql_mode不支持NO_AUTO_CREATE_USER,要避免配置的sql_mode中带有NO_AUTO_CREATE_USER。
是否需要手动升级系统表。在MySQL 8.0.16版本之前,需要手动的执行mysql_upgrade来完成该步骤的升级,在MySQL 8.0.16版本及之后是由mysqld来完成该步骤的升级。
高可用架构下 需要先升级从库,再逐步升级主库。
升级路径
- 仅支持 GA 版本之间的升级
- MySQL 5.7 GA 版本链接: https://dev.mysql.com/downloads/mysql/5.7.html
- MySQL 8.0 GA 版本链接:https://dev.mysql.com/downloads/mysql/8.0.html
MySQL 5.7
->MySQL 8.0
,建议升级至5.7
最新版,再升级8.0
。MySQL 5.6
->MySQL 5.7
->MySQL 8.0
,不支持跨大版本升级。MySQL 8.0.x
->MySQL 8.0.z
,支持跨小版本升级。
MySQL Shell 升级检查
可通过 MySQL Shell 工具进行版本升级检查,以验证是否满足升级条件。该工具适用于 MySQL5.7 和 MySQL 8.0 的所有 GA 版本。
官方文档链接:https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-upgrade.html
MySQL Shell 安装
MySQL Shell 下载链接:https://dev.mysql.com/downloads/shell/
- 安装 MySQL Shell
1 2 3 4 5 6 7 8 | sudo wget https://cdn.mysql.com//Downloads/MySQL-Shell/mysql-shell-8.0.30-linux-glibc2.12-x86-64bit.tar.gz sudo tar -xzvf mysql-shell-8.0.30-linux-glibc2.12-x86-64bit.tar.gz sudo mv mysql-shell-8.0.30-linux-glibc2.12-x86-64bit /usr/local/ sudo ln -s /usr/local/mysql-shell-8.0.30-linux-glibc2.12-x86-64bit /usr/local/mysql-shell sudo chown -R /usr/local/mysql-shell* cat ~/.bash_profile export PATH=$PATH:/usr/local/mysql-shell/bin |
- 运行 MySQL Shell
可直接执行 mysqlsh,进入 cli 交互模式,在执行升级检查时,指定 用户名/密码
。
1 2 3 4 5 6 7 8 9 | [mysql@localhost ~]$ mysqlsh MySQL Shell 8.0.30 Copyright (c) 2016, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type '\help' or '\?' for help; '\quit' to exit. MySQL JS > |
也可在执行 mysqlsh 时,通过参数选项-u
与-p
直接指定 用户名/密码
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | [mysql@localhost ~]$ mysqlsh -uroot -P5306 -p Please provide the password for 'root@localhost:5306': <输入 root 密码> MySQL localhost:5306 JS > \status MySQL Shell version 8.0.30 Connection Id: 10 Current schema: Current user: root@127.0.0.1 SSL: Not in use. Using delimiter: ; Server version: 5.7.22-log MySQL Community Server (GPL) Protocol version: Classic 10 Client library: 8.0.30 Connection: localhost via TCP/IP TCP port: 5306 Server characterset: utf8mb4 Schema characterset: utf8mb4 Client characterset: utf8mb4 Conn. characterset: utf8mb4 Result characterset: utf8mb4 Compression: Disabled Uptime: 11 hours 49 min 17.0000 sec Threads: 1 Questions: 371 Slow queries: 0 Opens: 616 Flush tables: 4 Open tables: 31 Queries per second avg: 0.008 |
以上信息显示,当前 MySQL 服务器版本为 MySQL 5.7.22 社区版
。
升级检查
假设数据库 192.168.3.227
版本为 5.7.22
,欲升级 8.0.30
。则可通过如下几种方式检查升级。
【注意】
通过configPath
指定配置文件my.cnf
,可以检查新、旧版本冲突的配置项。
- 以交互模式,执行升级检查。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [mysql@localhost ~]$ mysqlsh MySQL Shell 8.0.30 Copyright (c) 2016, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type '\help' or '\?' for help; '\quit' to exit. MySQL JS > # 方式1: 检查 URI root@192.168.3.227:5306 处的 MySQL 服务器以升级到 MySQL 服务器版本 8.0.30。用户密码和配置文件路径作为选项字典的一部分提供 MySQL JS > util.checkForServerUpgrade('root@192.168.3.227:5306', {"password":"root", "targetVersion":"8.0.30", "configPath":"/etc/my.cnf"}) # 方式2: 检查 URI root@192.168.3.227:5306 处的 MySQL 服务器是否升级到与当前 MySQL Shell 版本号(默认)匹配的 MySQL 服务器版本号,并返回 JSON 输出以供进一步处理: MySQL JS > util.checkForServerUpgrade('root@192.168.3.227:5306', {"password":"root", "outputFormat":"JSON", "configPath":"/etc/my.cnf"}) |
- 以命令模式,执行升级检查。
1 2 3 4 5 6 7 8 | # 方式1: 指定服务器的 my.cnf 配置文件,检查 MySQL 服务器 root@192.168.3.227:5306 是否升级到版本 8.0.30,并返回 JSON 输出: [mysql@localhost ~]$ mysqlsh -- util checkForServerUpgrade root@192.168.3.227:5306 --target-version=8.0.30 --output-format=JSON --config-path=/etc/my.cnf # 方式2:将连接信息用大括号括起来,作为 mysqlsh 的连接选项,检查 MySQL 服务器是否升级到版本 8.0.30,并返回 JSON 输出 [mysql@localhost ~]$ mysqlsh -- util check-for-server-upgrade { --user=root --host=192.168.3.227 --port=5306 } --target-version=8.0.30 --output-format=JSON --config-path=/etc/my.cnf # 方式3:使用套接字连接 MySQL 5.7 服务器,检查其是否能升级到与 MySQL Shell 匹配的 MySQL 服务器版本。 [mysql@localhost ~]$ mysqlsh --socket=/mysql/socket/mysql.sock --user=root -e "util.checkForServerUpgrade()" |