如何利用MariaDB备份创建新数据库(不覆盖原有数据库)
基于mariabackup备份创建开发版数据库的实现方案
针对你的150GB+大型MariaDB数据库,要基于现有全量+增量备份创建开发版本且不覆盖生产数据,可采用以下两种可靠方案:
方案1:恢复到独立的开发数据库实例(推荐)
此方案完全隔离生产与开发环境,避免风险,适合大型库:
- 部署一个独立的MariaDB开发实例,配置参数(如
innodb_buffer_pool_size)适配大库资源需求 - 准备备份集(合并全量与增量备份):
- 先处理全量备份:
mariabackup --prepare --target-dir=/path/to/full-backup - 按备份时间顺序依次应用增量备份(每个增量都要执行一次):
mariabackup --prepare --target-dir=/path/to/full-backup --incremental-dir=/path/to/incremental-backup-1 mariabackup --prepare --target-dir=/path/to/full-backup --incremental-dir=/path/to/incremental-backup-2 - 停止开发实例服务,清空其默认数据目录,将准备好的备份文件迁移过去,调整权限:
systemctl stop mariadb rm -rf /var/lib/mariadb/* cp -r /path/to/full-backup/* /var/lib/mariadb/ chown -R mysql:mysql /var/lib/mariadb - 启动开发实例,即可得到与生产数据一致的开发库。
- 先处理全量备份:
方案2:在现有实例中创建重命名的新数据库
如果需要在同一实例内生成不同库名的开发库:
- 按方案1的步骤1-2,将全量+增量备份合并准备到临时目录(绝对不要覆盖生产数据目录)
- 启动临时单用户MariaDB实例,指向备份目录:
mysqld --datadir=/path/to/ready-backup --socket=/tmp/temp-mysql.sock --skip-networking & - 连接临时实例并导出目标库数据:
# 导出指定库(替换original_db为生产库名) mysqldump -S /tmp/temp-mysql.sock --databases original_db > original_db_dump.sql - 停止临时实例:
mysqladmin -S /tmp/temp-mysql.sock shutdown - 修改导出的SQL文件,将所有
CREATE DATABASE original_db、USE original_db替换为新库名(如dev_db) - 在现有实例中执行修改后的SQL,生成开发库:
mysql -u root -p < modified_dev_db_dump.sql
注意事项
- 150GB大库导出时,mysqldump可能耗时较长,可考虑使用
mariabackup --stream=xbstream直接流式备份临时实例,提升效率 - 操作前确保有充足磁盘空间,临时备份、导出文件均需额外存储空间
- 所有操作需避开生产业务高峰,绝对禁止直接操作生产数据目录
内容的提问来源于stack exchange,提问作者mickburkejnr
相关产品推荐
相关产品推荐

