点击关注上方“SQL数据库开发”,
设为“置顶或星标”,第一时间送达干货 SQL专栏 SQL基础知识第二版
SQL高级知识第二版复制
导读:每个 DBA 在工作中都会面临数据库升级的问题,本文详细介绍MySQL 从 5.7 升级到 8.0 的过程,希望可以帮助到大家。
基于安全考虑 基于性能和 稳定性考虑:mgr复制 ,并行复制writeset 等功能,性能提升 新的功能:Hash join ,窗口函数,DDL即时,json 支持 原始环境中版本太多,统一版本 8.0版本基本已到稳定期,可以大量投入生产环境中
数据库字典升级schema,mysql,information_schema,performance_schema,sys比如:密码测试 mysql_native_password → caching_sha2_password 关键词是不是兼容https://dev.mysql.com/doc/refman/8.0/en/keywords.html关键词 added in查询 SQL是不是兼容Group by处理上的不兼容,触发器,存储过程5.6 可以跑select id,count(*)from group by name;5.7,8.0是不是允许的 sql_mode控制 数据文件存储格式是不是可以直接升级Perconal 和 mysql 存储引擎一直,可以完全兼容 现有应用的兼容性是否满足自定义函数,一些不规范的SQL语句等等 密码策略
Added in 添加功能 Features Deprecated 弃用功能 Features Removed 移除功能



测试库升级,应用验证 数据库升级,末知问题发生 my.cnf配置信息调整 不兼容的操作方法,影响复制 一个平稳的过滤,列如先升级一个从库,到所有从库 最少停机时间,同样生产数据恢复到环境,进行模拟升级,评估时间 怎样进行数据验证:行数,表的数量 等等 考虑回滚方案 数据库备份
复制
#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)*进行备份。
复制
[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.sockEnterpassword: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,engineFROM information_schema.tableswhere engine!='InnoDB';
复制

最后给大家分享我写的SQL两件套:《SQL基础知识第二版》和《SQL高级知识第二版》的PDF电子版。里面有各个语法的解释、大量的实例讲解和批注等等,非常通俗易懂,方便大家跟着一起来实操。 有需要的读者可以下载学习,在下面的公众号「数据前线」(非本号)后台回复关键字:SQL,就行 数据前线 后台回复关键字:1024,获取一份精心整理的技术干货 后台回复关键字:进群,带你进入高手如云的交流群。 推荐阅读
你有一份经典SQL语句大全,请注意查收!!! 知乎:计算机专业还有前景吗? 不懂就问:SQL 语句中 where 条件后 写上1=1 是什么意思 一个月薪 12000 的北京程序员的真实生活 ! 985高校的学生“夫妻宿舍”令人羡慕
复制
文章转载自SQL数据库开发,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。