外观
MariaDB 升级步骤
升级步骤概述
MariaDB 版本升级是一个系统的过程,需要严格按照流程执行,确保升级过程的顺利进行和数据安全。升级步骤分为三个主要阶段:
- 准备阶段:完成升级前的所有准备工作
- 执行阶段:实际执行升级操作
- 验证阶段:验证升级结果和系统稳定性
1. 准备阶段
1.1 最后一次备份
在开始升级前,执行最后一次全量备份和二进制日志备份:
bash
# 使用 xtrabackup 进行全量备份
xtrabackup --backup --target-dir=/backup/mariadb-full-$(date +%Y%m%d_%H%M%S)
# 备份当前二进制日志
mysql -u root -p -e "FLUSH LOGS;"
mysqlbinlog --read-from-remote-server --raw --stop-never --host=localhost --user=root --password=password mysql-bin.$(mysql -u root -p -e "SHOW MASTER STATUS\G" | grep File | awk '{print $2}' | sed 's/mysql-bin.//')1.2 停止应用服务
通知业务团队停止相关应用服务,避免升级过程中数据不一致:
bash
# 停止应用服务示例(根据实际情况调整)
systemctl stop app-service1.3 停止复制服务(主从架构)
如果是主从架构,需要停止从库的复制服务:
sql
-- 在所有从库上执行
STOP SLAVE;1.4 关闭 MariaDB 服务
bash
systemctl stop mariadb2. 执行阶段
2.1 升级方式选择
根据实际情况选择合适的升级方式:
方式一:包管理器升级(推荐)
适用于使用包管理器安装的 MariaDB,如 apt、yum 等。
方式二:二进制文件升级
适用于使用二进制文件手动安装的 MariaDB。
方式三:源码编译升级
适用于需要自定义编译选项的场景。
2.2 包管理器升级步骤(以 CentOS 为例)
2.2.1 配置目标版本的 YUM 源
bash
# 创建 MariaDB 10.5 YUM 源文件
cat > /etc/yum.repos.d/MariaDB-10.5.repo << EOF
[mariadb]
name = MariaDB 10.5 CentOS repository
baseurl = http://yum.mariadb.org/10.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF2.2.2 清理 YUM 缓存
bash
yum clean all
yum makecache2.2.3 执行升级
bash
yum upgrade MariaDB-server MariaDB-client -y2.3 二进制文件升级步骤
2.3.1 下载目标版本的二进制文件
bash
wget https://downloads.mariadb.org/interstitial/mariadb-10.5.22/bintar-linux-systemd-x86_64/mariadb-10.5.22-linux-systemd-x86_64.tar.gz2.3.2 解压二进制文件
bash
tar -zxvf mariadb-10.5.22-linux-systemd-x86_64.tar.gz -C /usr/local/2.3.3 更新符号链接
bash
rm -f /usr/local/mysql
ln -s /usr/local/mariadb-10.5.22-linux-systemd-x86_64 /usr/local/mysql2.3.4 复制配置文件
bash
cp /etc/my.cnf /etc/my.cnf.bak
# 如果需要,更新配置文件中的路径和参数2.4 启动 MariaDB 服务
bash
systemctl start mariadb2.5 执行 mysql_upgrade 命令
mysql_upgrade 命令用于升级系统表结构和检查数据兼容性:
bash
mysql_upgrade -u root -p输出说明
- OK:表结构已经是最新的
- note:提示信息,不需要处理
- error:错误信息,需要处理
2.6 重启 MariaDB 服务
bash
systemctl restart mariadb3. 验证阶段
3.1 基本状态验证
bash
# 检查 MariaDB 服务状态
systemctl status mariadb
# 检查 MariaDB 版本
mysql -u root -p -e "SELECT VERSION();"
# 检查系统表状态
mysql -u root -p -e "SHOW DATABASES;"
mysql -u root -p -e "USE mysql; SHOW TABLES;"3.2 数据完整性验证
bash
# 使用 mysqlcheck 检查表完整性
mysqlcheck -u root -p --check --all-databases
# 验证关键表的数据
mysql -u root -p -e "SELECT COUNT(*) FROM db_name.table_name;"3.3 主从复制验证(主从架构)
sql
-- 在主库上执行
SHOW MASTER STATUS;
-- 在从库上执行
START SLAVE;
SHOW SLAVE STATUS\G;验证 Slave_IO_Running 和 Slave_SQL_Running 都为 Yes,Seconds_Behind_Master 为 0。
3.4 应用兼容性验证
启动应用服务,验证应用与数据库的兼容性:
bash
# 启动应用服务
systemctl start app-service
# 验证应用日志
tail -f /var/log/app-service.log3.5 性能验证
执行性能测试,验证升级后系统性能:
bash
# 使用 sysbench 进行性能测试
sysbench --db-driver=mysql --mysql-host=localhost --mysql-user=root --mysql-password=password --mysql-db=test --table-size=1000000 --threads=16 --events=100000 --time=60 oltp_read_write run4. 特殊场景处理
4.1 主从架构升级
主从架构的升级顺序:
- 先升级所有从库
- 最后升级主库
- 升级完成后,重新建立复制关系
4.2 Galera Cluster 升级
Galera Cluster 的升级步骤:
- 滚动升级:逐个节点升级,避免整个集群不可用
- 节点隔离:将节点从集群中隔离
- 升级节点:执行升级操作
- 节点重新加入:将升级后的节点重新加入集群
- 验证集群状态:使用
SHOW STATUS LIKE 'wsrep%'验证集群状态
4.3 大版本升级
大版本升级(如从 10.3 升级到 10.5)的注意事项:
- 必须按照版本顺序升级,不能跳过中间版本
- 每个版本升级后都需要执行
mysql_upgrade - 详细阅读每个版本的升级说明
5. 升级后优化
5.1 更新统计信息
sql
-- 更新所有表的统计信息
ANALYZE TABLE db_name.table_name;
-- 或者使用 mysqlcheck
mysqlcheck -u root -p --analyze --all-databases5.2 优化配置参数
根据目标版本的新特性和最佳实践,优化配置参数:
ini
# 示例:启用并行复制
slave_parallel_threads = 4
slave_parallel_mode = optimistic5.3 清理备份文件
根据备份策略,清理过期的备份文件:
bash
# 删除 7 天前的备份文件
find /backup -name "mariadb-full-*" -mtime +7 -delete6. 回滚操作
如果升级过程中出现严重错误,需要执行回滚操作:
6.1 回滚条件
- 升级过程中出现不可修复的错误
- 升级后系统性能严重下降
- 应用与数据库兼容性问题无法解决
6.2 回滚步骤
停止 MariaDB 服务:
bashsystemctl stop mariadb恢复数据:
bash# 使用 xtrabackup 恢复数据 xtrabackup --prepare --target-dir=/backup/latest-full-backup xtrabackup --copy-back --target-dir=/backup/latest-full-backup chown -R mysql:mysql /var/lib/mysql恢复配置文件:
bashcp /etc/my.cnf.bak /etc/my.cnf启动 MariaDB 服务:
bashsystemctl start mariadb恢复复制关系(主从架构):
sql-- 在从库上执行 CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.xxxxxx', MASTER_LOG_POS=xxxx; START SLAVE;启动应用服务:
bashsystemctl start app-service验证回滚结果:
bashmysql -u root -p -e "SELECT VERSION();"
7. 常见问题处理
7.1 mysql_upgrade 失败
问题现象:
mysql_upgrade: Got error: 1045: Access denied for user 'root'@'localhost' (using password: YES) while connecting to the MySQL server解决方法:
- 检查用户名和密码是否正确
- 检查 root 用户的权限
- 尝试使用
--force参数强制执行
7.2 服务启动失败
问题现象:
Job for mariadb.service failed because the control process exited with error code.解决方法:
- 查看错误日志:
tail -f /var/log/mariadb/mariadb.log - 检查配置文件:
mysqld --validate-config - 检查数据目录权限:
ls -la /var/lib/mysql
7.3 复制启动失败
问题现象:
Slave_IO_Running: No
Slave_SQL_Running: Yes解决方法:
- 检查主库地址、用户名、密码是否正确
- 检查网络连接
- 检查主库二进制日志文件和位置是否正确
8. 最佳实践
- 测试环境验证:在测试环境中完整测试升级流程
- 自动化脚本:使用自动化脚本执行升级操作,减少人为错误
- 详细记录:记录升级过程中的所有操作和输出
- 逐步升级:大版本升级时,逐步升级,避免跳过中间版本
- 监控系统:升级过程中开启实时监控,及时发现问题
- 回滚准备:确保回滚方案可行,备份文件可用
9. 常见问题(FAQ)
问:升级过程中需要多长时间?
答:升级时间取决于数据库大小、服务器性能和升级方式。一般来说:
- 小数据库(< 10GB):30 分钟 - 1 小时
- 中等数据库(10GB - 100GB):1 - 3 小时
- 大数据库(> 100GB):3 小时以上
问:mysql_upgrade 命令的作用是什么?
答:mysql_upgrade 命令的主要作用是:
- 升级系统表结构到最新版本
- 检查用户表的兼容性
- 更新系统表的统计信息
- 修复可能存在的表结构问题
问:升级后需要重新编译应用程序吗?
答:一般不需要重新编译应用程序,但需要验证应用与数据库的兼容性。如果应用使用了特定版本的 MariaDB 客户端库,可能需要更新客户端库。
问:如何处理升级后出现的慢查询?
答:
- 更新统计信息:
ANALYZE TABLE table_name; - 检查执行计划:
EXPLAIN SELECT * FROM table_name WHERE condition; - 优化索引:添加或修改索引
- 调整配置参数:如 innodb_buffer_pool_size、query_cache_size 等
问:升级后需要重启应用服务吗?
答:是的,升级完成后需要重启应用服务,确保应用与新版本的数据库正常通信。
10. 总结
MariaDB 版本升级是一项复杂的系统工程,需要严格按照流程执行,确保升级过程的顺利进行和数据安全。升级步骤包括准备阶段、执行阶段和验证阶段,每个阶段都有详细的操作步骤和注意事项。
在升级过程中,需要注意:
- 充分的备份策略
- 详细的回滚方案
- 严格的验证步骤
- 及时的监控和问题处理
通过遵循最佳实践和详细的升级步骤,可以降低升级风险,减少业务中断时间,确保升级后系统的稳定运行。
