1. 升级前准备:备份与兼容性验证
mysqldump或mariabackup工具备份所有数据库,避免升级失败导致数据丢失。例如:mysqldump -u root -p --all-databases > full_backup.sql;对于生产环境,推荐使用mariabackup(物理备份工具)进行热备份:mariabackup --user=root --password=your_password --backup --target-dir=/backup/pre-upgrade。systemctl status mariadb检查服务状态,通过mariadb -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"(集群环境)或SHOW STATUS LIKE 'Uptime'(单机环境)确认服务稳定性。mysql_upgrade --check-upgrade检查系统表是否需要调整;测试应用程序与新版本的SQL语法、存储引擎(如旧版PBXT引擎是否已迁移)、系统变量(如innodb_buffer_pool_instances在10.5中更名为innodb_buffer_pool_chunk_size)的兼容性,避免升级后出现功能异常。2. 升级过程:包管理与配置处理
apt包管理器升级,确保软件源配置正确。首先更新包列表:sudo apt update;然后升级MariaDB到目标版本(如10.5):sudo apt install --only-upgrade mariadb-server。若需切换官方源(如从Debian自带源升级到最新版),需先添加MariaDB官方GPG密钥和仓库:wget -qO - https://packages.mariadb.org/mariadb/release/signing-key.asc | sudo apt-key add -;sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] https://packages.mariadb.org/mariadb/repo/$(lsb_release -cs)/all main';最后执行sudo apt update和sudo apt install mariadb-server。apt可能会提示配置文件冲突(如/etc/mysql/mariadb.conf.d/50-server.cnf)。建议先通过diff命令查看差异(选择D选项),保留自定义配置(如字符集、端口、缓冲池大小),避免覆盖原有优化设置。例如:sudo apt install mariadb-server -y时,若出现配置文件冲突,选择N(保留当前版本)或手动合并差异。3. 升级后验证:服务与数据一致性
sudo systemctl restart mariadb;通过systemctl status mariadb确认服务处于active (running)状态,无报错信息。SELECT VERSION();,确认版本已升级到目标版本(如10.5.12-MariaDB-1:10.5.12+maria~bookworm)。mysql_upgrade工具升级系统表(如mysql.user、mysql.db),修复潜在的表结构问题:mysql_upgrade -u root -p;对于集群环境,检查所有节点的版本一致性(mariadb -u root -p -e "SELECT VERSION()")和数据同步状态(SHOW STATUS LIKE 'wsrep_local_state_comment',预期输出Synced)。4. 常见问题处理:避免升级陷阱
unknown variable 'innodb_buffer_pool_instances'),需修改配置文件(/etc/mysql/mariadb.conf.d/50-server.cnf),将旧变量名替换为新版本对应的名称(如innodb_buffer_pool_instances→innodb_buffer_pool_chunk_size),并调整参数值以适应新版本要求。GROUP BY子句的要求更规范)。若应用程序出现语法错误,可临时放宽检查(SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';),但需长期修改应用SQL语句,确保符合新版本标准。SELECT table_name, engine FROM information_schema.tables WHERE engine = 'PBXT';找出使用PBXT的表,然后执行ALTER TABLE problematic_table ENGINE=InnoDB;迁移表引擎。