共计 3347 个字符,预计需要花费 9 分钟才能阅读完成。
这篇文章主要讲解了“MySQL 5.7 怎么升级到 8.0”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“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 rarr; caching_sha2_password
2. 关键词是不是兼容
https://dev.mysql.com/doc/refman/8.0/en/keywords.html
关键词 added in 查询
3. SQL 是不是兼容
Group by 处理上的不兼容,触发器,存储过程
5.6 可以跑 select id,count(*)from group by name;
5.7,8.0 是不是允许的 sql_mode 控制
4. 数据文件存储格式是不是可以直接升级
Perconal 和 mysql 存储引擎一直,可以完全兼容
5. 现有应用的兼容性是否满足
自定义函数,一些不规范的 SQL 语句等等
6. 密码策略
What Is New in MySQL 8.0
作为 DBA 需要基本了解 8.0 的一些功能
Added in 添加功能
Features Deprecated 弃用功能
Features Removed 移除功能
升级准备事项
已经了解 8.0 的特性,应对升级需要事先进行验证和准备工作
测试库升级,应用验证
数据库升级,末知问题发生
my.cnf 配置信息调整
不兼容的操作方法,影响复制
一个平稳的过滤,列如先升级一个从库,到所有从库
最少停机时间,同样生产数据恢复到环境,进行模拟升级,评估时间
怎样进行数据验证:行数,表的数量 等等
考虑回滚方案
数据库备份
升级前检查
Mysql8.0 还是提供了很多方便,不像之前一样 5.6 升级 5.7 那样。现在可以通过 mysql shell 进行确认。
下面 2 种方式
#mysqlsh root:123456@192.168.244.130:3410 -e util.checkForServerUpgrade({targetVersion : 8.0.19 , configPath : /etc/my3410.cnf}) MySQL JS util.checkForServerUpgrade(root@192.168.244.130:3410 , { password : 123456 , targetVersion : 8.0.11 , configPath : /etc/my3410.cnf})
按照提示的要求进行更改
虽然 shell 做的很好,但还是存在一些缺陷。
比如以下内容都不会存在提示:
1. basedir,
2. sql_mode ,
3. 半同步配置,
4. 密码策略:default_authentication_plugin = mysql_native_password
开始升级
官网下载对应的 tar 包
https://downloads.mysql.com/archives/community/
下面是单机升级,高可用架构下 需要先升级从库,在逐步升级主库。
执行 mysql_upgrade 命令, 会提示如下:
#/mysql8.0.19/bin/mysql_upgrade -uroot -p123456
在 MySQL 8 中 mysql_upgrade 客户端现已弃用。升级客户端执行的操作现在由服务器完成。
要升级, 请使用较旧的数据目录启动新的 MySQL 二进制文件。自动修复用户表。升级后不需要重新启动。
所以必须在测试环境模拟准备对应 SQL 语句
正确操作如下:
1) 登录服务器进行正常关闭:innodb_fast_shutdown 是默认是 1,常常认为是安全关闭
关闭 innodb 参数确认
mysql show variables like innodb_fast_shutdown +----------------------+-------+| Variable_name | Value |+----------------------+-------+| innodb_fast_shutdown | 1 |+----------------------+-------+1 row in set (0.00 sec)
确保数据都刷到硬盘上,更改成 0
mysql set global innodb_fast_shutdown=0;Query OK, 0 rows affected (0.01 sec) mysql shutdown;Query OK, 0 rows affected (0.00 sec) * 进行备份。
2)用 mysql8.0.19 客户端直接启动
启动 mysql 服务
[root@ss30 bin]# /opt/mysql8.0.19/bin/mysqld_safe --defaults-file=/etc/my3400.cnf --user=mysql [1] 15400 [root@ss30 bin]# 2020-04-25T13:07:16.591560Z mysqld_safe Logging to /opt/data3400/logs/error.log . 2020-04-25T13:07:16.636879Z mysqld_safe Starting mysqld daemon with databases from /opt/data3400/mysql ## 打开另一个窗口查看 error 日志 [root@ss30 ~]# tail -f /opt/data3400/logs/mysql_error.log
登录服务器确认
[root@ss30 ~]# mysql -uroot -p -S /opt/data3400/mysql/mysql.sockEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 10Server version: 8.0.19 MySQL Community Server - GPLCopyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type help; or \h for help. Type \c to clear the current input statement.mysql select version();+-----------+| version() |+-----------+| 8.0.19 |+-----------+1 row in set (0.01 sec)
无 myisam 引擎
mysql SELECT table_schema,table_name,engine FROM information_schema.tables where engine!= InnoDB
剩下的就是验证 和 业务确认否应用正常。
感谢各位的阅读,以上就是“MySQL 5.7 怎么升级到 8.0”的内容了,经过本文的学习后,相信大家对 MySQL 5.7 怎么升级到 8.0 这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!