1. 首页 > MySQL教程 > 正文

MySQL教程FG021-MySQL从 8.0升级到8.4

本文档风哥主要介绍MySQL从8.0版本升级到8.4版本的方法和注意事项,包括升级前准备、执行升级、升级后验证等内容。风哥教程参考MySQL官方文档Upgrading MySQL等。更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 升级概述

MySQL升级是指将MySQL数据库从一个版本升级到另一个版本的过程。从8.0升级到8.4是一个主版本升级,包含了许多新特性和改进。学习交流加群风哥微信: itpux-com

1.2 升级路径

MySQL 8.0到8.4的升级路径:

  • 直接升级:从MySQL 8.0.28及以上版本直接升级到8.4
  • 间接升级:从MySQL 8.0.27及以下版本先升级到8.0.28,再升级到8.4

1.3 升级注意事项

升级过程中需要注意的事项:

  • 备份数据:升级前必须备份所有数据
  • 检查兼容性:检查应用程序与新版本的兼容性
  • 测试环境:在测试环境中先进行升级测试
  • 停机时间:合理安排升级时间,减少业务影响
  • 回滚计划:制定详细的回滚计划,以应对升级失败的情况

Part02-生产环境规划与建议

2.1 升级前准备

升级前的准备工作:

  • 备份数据:使用mysqldump或物理备份工具备份所有数据库
  • 检查系统要求:确保服务器满足MySQL 8.4的系统要求
  • 检查应用程序兼容性:测试应用程序与MySQL 8.4的兼容性
  • 下载安装包:下载MySQL 8.4的安装包
  • 阅读发布说明:了解新版本的新特性和变更

2.2 风险评估

升级风险评估:

  • 数据丢失风险:升级过程中可能出现数据丢失
  • 应用程序兼容性风险:应用程序可能与新版本不兼容
  • 性能风险:新版本可能存在性能问题
  • 停机时间风险:升级过程需要停机,影响业务

2.3 回滚计划

回滚计划:

  • 备份恢复:使用备份恢复到升级前的状态
  • 版本回退:如果升级失败,回退到原来的版本
  • 测试验证:回退后验证系统是否正常运行

Part03-生产环境项目实施方案

3.1 升级前准备工作

MySQL升级前的准备工作:

# 步骤1:检查当前MySQL版本
# mysql -u root -p -e “SELECT VERSION();”
+———–+
| VERSION() |
+———–+
| 8.0.30 |
+———–+

# 步骤2:备份所有数据库
# 使用mysqldump备份
# mysqldump -u root -p –all-databases –routines –triggers –events > all_databases.sql

# 步骤3:检查系统要求
# 检查操作系统版本
# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

# 检查内存
# free -h
total used free shared buff/cache available
Mem: 16G 2.0G 12G 100M 2.0G 13G

# 检查磁盘空间
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 1.8T 500G 1.3T 28% /
/dev/sdb1 3.6T 1.2T 2.4T 34% /mysql

# 步骤4:下载MySQL 8.4安装包
# wget https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-8.4.0-el7-x86_64.tar.gz

# 步骤5:检查升级兼容性
# 运行mysqlcheck检查数据库
# mysqlcheck -u root -p –all-databases

# 步骤6:停止应用程序
# systemctl stop application

3.2 执行升级

MySQL升级的执行步骤:

# 步骤1:停止MySQL服务
# systemctl stop mysqld

# 步骤2:备份MySQL配置文件
# cp /etc/my.cnf /etc/my.cnf.bak

# 步骤3:解压MySQL 8.4安装包
# tar -xzf mysql-8.4.0-el7-x86_64.tar.gz
# mv mysql-8.4.0-el7-x86_64 /usr/local/mysql-8.4.0

# 步骤4:更新符号链接
# rm -f /usr/local/mysql
# ln -s /usr/local/mysql-8.4.0 /usr/local/mysql

# 步骤5:更新权限
# chown -R mysql:mysql /usr/local/mysql

# 步骤6:升级MySQL
# /usr/local/mysql/bin/mysqld –upgrade=FORCE –user=mysql –datadir=/mysql/data

# 步骤7:启动MySQL服务
# systemctl start mysqld

# 步骤8:检查MySQL版本
# mysql -u root -p -e “SELECT VERSION();”
+———–+
| VERSION() |
+———–+
| 8.4.0 |
+———–+

3.3 升级后验证

MySQL升级后的验证工作:

