一、概述
1、运行mysql_upgrade时需要禁用GTID,因为运行mysql_upgrade会修改mysql引擎的系统表,这不是一个事务表
2、升级到5.7官方推荐的两种方法:
a)in-place upgrade:原地升级法,利用已存在的datadir目录进行升级
b)logical upgrade:逻辑升级法,利用mysqldump导出导入进行升级
3、在实际的升级过程中很少会用到上面这两种方法,特别是第一种。通常都是通过部署一个新从库来完成升级的(主库老版本,从库目标版本),这样的话只需要在切换的时候停下机就行了
4、逻辑升级的话,先导出,接着导入,最后运行mysql_upgrade完成升级。小版本升级可以不运行mysql_upgrade,在实际的生产环境中,建议不管是小版本升级还是大版本升级都运行mysql_upgrade
2、升级到5.7官方推荐的两种方法:
a)in-place upgrade:原地升级法,利用已存在的datadir目录进行升级
b)logical upgrade:逻辑升级法,利用mysqldump导出导入进行升级
3、在实际的升级过程中很少会用到上面这两种方法,特别是第一种。通常都是通过部署一个新从库来完成升级的(主库老版本,从库目标版本),这样的话只需要在切换的时候停下机就行了
4、逻辑升级的话,先导出,接着导入,最后运行mysql_upgrade完成升级。小版本升级可以不运行mysql_upgrade,在实际的生产环境中,建议不管是小版本升级还是大版本升级都运行mysql_upgrade
二、升级环境说明
mysql-5.6.19
mysql-5.7.15
mysql-5.6.19
mysql-5.7.15
安装MySQL5.7
三、停应用和MySQL5.6.19实例并备份数据库
四、修改my.cnf配置文件并启动MySQL5.7.15
修改参数
basedir = /usr/local/mysql02 #数据库安装目录指定到新版本的安装目录
datadir = /data/mysqldata/3306/data #原数据库数据目录保持原来的目录即可
#只需要修改这些,其它的一般不需修改,如果需要将日志之类的转移到新目录,则按需修改
修改参数
basedir = /usr/local/mysql02 #数据库安装目录指定到新版本的安装目录
datadir = /data/mysqldata/3306/data #原数据库数据目录保持原来的目录即可
#只需要修改这些,其它的一般不需修改,如果需要将日志之类的转移到新目录,则按需修改
五、启动MySQL5.7.15
修改脚本里面的环境变量
$mysql_db_startup.sh
修改脚本里面的环境变量
$mysql_db_startup.sh
六、升级数据库(升级数据字典)
$ /usr/local/mysql02/bin/mysql_upgrade -usystem -p123456
$ /usr/local/mysql02/bin/mysqlcheck --all-databases -usystem -p123456
$ /usr/local/mysql02/bin/mysql_upgrade -usystem -p123456
$ /usr/local/mysql02/bin/mysqlcheck --all-databases -usystem -p123456
重启MySQL5.7.15实例
$mysql_db_shutdown.sh
$mysql_db_startup.sh
$mysql_db_shutdown.sh
$mysql_db_startup.sh
确认升级是否成功
$ mysqlplus.sh
(system@localhost) [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
5 rows in set (0.00 sec)
$ mysqlplus.sh
(system@localhost) [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
5 rows in set (0.00 sec)
一直以来,MySQL版本升级依赖额外的工具 mysql_upgrade ,但是从 MySQL 8.0.16 开始,mysql_upgrade 工具将被废弃,取而代之的是MySQL 8.0 新的版本升级方式,升级功能集成到MySQL Server的进程mysqld中,不再依赖额外的外部工具。
2.使用新版本软件包启动MySQL Server,此时Server会自动升级 数据字典表。
3.运行mysql_upgrade 工具,升级系统表和用户表。
4.重启MySQL Server,接受业务流量。
这样的升级方式变更带来了哪些好处?
1.升级速度更快
2.升级过程更简单
3.升级过程更安全
4.显著减少升级步骤,更容易自动化
5.不需要重新启动MySQL Server
6.即插即用
8.0.16之前老的版本升级过程:
1.关闭MySQL Server,安装新版本二进制软件包2.使用新版本软件包启动MySQL Server,此时Server会自动升级 数据字典表。
3.运行mysql_upgrade 工具,升级系统表和用户表。
4.重启MySQL Server,接受业务流量。
![](https://img2018.cnblogs.com/i-beta/1751167/201911/1751167-20191108152828116-79384307.png)
8.0.16 版本新的升级过程:
1.关闭MySQL Server,安装新版本二进制软件包
2.使用新版本软件包启动MySQL Server,此时Server会自动检查并执行第一步升级操作,升级数据字典表。在第一步升级完成之后,Server分析系统表和用户表是否需要升级,如果指定了升级选项 upgrade (后面会详细介绍)为AUTO或者FORCE,Server将会执行第二步升级操作,对系统表和用户表进行升级,如果第二步不需要升级,Server将会跳过第二步。
相比于之前的升级方式,整个过程由2步变成了1步,不需要额外的升级工具,降低了升级耗时。
![](https://img2018.cnblogs.com/i-beta/1751167/201911/1751167-20191108153756629-1568963034.png)
新的Server选项, --upgrade
可能的取值为: NONE, AUTO, MINIMAL, FORCE,默认值为AUTO
NONE Server启动时不会执行任何的升级动作,如果发现版本不对,Server将会异常退出。这个选项只能在明确知道Server的版本与之前的版本一致时,才可以使用。
AUTO 是默认选项,Server启动时会尝试升级数据字典表和用户表。如果发现不需要升级,会自动忽略升级过程。
MINIMAL Server启动时仅仅尝试执行数据字典的升级,其他的系统表、用户表等,不会进行升级。这个选项和之前老的升级方式相同,必须再次使用mysql_upgrade 工具执行剩下的升级过程。然后需要再次重启Server。
FORCE Server启动时强制执行升级过程,不管是否已经升级过。这个行为与之前 mysql_upgrade --force 相似。
最后,如果用户对老的升级方式念念不忘,想要与之前的升级方式保持一致,只要在启动Server时,加选项 --upgrade=MINIMAL 就可以了。
https://baijiahao.baidu.com/s?id=1636203681754169101&wfr=spider&for=pc