1.官方升级手册必看
1.1 理解升级过程会做什么
手册网址:https://dev.mysql.com/doc/refman/8.0/en/upgrading.html
升级mysql 系统数据库(默认的库),升级mysql 用户数据库(用户创建的库)
升级步骤分为两步:
- 数据字典升级:库中的数据字典表、performance_schema库、information_schema库和ndbinfo。
- 服务端升级:mysql库的系统表,也就是非数据字典表、sys库、用户创建的库
这就是整个MySQL版本升级的整个流程,我们对升级哪些库心里有数就行,操作的话是由MySQL升级程序来做
1.2 备份升级前的数据
使用脚本进行备份
脚本可以参考之前文章:MySQL生产环境备份脚本
1.3 升级最佳实践
确定升级的主要版本或次要版本
确定升级类型
查看支持的平台
了解 MySQL 服务器更改
运行 Upgrade Checker 并修复不兼容问题
在测试环境中运行应用程序
对应用程序和工作负载性能进行基准测试
并行运行两个 MySQL 版本
运行最终测试升级
检查 MySQL 备份
升级生产服务器
请参考官方手册:https://dev.mysql.com/doc/refman/8.0/en/upgrade-best-practices.html
2.升级方式选择
2.1 在 Unix/Linux 上升级 MySQL 二进制或基于软件包的安装
参考链接:https://dev.mysql.com/doc/refman/8.0/en/upgrade-binary-package.html
2.2 在 Windows 上升级 MySQL
参考链接:https://dev.mysql.com/doc/refman/8.0/en/windows-upgrading.html
2.3 在Docker上升级MySQL
参考链接:https://dev.mysql.com/doc/refman/8.0/en/upgrade-docker-mysql.html
3.升级前准备
本次使用的是8.0.26升级到8.0.30
3.1 确定不存在以下问题
- 必须没有使用过时的数据类型或函数的表
- 不能有孤立的.frm文件
- 触发器不能缺少或空定义器或无效的创建上下文(由SHOW Triggers或INFORMATION_SCHEMA Triggers表显示的character_set_client、collation_connection、Database Collation属性指示)。必须转储并恢复任何此类触发器以解决问题。
查询语句: mysqlcheck -u root -p --all-databases --check-upgrade
如果出现值不是ok的话,是 warning
、error
或 note
等等
-
查看具体错误:这些信息会提供关于问题的具体细节,根据
mysqlcheck
的输出,确定哪些数据库或表有问题。 -
修复数据库:对于表损坏或索引问题,可以使用
mysqlcheck
的--repair
选项来尝试修复mysqlcheck -u root -p --all-databases --repair #一定是在有备份的情况下再操作,不然可能会导致数据丢失,请谨慎!!!
3.2 不能有使用存储引擎的分区表 不支持本机分区
#查询语句
SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE ENGINE NOT IN ('innodb', 'ndbcluster')
AND CREATE_OPTIONS LIKE '%partitioned%';
结果如下,为空则没有问题,如果不是为空的话,需要进行以下操作
ALTER TABLE 表名 ENGINE = INNODB;
#先把引擎改成InnoDB
ALTER TABLE 表名 REMOVE PARTITIONING;
#把分区表设置为非分区表
3.3 外键约束名不超过64个字符
#查询语句
SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME IN
(SELECT LEFT(SUBSTR(ID,INSTR(ID,'/')+1),
INSTR(SUBSTR(ID,INSTR(ID,'/')+1),'_ibfk_')-1)
FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN
WHERE CHAR_LENGTH(SUBSTR(ID,INSTR(ID,'/')+1))>64);
结果如下,出现报错,提示我们没有任何一个表的外键约束名超过64个字符(难得这么想看到报错_)
4.开始升级
本次使用的是8.0.26版本升级到8.0.30版本,且版本8.0.26用的是二进制安装的,所以请参考链接
https://dev.mysql.com/doc/refman/8.0/en/upgrade-binary-package.html
4.1 确认innodb_fast_shutdown的值
#查询语句
show variables like '%innodb_fast_shutdown%';
结果如下,如果是2的话需要修改成1或0
#调整语句
SET GLOBAL innodb_fast_shutdown = 1; -- fast shutdown
SET GLOBAL innodb_fast_shutdown = 0; -- slow shutdown
4.2 关闭版本8.0.26的mysql服务
systemctl stop mysql
netstat -antlp|grep 3306
systemctl status mysql
4.3 安装MySQL8.0.30的tar.gz包
安装包下载地址:https://downloads.mysql.com/archives/community/
#上传压缩包并解压
1.tar -zxvf mysql-8.0.30-el7-x86_64.tar.gz
#覆盖mysql目录
cp -frp mysql-8.0.30-el7-x86_64/* /usr/local/mysql/
#如果要一直输入yes的话可以使用
yes | cp -R mysql-8.0.30-el7-x86_64/* /usr/local/mysql/
#查看版本
mysqld --version
启动mysql,查看MySQL状态
systemctl start mysql.service
systemctl status mysql.service
结果如下:
查看日志
#日志路径根据个人配置文件里的查询
cat /usr/local/mysql/data/mysql_error.log
started 这条代表开始升级 complete 代表升级完成
以上就是二进制安装包的升级方式了,rpm一样就不多阐述了,也是下载rpm包然后安装再替换就行了。