美文网首页
升级到mysql 8.0.22 遇到的坑及解决办法

升级到mysql 8.0.22 遇到的坑及解决办法

作者: akka9 | 来源:发表于2020-12-12 21:38 被阅读0次

最近我们把20个系统的mysql 5.7 升级到 8.0.20 ,后又升级到最新的 8.0.22
记录一下遇到的问题,和解决办法。

版本兼容性检查

从 mysql 官网下载 mysql shell 安装到 mysqld 服务器上,并执行如下命令

mysqlsh root@localhost -e "util.checkForServerUpgrade();"

也可以远程检查,需要把 my.cnf 拷贝到 mysqlsh 机器上, 增加参数 --config-path=/etc/mysql/my.cnf

8.0 my.cnf 不兼容的地方

8.0 sql_mode 去掉 NO_AUTO_CREATE_USER 写了这个会直接起不来
8.0 建议增加 default_authentication_plugin=mysql_native_password 以提高驱动的兼容性

驱动升级

jdbc 的 驱动,至少需要 5.1.46 版本,建议使用 5.1.48+ 或是 8.0 的驱动。版本太低的jdbc 驱动,连接时会报 query cache 不存在,连不上数据库。
临时替换驱动时,可以直接更换 jar 包 或 war 包里面的 驱动程序。最好是让开发人员升级 pom 文件或是 gradle 里面的驱动版本。
我们的经验是,5.1.47,5.1.48, 5.1.49 8.0 在不同的项目都有用,没有发现明显的bug
有的 jdbc 需要加上 useOldAliasMetadataBehavior=true&noAccessToProcedureBodies=true 等参数

升级方式1: 导出导入升级

新准备一台机器,安装 mysql 8.0.22 或更新的版本,把 旧的 my.cnf 复制进来,
sql_mode 去掉 NO_AUTO_CREATE_USER
增加配置:
default_authentication_plugin=mysql_native_password
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci

创建好本地和远程的管理员账号,先不导入旧数据,尝试启动,如果启动不成功,继续修改配置文件,直到可以正常启动为止。

启动后,导入 5.6 或 5.7 的 dump 数据,并查看导入日志有没有错误。

升级方式2: 原地升级

原地升级是在原 5.7 机器上,更新 mysql 版本,并自动将原来的数据格式升级为8.0的。
升级之前可以用 mysqlsh 命令检查不兼容的地方,再进行升级。
升级过程中,难免会碰到不兼容启动失败的情况,这时候不要慌,mysql 做了数据一致性的保障。
当 8.0 启动报错,提示 某某地方不兼容时,可以卸载 mysql 8.0,再安装 mysql 5.7,数据库会正常回滚正常启动。

相关文章

网友评论

      本文标题:升级到mysql 8.0.22 遇到的坑及解决办法

      本文链接:https://www.haomeiwen.com/subject/esuswktx.html