十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章主要讲解了“MySQL 5.7怎么升级到8.0”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL 5.7怎么升级到8.0”吧!
创新互联基于分布式IDC数据中心构建的平台为众多户提供雅安移动机房 四川大带宽租用 成都机柜租用 成都服务器租用。
为什么升级到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种方式
#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这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!