这篇文章主要讲解了“MySQL 5.7怎么升级到8.0”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“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

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种方式

#mysqlshroot:123456@192.168.244.130:3410-e'util.checkForServerUpgrade({"targetVersion":"8.0.19","configPath":"/etc/my3410.cnf"})';MySQLJS>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>showvariableslike'innodb_fast_shutdown';+----------------------+-------+|Variable_name|Value|+----------------------+-------+|innodb_fast_shutdown|1|+----------------------+-------+1rowinset(0.00sec)

确保数据都刷到硬盘上,更改成0

mysql>setglobalinnodb_fast_shutdown=0;QueryOK,0rowsaffected(0.01sec)mysql>shutdown;QueryOK,0rowsaffected(0.00sec)*进行备份。

2)用mysql8.0.19客户端直接启动

启动mysql服务

[root@ss30bin]#/opt/mysql8.0.19/bin/mysqld_safe--defaults-file=/etc/my3400.cnf--user=mysql&[1]15400[root@ss30bin]#2020-04-25T13:07:16.591560Zmysqld_safeLoggingto'/opt/data3400/logs/error.log'.2020-04-25T13:07:16.636879Zmysqld_safeStartingmysqlddaemonwithdatabasesfrom/opt/data3400/mysql##打开另一个窗口查看error日志[root@ss30~]#tail-f/opt/data3400/logs/mysql_error.log

登录服务器确认

[root@ss30~]#mysql-uroot-p-S/opt/data3400/mysql/mysql.sockEnterpassword:WelcometotheMySQLmonitor.Commandsendwith;or\g.YourMySQLconnectionidis10Serverversion:8.0.19MySQLCommunityServer-GPLCopyright(c)2000,2020,Oracleand/oritsaffiliates.Allrightsreserved.OracleisaregisteredtrademarkofOracleCorporationand/oritsaffiliates.Othernamesmaybetrademarksoftheirrespectiveowners.Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement.mysql>selectversion();+-----------+|version()|+-----------+|8.0.19|+-----------+1rowinset(0.01sec)

无myisam引擎

mysql>SELECTtable_schema,table_name,engineFROMinformation_schema.tableswhereengine!='InnoDB';

剩下的就是验证 和 业务确认否应用正常。

感谢各位的阅读,以上就是“MySQL 5.7怎么升级到8.0”的内容了,经过本文的学习后,相信大家对MySQL 5.7怎么升级到8.0这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!