使用 mariadb-backup 完整备份与恢复
本文介绍 MariaDB 的完整备份和恢复,包括备份方式、mariadb-backup 的使用、备份调度以及生产环境中的恢复过程。
mariadb-backup 以前称为 mariabackup。
使用 mariadb-backup 时,可以选择完整备份或增量备份。完整备份会在一个空目录中创建整个数据库服务器的备份;增量备份则根据上一次备份之后发生的变化,更新先前的备份。本页说明如何执行完整备份。
完整的
mariadb-backup选项列表见选项说明。关于
mariadb-backup功能的详细说明,见功能概览。
备份数据库服务器
备份数据库时,需要用 --backup 选项让 mariadb-backup 执行备份,用 --target-dir 指定备份文件的存放位置。执行完整备份时,目标目录必须为空,或者尚不存在。
运行以下命令创建备份:
$ mariadb-backup --backup \
--target-dir=/var/mariadb/backup/ \
--user=mariadb-backup --password=mypassword
备份所需的时间取决于要备份的数据库或表的大小。如有需要,可以取消备份,因为备份过程不会修改数据库。
mariadb-backup 将备份文件写入目标目录。如果目标目录不存在,它会创建该目录;如果目录已存在且包含文件,它会报错并中止。
以下是一个备份目录的示例:
$ ls /var/mariadb/backup/
aria_log.0000001 mysql xtrabackup_checkpoints
aria_log_control performance_schema xtrabackup_info
backup-my.cnf test xtrabackup_logfile
ibdata1 xtrabackup_binlog_info
使用备份历史记录功能
可以通过可选的 --history 选项,把完整备份的元数据记录到数据库中。这会创建集中管理的日志,使后续增量备份能够按名称引用这份完整备份,而不用引用目录路径。
$ mariadb-backup --backup \
--target-dir=/var/mariadb/backup/ \
--user=mariadb-backup --password=mypassword \
--history=full_backup_weekly
- 权限:备份用户需要对历史记录表拥有
INSERT、CREATE和ALTER权限。MariaDB 10.11 及以上版本使用mysql.mariadb_backup_history;较旧版本使用PERCONA_SCHEMA.xtrabackup_history。 - 失败情形:如果用户没有所需权限,备份会完成文件复制过程,但在最后一步以
INSERT command denied错误失败。
为恢复准备备份
mariadb-backup 在目标目录中创建的数据文件并不是某个单一时间点上的一致状态,因为备份过程中不同数据文件在不同时间被复制。如果直接从这些文件恢复,InnoDB 会发现不一致,并通过崩溃停止来防止数据损坏。
恢复前,必须先准备备份,使数据文件达到一致状态。可以使用 --prepare 选项:
$ mariadb-backup --prepare \
--target-dir=/var/mariadb/backup/
准备备份的步骤
- 运行
mariadb-backup --backup。所用mariadb-backup版本必须兼容计划升级之前的服务器版本。例如,从 MariaDB 10.6 升级到 10.11 时,必须使用 10.6 版mariadb-backup;从 MariaDB 10.11 升级到 11.4 时,必须使用 10.11 版mariadb-backup。 - 运行
mariadb-backup --prepare,同样使用上一步说明的兼容版本。
恢复备份
备份完成并经过准备之后,可以通过 --copy-back 或 --move-back 选项恢复。--copy-back 会保留原始备份文件;--move-back 会将文件移动到 datadir,因此原始备份文件不再保留。
- 首先停止 MariaDB Server 进程。
- 确保
datadir为空。 - 使用上述选项之一运行
mariadb-backup:
$ mariadb-backup --copy-back \
--target-dir=/var/mariadb/backup/
- 必要时修正文件权限。
mariadb-backup 恢复数据库时,会保留备份中的文件和目录权限;但把文件写入磁盘时,所用身份是执行恢复的用户和组。因此,恢复后可能需要调整数据目录的所有者,使其与 MariaDB Server 所用的用户和组一致,通常二者都是 mysql。例如,可运行以下命令递归调整文件的所有者:
$ chown -R mysql:mysql /var/lib/mysql/
- 最后启动 MariaDB Server 进程。
用其他工具恢复
完整备份经过准备后,就是一个可用的 MariaDB 数据目录。因此,只要目标服务器上的 MariaDB Server 进程已经停止,技术上可以用任何文件复制工具恢复备份,例如 cp 或 rsync。以下是一种恢复方式:
$ rsync -avrP /var/mariadb/backup /var/lib/mysql/
$ chown -R mysql:mysql /var/lib/mysql/
本文译自 MariaDB 官方文档《Full Backup and Restore (mariadb-backup)》,原作者为 MariaDB 文档贡献者。原页许可声明为 CC BY-SA / Gnu FDL;中文译文沿用相同许可,保留署名及相同方式共享要求。许可资料见知识共享许可说明和 GNU 自由文档许可证。本版翻译说明文字、调整排版并将文档链接展开为完整地址;示例命令、输出、版本及权限名称保持原文。











暂无评论内容