# 步骤1:检查服务状态
# systemctl status mysqld
● mysqld.service – MySQL Server
Loaded: loaded (/etc/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2026-04-01 10:00:00 CST; 1min ago
Process: 12345 ExecStart=/usr/local/mysql/bin/mysqld –daemonize –pid-file=/mysql/data/mysqld.pid (code=exited, status=0/SUCCESS)
Main PID: 12346 (mysqld)
Tasks: 38
CGroup: /system.slice/mysqld.service
└─12346 /usr/local/mysql/bin/mysqld –daemonize –pid-file=/mysql/data/mysqld.pid

# 步骤2:检查数据库状态
# mysql -u root -p -e “SHOW DATABASES;”
+——————–+
| Database |
+——————–+
| information_schema |
| fgedudb |
| mysql |
| performance_schema |
| sys |
+——————–+

# 步骤3:检查表状态
# mysqlcheck -u root -p –all-databases

# 步骤4:测试应用程序连接
# mysql -u fgedu -p -h localhost -P 3306 fgedudb
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12345
Server version: 8.4.0 MySQL Community Server – GPL

Copyright (c) 2000, 2026, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql>

# 步骤5:检查慢查询日志
# tail -n 10 /mysql/logs/slow.log

# 步骤6:检查错误日志
# tail -n 10 /mysql/logs/error.log

Part04-生产案例与实战讲解

4.1 从8.0.30升级到8.4.0实战

MySQL从8.0.30升级到8.4.0的实际案例:

# 案例:从MySQL 8.0.30升级到8.4.0

# 步骤1:升级前准备
# 检查当前版本
# mysql -u root -p -e “SELECT VERSION();”
+———–+
| VERSION() |
+———–+
| 8.0.30 |
+———–+

# 备份数据库
# mysqldump -u root -p –all-databases –routines –triggers –events > all_databases_$(date +%Y%m%d).sql

# 检查系统要求
# free -h
total used free shared buff/cache available
Mem: 32G 2.0G 28G 100M 2.0G 29G

# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 1.8T 600G 1.2T 34% /
/dev/sdb1 3.6T 1.5T 2.1T 42% /mysql

# 步骤2:执行升级
# 停止MySQL服务
# systemctl stop mysqld

# 备份配置文件
# cp /etc/my.cnf /etc/my.cnf.bak

# 下载并解压MySQL 8.4.0
# wget https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-8.4.0-el7-x86_64.tar.gz
# tar -xzf mysql-8.4.0-el7-x86_64.tar.gz
# mv mysql-8.4.0-el7-x86_64 /usr/local/mysql-8.4.0

# 更新符号链接
# rm -f /usr/local/mysql
# ln -s /usr/local/mysql-8.4.0 /usr/local/mysql

# 更新权限
# chown -R mysql:mysql /usr/local/mysql

# 升级MySQL
# /usr/local/mysql/bin/mysqld –upgrade=FORCE –user=mysql –datadir=/mysql/data

# 启动MySQL服务
# systemctl start mysqld

# 步骤3:验证升级
# 检查版本
# mysql -u root -p -e “SELECT VERSION();”
+———–+
| VERSION() |
+———–+
| 8.4.0 |
+———–+

# 检查数据库
# mysql -u root -p -e “SHOW DATABASES;”
+——————–+
| Database |
+——————–+
| information_schema |
| fgedudb |
| mysql |
| performance_schema |
| sys |
+——————–+

# 检查表状态
# mysqlcheck -u root -p –all-databases
fgedudb.fgedu_users OK
mysql.columns_priv OK
mysql.component OK
mysql.db OK
mysql.default_roles OK
mysql.engine_cost OK
mysql.func OK
mysql.general_log OK
mysql.global_grants 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.password_history OK
mysql.plugin OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.role_edges 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.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
performance_schema.accounts OK
performance_schema.events_stages_current OK
performance_schema.events_stages_history OK
performance_schema.events_stages_history_long OK
performance_schema.events_statements_current OK
performance_schema.events_statements_history OK
performance_schema.events_statements_history_long OK
performance_schema.events_transactions_current OK
performance_schema.events_transactions_history OK
performance_schema.events_transactions_history_long OK
performance_schema.events_waits_current OK
performance_schema.events_waits_history OK
performance_schema.events_waits_history_long OK
performance_schema.file_instances OK
performance_schema.file_summary_by_event_name OK
performance_schema.file_summary_by_instance OK
performance_schema.host_cache OK
performance_schema.memory_summary_by_account_by_event_name OK
performance_schema.memory_summary_by_host_by_event_name OK
performance_schema.memory_summary_by_thread_by_event_name OK
performance_schema.memory_summary_by_user_by_event_name OK
performance_schema.memory_summary_global_by_event_name OK
performance_schema.metadata_locks OK
performance_schema.objects_summary_global_by_type OK
performance_schema.processlist OK
performance_schema.replication_applier_status OK
performance_schema.replication_group_members OK
performance_schema.replication_group_member_stats OK
performance_schema.replication_group_stats OK
performance_schema.replication_master_info OK
performance_schema.replication_relay_log OK
performance_schema.replication_worker_info OK
performance_schema.rwlock_instances OK
performance_schema.session_account_connect_attrs OK
performance_schema.session_connect_attrs OK
performance_schema.session_status OK
performance_schema.session_variables OK
performance_schema.setup_actors OK
performance_schema.setup_consumers OK
performance_schema.setup_instruments OK
performance_schema.setup_objects OK
performance_schema.setup_timers OK
performance_schema.table_io_waits_summary_by_index_usage OK
performance_schema.table_io_waits_summary_by_table OK
performance_schema.table_lock_waits_summary_by_table OK
performance_schema.threads OK
performance_schema.user_variables OK
sys.sys_config OK

# 测试应用程序连接
# mysql -u fgedu -p -h localhost -P 3306 fgedudb -e “SELECT * FROM fgedu_users LIMIT 1;”
+—-+——–+————————+
| id | name | email |
+—-+——–+————————+
| 1 | 张三 | zhangsan@fgedu.net.cn |
+—-+——–+————————+

4.2 升级故障排查

MySQL升级故障排查:

# 案例1:升级后无法启动MySQL服务
# 检查错误日志
# tail -n 50 /mysql/logs/error.log
2026-04-01T10:00:00.123456Z 0 [ERROR] [MY-010119] [Server] Aborting
2026-04-01T10:00:00.123457Z 0 [System] [MY-010910] [Server] /usr/local/mysql/bin/mysqld: Shutdown complete (mysqld 8.4.0) MySQL Community Server – GPL.

# 解决方案:检查配置文件中的参数是否与新版本兼容
# vi /etc/my.cnf
# 移除或修改不兼容的参数

# 案例2:升级后应用程序连接失败
# 检查错误日志
# tail -n 10 /mysql/logs/error.log
2026-04-01T10:00:00.123456Z 12345 [Note] [MY-010918] [Server] Access denied for user ‘fgedu’@’localhost’ (using password: YES)

# 解决方案:重置用户密码
# mysql -u root -p
mysql> ALTER USER ‘fgedu’@’localhost’ IDENTIFIED BY ‘Password123!’;
mysql> FLUSH PRIVILEGES;

# 案例3:升级后表结构损坏
# 检查表状态
# mysqlcheck -u root -p fgedudb fgedu_users
fgedudb.fgedu_users error : Table is marked as crashed and should be repaired

# 解决方案:修复表
# mysql -u root -p
mysql> USE fgedudb;
mysql> REPAIR TABLE fgedu_users;
+——————–+——–+———-+———-+
| Table | Op | Msg_type | Msg_text |
+——————–+——–+———-+———-+
| fgedudb.fgedu_users | repair | status | OK |
+——————–+——–+———-+———-+

Part05-风哥经验总结与分享

5.1 常见升级问题与解决方案

MySQL升级过程中常见的问题包括:

  • 服务无法启动:检查配置文件中的参数是否与新版本兼容
  • 应用程序连接失败:重置用户密码或检查权限
  • 表结构损坏:使用REPAIR TABLE修复表
  • 性能下降:优化MySQL参数或应用程序
  • 数据丢失:使用备份恢复数据

5.2 升级最佳实践

1. 充分准备:在升级前做好充分的准备工作,包括备份数据、检查系统要求等
2. 测试环境:在测试环境中先进行升级测试,验证升级过程和结果
3. 合理安排时间:选择业务低峰期进行升级,减少业务影响
4. 制定回滚计划:制定详细的回滚计划,以应对升级失败的情况
5. 升级后验证:升级后进行全面的验证,确保系统正常运行
6. 监控性能:升级后监控系统性能,及时发现和解决性能问题
7. 更新文档:更新系统文档,记录升级过程和变更
8. 培训人员:对运维人员进行培训,了解新版本的特性和管理方法
学习交流加群风哥QQ113257174

风哥提示:在生产环境中升级MySQL时,建议先在测试环境中进行充分的测试,确保升级过程和结果符合预期。同时,要做好详细的备份和回滚计划,以应对可能出现的问题。from MySQL:www.itpux.com

更多学习教程公众号风哥教程itpux_com
GF-MySQL数据库培训文档系列

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息