本文档风哥主要介绍MySQL 8.4的具体升级过程,包括从低版本升级到8.4的详细步骤和注意事项。风哥教程参考MySQL官方文档Upgrading MySQL等。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 MySQL升级类型
MySQL升级包括小版本升级和大版本升级。小版本升级是指在同一主版本内的升级,如从8.0.36升级到8.0.37;大版本升级是指跨主版本的升级,如从5.7升级到8.0或从8.0升级到8.4。学习交流加群风哥微信:
itpux-com
1.2 升级注意事项
在升级MySQL时,需要注意以下几点:
- 备份数据:在升级前对数据库进行完整备份
- 测试环境验证:在测试环境中进行模拟升级
- 应用兼容性:确保应用程序与新版本兼容
- 升级顺序:遵循官方推荐的升级路径
- 回滚方案:制定详细的回滚方案
1.3 升级步骤概述
MySQL升级的基本步骤包括:
- 升级前准备:检查系统环境、备份数据、测试环境验证
- 执行升级:停止服务、安装新版本、启动服务
- 升级后验证:运行mysql_upgrade、检查服务状态、测试功能
- 监控运行:监控数据库运行状态、性能指标
Part02-生产环境规划与建议
2.1 升级时间规划
选择合适的升级时间,建议在业务低峰期进行,如凌晨或周末,确保有足够的时间进行升级和回滚。
2.2 人员安排
升级过程中需要安排专业人员进行操作,包括DBA、系统管理员和应用开发人员,确保升级过程顺利进行。
2.3 回滚方案
制定详细的回滚方案,包括备份恢复、服务重启等步骤,以备升级失败时使用。
Part03-生产环境项目实施方案
3.1 升级前准备
在执行升级前,需要进行以下准备工作:
# mysql -V
mysql Ver 8.0.36 for Linux on x86_64 (MySQL Community Server – GPL)
# 检查系统环境
# cat /etc/redhat-release
Red Hat Enterprise Linux release 9.3 (Plow)
# 检查磁盘空间
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 50G 15G 32G 32% /
/dev/sdb1 200G 50G 140G 27% /mysql
# 备份数据库
# mysqldump -u root -p –all-databases –routines –triggers –events > all_databases.sql
# 备份配置文件
# cp /etc/my.cnf /etc/my.cnf.bak
# 备份数据目录
# rsync -av /mysql/data /backup/mysql_data_backup/
3.2 执行升级
执行MySQL升级的具体步骤:
# systemctl stop mysqld
# 下载MySQL 8.4安装包
# wget https://dev.mysql.com/get/mysql-8.4.0-el9-x86_64.rpm-bundle.tar
# 解压安装包
# tar -xvf mysql-8.4.0-el9-x86_64.rpm-bundle.tar
# 卸载旧版本MySQL
# yum remove mysql-community-server mysql-community-client mysql-community-common mysql-community-libs
# 安装新版本MySQL
# yum localinstall mysql-community-server-8.4.0-1.el9.x86_64.rpm
mysql-community-client-8.4.0-1.el9.x86_64.rpm mysql-community-common-8.4.0-1.el9.x86_64.rpm
mysql-community-libs-8.4.0-1.el9.x86_64.rpm
# 恢复配置文件
# cp /etc/my.cnf.bak /etc/my.cnf
# 启动MySQL服务
# systemctl start mysqld
# 检查服务状态
# systemctl status mysqld
● mysqld.service – MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2026-04-01 12:00:00 CST; 1min ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 5678 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
Main PID: 5678 (mysqld)
Status: “Server is operational”
Tasks: 38 (limit: 4915)
Memory: 1.5G
CGroup: /system.slice/mysqld.service
└─5678 /usr/sbin/mysqld
3.3 升级后验证
升级完成后,需要进行以下验证:
# mysql_upgrade -u root -p
Checking server version.
Running queries to upgrade MySQL server.
Upgrading system table data.
Checking system database.
mysql.columns_priv OK
mysql.db OK
mysql.engine_cost OK
mysql.event OK
mysql.func OK
mysql.general_log OK
mysql.gtid_executed OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.innodb_index_stats OK
mysql.innodb_table_stats OK
mysql.ndb_binlog_index OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.server_cost OK
mysql.servers OK
mysql.slave_master_info OK
mysql.slave_relay_log_info OK
mysql.slave_worker_info OK
mysql.slow_log OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
Upgrading the sys schema.
Checking databases.
fgedudb.fgedu_table OK
done
# 检查MySQL版本
# mysql -V
mysql Ver 8.4.0 for Linux on x86_64 (MySQL Community Server – GPL)
# 检查数据库连接
# mysql -u root -p -e “SELECT version();”
+———–+
| version() |
+———–+
| 8.4.0 |
+———–+
# 测试数据库功能
# mysql -u root -p -e “CREATE DATABASE test_upgrade;”
# mysql -u root -p -e “CREATE TABLE test_upgrade.test_table (id INT PRIMARY KEY, name VARCHAR(20));”
# mysql -u root -p -e “INSERT INTO test_upgrade.test_table VALUES (1, ‘test’);”
# mysql -u root -p -e “SELECT * FROM test_upgrade.test_table;”
+—-+——+
| id | name |
+—-+——+
| 1 | test |
+—-+——+
# 检查数据库状态
# mysql -u root -p -e “SHOW GLOBAL STATUS LIKE ‘uptime’;”
+—————+——-+
| Variable_name | Value |
+—————+——-+
| Uptime | 300 |
+—————+——-+
3.4 回滚操作
如果升级过程中出现问题,需要执行回滚操作:
# systemctl stop mysqld
# 卸载新版本MySQL
# yum remove mysql-community-server mysql-community-client mysql-community-common mysql-community-libs
# 安装旧版本MySQL
# yum localinstall mysql-community-server-8.0.36-1.el9.x86_64.rpm
mysql-community-client-8.0.36-1.el9.x86_64.rpm mysql-community-common-8.0.36-1.el9.x86_64.rpm
mysql-community-libs-8.0.36-1.el9.x86_64.rpm
# 恢复数据目录
# rsync -av /backup/mysql_data_backup/data /mysql/
# 恢复配置文件
# cp /etc/my.cnf.bak /etc/my.cnf
# 启动MySQL服务
# systemctl start mysqld
# 检查服务状态
# systemctl status mysqld
● mysqld.service – MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2026-04-01 13:00:00 CST; 1min ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 9012 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
Main PID: 9012 (mysqld)
Status: “Server is operational”
Tasks: 38 (limit: 4915)
Memory: 1.2G
CGroup: /system.slice/mysqld.service
└─9012 /usr/sbin/mysqld
# 验证回滚结果
# mysql -V
mysql Ver 8.0.36 for Linux on x86_64 (MySQL Community Server – GPL)
Part04-生产案例与实战讲解
4.1 从MySQL 8.0升级到8.4
以下是从MySQL 8.0升级到8.4的完整案例:
# 检查当前版本
mysql -V
# 备份数据库
mysqldump -u root -p –all-databases –routines –triggers –events > all_databases.sql
# 备份配置文件
cp /etc/my.cnf /etc/my.cnf.bak
# 2. 执行升级
# 停止服务
systemctl stop mysqld
# 下载并安装MySQL 8.4
tar -xvf mysql-8.4.0-el9-x86_64.rpm-bundle.tar
yum localinstall mysql-community-server-8.4.0-1.el9.x86_64.rpm mysql-community-client-8.4.0-1.el9.x86_64.rpm
mysql-community-common-8.4.0-1.el9.x86_64.rpm mysql-community-libs-8.4.0-1.el9.x86_64.rpm
# 启动服务
systemctl start mysqld
# 3. 升级后验证
# 运行mysql_upgrade
mysql_upgrade -u root -p
# 检查版本
mysql -V
# 测试功能
mysql -u root -p -e “SELECT version();”
mysql -u root -p -e “CREATE DATABASE test_db;”
mysql -u root -p -e “DROP DATABASE test_db;”
# 4. 监控运行
# 检查错误日志
tail -f /var/log/mysql/error.log
# 检查性能
mysql -u root -p -e “SHOW GLOBAL STATUS LIKE ‘Queries’;”
mysql -u root -p -e “SHOW GLOBAL STATUS LIKE ‘Slow_queries’;”
4.2 升级故障处理
在升级过程中可能遇到的故障及处理方法:
# 检查错误日志
# tail -f /var/log/mysql/error.log
2026-04-01T04:00:00.000000Z 0 [ERROR] [MY-010119] [Server] Aborting
2026-04-01T04:00:00.000000Z 0 [ERROR] [MY-013183] [InnoDB] Assertion failure: log0recv.cc:840:len == srv_log_buffer_size
# 处理方法:检查配置文件,确保innodb_log_buffer_size设置正确
# 故障2:mysql_upgrade失败
# 检查错误信息
# mysql_upgrade -u root -p
Error: Failed to upgrade MySQL server.
# 处理方法:检查错误日志,修复问题后重新运行mysql_upgrade
# 故障3:应用连接失败
# 检查应用错误日志
# tail -f /var/log/app/error.log
[2026-04-01 12:00:00] Error connecting to MySQL: Access denied for user ‘app’@’localhost’
# 处理方法:检查用户权限,重新创建用户并授予权限
mysql -u root -p -e “CREATE USER ‘app’@’localhost’ IDENTIFIED BY ‘password’;”
mysql -u root -p -e “GRANT ALL PRIVILEGES ON app_db.* TO ‘app’@’localhost’;”
mysql -u root -p -e “FLUSH PRIVILEGES;”
Part05-风哥经验总结与分享
5.1 升级常见问题
在MySQL升级过程中常见的问题包括:
- 服务启动失败:通常是配置文件不兼容或数据文件损坏导致
- mysql_upgrade失败:通常是系统表结构不兼容导致
- 应用连接失败:通常是用户权限或密码问题导致
- 性能下降:通常是新特性或参数默认值变化导致
5.2 最佳实践建议
1. 充分测试:在测试环境中进行充分测试,验证升级过程和结果
2. 完整备份:在升级前对数据库进行完整备份,确保数据安全
3. 选择合适的升级时间:选择业务低峰期进行升级
4. 准备回滚方案:制定详细的回滚方案,以备升级失败时使用
5. 监控升级过程:实时监控升级过程,及时发现和解决问题
6. 升级后验证:升级完成后,进行全面的功能测试和性能测试
7. 文档记录:详细记录升级过程,包括时间、步骤、问题和解决方案
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
