本文主要介绍了MySQL 5.7.44升级到MySQL 8.0.35的详细过程,包括升级背景、环境信息、升级前的准备工作、升级过程和升级后的检查。在升级过程中,建议使用MySQL Shell进行升级前检查,确保数据安全和兼容...
MySQL 5.7.44 升级到 MySQL 8.0.35 详细文档(使用二进制方式)
1. 升级背景与环境信息
目标:将 MySQL 5.7.44 升级到 MySQL 8.0.35,确保数据安全、最小化关服务时间,使用二进制安装方式。
服务器环境:
IP 地址: 192.168.100.120
MySQL 基本路径 (basedir): /usr/local/mysql
数据路径 (datadir): /data/mysqldata
配置文件: /etc/my.cnf
操作系统: Red Hat/CentOS 7.x 系列
注意事项:
MySQL 8.0 对于权限系统、数据格式、SQL 语法等有重大变化。
mysql_upgrade 在 MySQL 8.0 中已弃用,应使用 mysqlsh 进行兼容性检查与数据升级。
2. 升级前的准备工作
安装必要的工具和依赖:
确保以下依赖已经安装:
yum install -y gcc libaio perl-Data-Dumper mysql-shell
下载 MySQL 8.0 二进制安装包:
从 MySQL 官方下载 MySQL 8.0.35 的二进制安装包:
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.35-linux-glibc2.12-x86_64.tar.xz
检查现有应用兼容性:
检查当前应用对 MySQL 8.0 的兼容性,特别是针对 SQL 语法、权限和数据存储格式的变更。
**配置 MySQL Shell (mysqlsh)**:
安装 MySQL Shell,作为升级检查工具:
yum install mysql-shell
3. 升级前的检查
3.1 使用 MySQL Shell 进行升级前检查
使用 mysqlsh 进行数据库的兼容性检查,确保数据库结构、权限等适配 MySQL 8.0。
连接到 MySQL 5.7:
mysqlsh root@localhost:3306 --mysql
运行升级检查工具:
使用 util.checkForServerUpgrade() 检查是否存在兼容性问题:
\connect root@localhost:3306
util.checkForServerUpgrade({"datadir": "/data/mysqldata", "targetVersion": "8.0.35", "configPath":"/etc/my3410.cnf"})
检查并修复兼容性问题:
解决检查中发现的兼容性问题,包括表结构、字符集、权限系统等。
3.2 检查权限系统与数据结构
检查表的引擎与字符集:
MySQL 8.0 强制使用 utf8mb4 编码,确保所有表和数据库使用正确的字符集:
SELECT table_schema, table_name, engine, table_collation
FROM information_schema.tables
WHERE engine != 'InnoDB' OR table_collation NOT LIKE 'utf8mb4%';
导出用户和权限表:
确保升级前备份用户和权限,防止权限丢失:
mysqldump -u root -p mysql > /backup/mysql_users_backup.sql
检查大小写,SQL_MODEL:
确保数据库大小写,SQL_MODE一致:
show variables like 'sql_mode';
show variables like 'lower_case_table_names';
4. 升级前的备份
4.1 使用逻辑备份(推荐)
逻辑备份是最安全的升级方式,避免物理格式的兼容性问题。使用 mysqldump 对所有数据库进行完整备份。
mysqldump -u root -p --all-databases --routines --triggers --events --single-transaction --flush-logs > /backup/full_backup.sql
备份路径:/backup/full_backup.sql
权限表备份:已包含在 --all-databases 中,但单独备份权限表可增强安全性。
4.2 验证备份文件
在备份完成后,确保备份文件无误:
less /backup/full_backup.sql
5. 升级步骤明细
5.1 停止 MySQL 5.7 服务
首先停止 MySQL 5.7 服务,确保所有数据写入已完成:
systemctl stop mysqld
5.2 备份 MySQL 安装目录和数据目录
为了确保即使升级失败,也可以完整回滚,需要备份当前的安装目录和数据目录。
mv /usr/local/mysql /usr/local/mysql_backup
cp -R /data/mysqldata /data/mysqldata_backup
5.3 解压 MySQL 8.0.35 二进制包
解压并安装新的 MySQL 8.0.35 二进制包。
tar -xvf mysql-8.0.35-linux-glibc2.12-x86_64.tar.xz
mv mysql-8.0.35-linux-glibc2.12-x86_64 /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql
5.4 保持现有的数据目录
不要对数据目录进行初始化,直接保留 MySQL 5.7 的数据文件。确保数据目录的权限正确:
chown -R mysql:mysql /data/mysqldata
5.5 启动 MySQL 8.0
启动 MySQL 8.0 服务:
systemctl start mysqld
6. 升级后的验证
6.1 验证 MySQL 版本
确保 MySQL 已成功升级到 8.0.35:
mysql --version
6.2 验证数据完整性
使用 mysqlcheck 验证数据的完整性:
mysqlcheck -u root -p --all-databases
6.3 验证权限系统
检查用户权限是否正常:
SELECT user, host FROM mysql.user;
7. 升级失败的回退方案
若升级过程中遇到无法解决的问题,或 MySQL 8.0 无法正常工作,可回滚至 MySQL 5.7。
停止 MySQL 8.0 服务:
systemctl stop mysqld
恢复 MySQL 5.7 安装目录与数据目录:
mv /usr/local/mysql /usr/local/mysql_failed
mv /usr/local/mysql_backup /usr/local/mysql
mv /data/mysqldata /data/mysqldata_failed
mv /data/mysqldata_backup /data/mysqldata
启动 MySQL 5.7:
systemctl start mysqld
验证 MySQL 5.7 数据与服务:检查是否一切恢复正常。
8. 总结
逻辑备份优先:在升级过程中始终优先使用逻辑备份,确保数据安全。
兼容性检查:通过 MySQL Shell 的 util.checkForServerUpgrade() 工具提前发现并解决兼容性问题。
无需重新初始化数据:数据目录保留现有结构,避免误操作导致数据丢失。
回滚机制:通过备份原有 MySQL 目录和数据,确保即使升级失败也能快速回滚。
此文档力求确保升级过程稳健、安全,帮助你顺利完成从 MySQL 5.7.44 到 8.0.35 的升级。
原谅来源:https://mp.weixin.qq.com/s/lxBiCPHQfaZ7pkVsCpJv4Q
来源:本文内容搜集或转自各大网络平台,并已注明来源、出处,如果转载侵犯您的版权或非授权发布,请联系小编,我们会及时审核处理。
声明:江苏教育黄页对文中观点保持中立,对所包含内容的准确性、可靠性或者完整性不提供任何明示或暗示的保证,不对文章观点负责,仅作分享之用,文章版权及插图属于原作者。
Copyright©2013-2024 JSedu114 All Rights Reserved. 江苏教育信息综合发布查询平台保留所有权利
苏公网安备32010402000125 苏ICP备14051488号-3技术支持:南京博盛蓝睿网络科技有限公司
南京思必达教育科技有限公司版权所有 百度统计