使用mariabackup将MariaDB 10.3备份恢复至10.6遇错,求指导
解决方案:跨版本恢复MariaDB备份(10.3→10.6)
报错原因
你的推测方向正确,但并非要求版本完全一致——mariabackup作为物理备份工具,对跨大版本的直接恢复支持有限。10.3到10.6跨越了多个大版本,InnoDB的redo日志格式、数据页结构存在变更,高版本mariabackup无法直接处理低版本备份的redo日志,必须先在中间版本(10.4或更早)完成数据格式的升级适配。
方案一:版本逐步升级(保留物理备份效率)
如果数据库体积较大,想保留物理备份的速度优势,可按以下步骤逐步升级版本:
- 第一步:在临时环境(或PC B上临时切换版本)安装MariaDB 10.4和对应版本的
mariabackup- 用10.4版本的
mariabackup执行准备命令:mariabackup --prepare --target-dir=/my_nfs_share/ - 将准备好的备份目录作为10.4版本MariaDB的数据目录,启动服务,待完全启动后干净关闭(执行
systemctl stop mariadb,确保无异常) - 用10.4版本的
mariabackup重新备份已升级到10.4的数据目录:mariabackup --backup --target-dir=/my_nfs_share/10.4_backup/ --datadir=/var/lib/mysql/
- 用10.4版本的
- 第二步:重复上述流程,用MariaDB 10.5处理10.4的备份,完成升级后再次备份
- 第三步:用MariaDB 10.6的
mariabackup处理10.5的备份,即可正常恢复到10.6环境
方案二:改用逻辑备份(mariadb-dump,更省心)
如果数据库体积较小,优先选择逻辑备份,跨版本兼容性更好,无需折腾版本切换:
- 在PC A(MariaDB 10.3)上导出全量数据:
mariadb-dump -u root -p --all-databases --single-transaction --routines --triggers > full_db_backup.sql--single-transaction:保证备份时InnoDB表不锁表--routines/--triggers:导出存储过程、触发器等附属对象
- 将
full_db_backup.sql传输到PC B(Ubuntu 22.04 + MariaDB 10.6) - 在PC B上导入备份:
mysql -u root -p < full_db_backup.sql - 导入完成后,执行
mysql_upgrade -u root -p确保系统表适配10.6版本
选择建议
- 数据量GB级及以上:优先方案一,物理备份恢复速度更快
- 数据量较小:选方案二,操作简单,无需复杂的版本切换
内容的提问来源于stack exchange,提问作者Tanc
相关产品推荐
相关产品推荐

