1.背景介绍
当前随着Mysql版本的迭代,Mysql的性能也是越来越好且新版中又添加了新的特性,因此对于目前服务器上的低版本Mysql升级也是一件刻不容缓的事情了!
2.升级前知道的事情
-
支持从 MySQL 5.7 升级到 8.0。但是,仅在正式发布 (GA) 版本之间支持升级。对于 MySQL 8.0,需要从 MySQL 5.7 GA 版本(5.7.9 或更高版本)升级。不支持从 MySQL 5.7 的非 GA 版本升级。
-
在升级到下一个版本之前,建议升级到最新版本。例如,在升级到 MySQL 8.0 之前升级到最新的 MySQL 5.7 版本。
-
不支持跳过版本的升级。例如,不支持直接从 MySQL 5.6 升级到 8.0。
-
一旦发布系列达到正式发布 (GA) 状态,就支持在发布系列内升级(从一个 GA 版本到另一个 GA 版本)。例如,从 MySQL 8.0 升级。
x
到 8.0。y
支持。(不支持涉及处于开发状态的非 GA 版本的升级。)还支持跳过版本。例如,从 MySQL 8.0 升级。x
到 8.0。z
支持。MySQL 8.0.11 是 MySQL 8.0 版本系列中的第一个 GA 状态版本。
3.Mysql升级主要的事情
第一步:检查当前Mysql版本下的数据库是否存在问题
-->mysqlcheck -u root -p -S /data/3307/mysql.sock --all-databases --check-upgrade
第二步:不得有使用不具有本机分区支持的存储引擎的分区表。要识别此类表,请执行以下查询
SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE NOT IN ('innodb', 'ndbcluster') AND CREATE_OPTIONS LIKE '%partitioned%';
.....(省略)
具体查看官网升级前要做的检查! https://dev.mysql.com/doc/refman/8.0/en/upgrade-prerequisites.html
4.开始升级
方法1:in-place upgrade(就地升级) 5.7-->8.0
第一步:如果您通常运行配置为innodb_fast_shutdown
set to 2
(cold shutdown) 的MySQL 服务器 ,请通过执行以下任一语句将其配置为执行快速或慢速关机
SET GLOBAL innodb_fast_shutdown = 1; -- fast shutdown SET GLOBAL innodb_fast_shutdown = 0; -- slow shutdown
第二步:关闭旧的 MySQL 服务器。例如:
-->mysqladmin -u root -p shutdown
第三步:下载新版版的Mysql(比如我的:这里可以将软连接重新指到最新版本的Mysql上)
第四步:使用现有数据目录启动 MySQL 8.0 服务器。例如
-->mysqld_safe --user=mysql --datadir=/path/to/existing-datadir & ##这里的datadir数据目录是旧版本5.7的数据目录路径
第五步: MySQL 8.0服务器启动成功后,执行Mysql_upgrade执行剩下的升级任务
-->mysql_upgrade -u root -p
第六步:然后关闭并重新启动 MySQL 服务器以确保对系统表所做的任何更改生效。例如:
-->mysqladmin -u root -p shutdown
-->mysqld_safe --user=mysql --datadir=/path/to/existing-datadir &
方法2: logical upgrade(逻辑升级)
第一步:从以前的 MySQL 安装导出现有数据(备份全库):
mysqldump -u root -p --add-drop-table --routines --events --all-databases --force > data-for-upgrade.sql
第二步:关闭旧的 MySQL 服务器。例如:
-->mysqladmin -u root -p shutdown
第三步:安装 MySQL 8.0 (此处可以参考前一章Mysql的安装流程) 包括初始化,启动,安全加固等等
第四步:导入数据
-->mysql -u root -p --force < data-for-upgrade.sql
第五步:执行剩余的升级操作:在 MySQL 8.0.16 及更高版本中,关闭服务器,然后使用--upgrade=FORCE
执行剩余升级任务的选项重新启动它 :
-->mysqladmin -u root -p shutdown ##关闭数据库
-->mysqld_safe --user=mysql --datadir=/path/to/8.0-datadir --upgrade=FORCE & ##启动并强制升级数据库
第六步:在 MySQL 8.0.16 之前,执行 mysql_upgrade执行剩余的升级任务:
-->mysql_upgrade -u root -p
然后关闭并重新启动 MySQL 服务器以确保对系统表所做的任何更改生效。例如:
-->mysqladmin -u root -p shutdown
-->mysqld_safe --user=mysql --datadir=/path/to/8.0-datadir &
补充:
关于mysql_upgrade命令参数:只升级系统表,不升级数据(在姜承尧的资料中有提到过,不过官方上升级并没有具体说明)
-s, --upgrade-system-tables Only upgrade the system tables, do not try to upgrade the data.