使用Mariabackup进行MariaDB数据热备
选择正确的技术来备份数据库至关重要,因为您不想对重要的生产数据承担任何风险。此外,您希望选择一个支持您备份数据库的所有需求的备份工具。如果您想备份 MySQL 数据库,那么 Percona XtraBackup 可能是您的正确选择,因为它支持热备份和其他一些不错的备份功能。但是,如果您计划备份 MariaDB 数据库,XtraBackup 可能不是您的好选择,因为它与 MariaDB 10.3 或更高版本不兼容。在这种情况下,Mariabackup 是适合您的工具。
Mariabackup 概述
Mariabackup首先在MariaDB 10.1.23和MariaDB 10.2.7中发布。它最初是在MariaDB 10.1.26和MariaDB 10.2.10中作为GA发布的。
MariaDB 从 10.1 版开始推出新功能,例如静态数据加密和 InnoDB 页面压缩。所有现有的备份工具都不支持这些功能,因此 MariaDB 提出了一个名为 Mariabackup 的新备份解决方案。
Mariabackup 是 MariaDB 支持的开源工具,可使用 InnoDB 或 MyISAM 引擎备份 MariaDB/MySQL 数据库。Mariabackup 是从 Percona XtraBackup 2.3.8 版分叉出来的。因此,它支持Xtrabackup 的所有功能,例如热备份。最重要的是,它还支持 MariaDB 独有的所有新功能。Mariabackup 还带有 Microsoft Windows 支持,而 Percona Xtrabackup 则没有。
Mariabackup是Percona XtraBackup的分支,旨在与加密和压缩表以及其他MariaDB增强功能一起使用。有许多错误修复程序,例如MDEV-13807,并且一些不安全或多余的选项已被删除。Mariabackup是MariaDB服务器推荐的备份方法。
安装
- 在RHEL、CentOS、Fedora和其他类似的Linux发行版上,强烈建议使用yum或dnf从MariaDB的存储库中安装相关的RPM包。从RHEL 8和Fedora 22开始,YUM已经被DNF取代,DNF是YUM的下一个主要版本。但是,yum命令仍然可以在许多使用Dnf的系统上运行。例如:
sudo yum install MariaDB-backup
- 在Debian、Ubuntu和其他类似的Linux发行版上,强烈建议使用apt-get从MariaDB的存储库中安装相关的DEB包。例如:
sudo apt-get install mariadb-backup
完整备份和还原
备份过程
要备份您的数据库,您需要运行带有 --backup 选项的 Mariabackup 以指示它备份,并使用 --target-dir 选项指定备份目录的位置。在运行命令之前确保提供的目标目录是空的,并且它有足够的空间来存储备份。
mariabackup --backup --target-dir=/mnt/backup/ --user=root --password=123456
如果要创建数据库的压缩备份,可以使用 --stream 选项,如下所示。
mariabackup --backup --user=root --password=123456 --stream=xbstream | gzip > backup_2022_10_24.gz
您可以使用以下命令解压文件。
gunzip -c backup_2022_10_24.gz | mbstream -x
如果需要,您可以通过终止上述命令来取消备份过程。它不会影响您的实际数据库。
准备过程
创建数据库备份时,它不会保持一致,因为在备份过程中的不同时间复制所有数据文件。因此,您不能直接还原数据库。您必须准备数据文件以使其一致。
mariabackup --prepare --target-dir=/mnt/backup/
现在我们准备恢复我们的数据库备份。
修复过程
要从完整备份恢复我们的数据库,您可以使用 --copy-back 或 --move-back 选项之一。第一个将保留原始文件,而后一个选项将备份文件移动到数据库的数据目录。在运行以下命令之前,请确保 MariaDB 进程已停止且数据目录为空。
mariabackup --copy-back -h /var/lib/mysql --target-dir=/mnt/backup/
使用该命令,MariaDB Backup将备份从目标目录复制到数据目录,如--datadir选项所定义。在运行此命令之前,您必须停止MariaDB服务器。数据目录必须为空。如果您想要用备份覆盖数据目录,请使用--force-non-empty-directories
选项。
运行--copy-back
命令会将备份文件复制到数据目录。如果要保存备份以备以后使用,请使用此命令。如果不想保存备份以备以后使用,请使用--move-back
命令。
使用-h
或--datadir
,您可以定义源目录的路径。这是Mariabackup为其备份的数据读取的目录。它应该与MariaDB Server datadir系统变量相同。
数据恢复完成后,数据目录及其文件将归“root”所有,因为我们在备份过程中使用了该用户。您需要将其与组一起更改回 mysql 用户。
chown -R mysql:mysql /var/lib/mysql/
现在,您可以使用新数据启动 MariaDB 服务器。
增量备份和恢复
备份过程
在进行增量备份之前,您必须创建数据库的完整备份,因为您只能在完整备份之上创建增量备份。因此,首先,使用 --backup
选项运行 mariabackup 命令,如下所示:
mariabackup --backup --target-dir=/mnt/backup/ --user=root --password=123456
现在,您可以根据需要多次在此备份之上进行增量备份。
mariabackup --backup --target-dir=/mnt/increment/ --incremental-basedir=/mnt/backup/ --user=root --password=123456
此处,--target-dir 选项提供所有增量更改的位置,--incremental-basedir 提供数据库完整备份的位置。运行此命令之前,目标目录应为空或不存在。
当您想使用先前的更改再次进行增量备份时,可以按如下方式运行备份命令:
mariabackup --backup --target-dir=/mnt/incrementNew/ --incremental-basedir=/mnt/increment/ --user=root --password=123456
准备过程
在恢复当前数据库中的增量备份之前,您需要将增量备份应用到您在进行增量备份之前创建的完整备份。这可以通过使用 --prepare
和 --apply-log-only
选项来完成。运行以下命令为恢复过程准备完整备份。
mariabackup --prepare --apply-log-only --target-dir=/mnt/backup/
现在通过对增量备份应用相同的选项来准备增量备份。
mariabackup --prepare --apply-log-only --target-dir=/mnt/backup/ --incremental-dir=/mnt/increment/
现在您的完整备份与第一个增量备份同步。重复相同的步骤,将其与我们进行的第二个增量备份同步。
mariabackup --prepare --apply-log-only --target-dir=/mnt/backup/ --incremental-dir=/mnt/incrementNew/
修复过程
一旦您的完整备份与所有增量更改同步,您就可以像恢复完整备份一样恢复它。数据恢复后,不要忘记更改数据目录的权限。
mariabackup --copy-back --target-dir=/mnt/backup/
chown -R mysql:mysql /var/lib/mysql/
就是这样!这些是您可以使用 Mariabackup 工具进行完整或增量备份的基本命令。总的来说,它是一个很好的开源工具,由 MariaDB 提供,支持 MariaDB 的一些原生特性。因此,如果您想对 MariaDB 服务器进行备份,推荐的选择是 Mariabackup。
通常不支持使用与进行备份时的数据库版本不同的MariaDB版本来准备备份。例如,如果您备份MariaDB 10.4,您应该使用mariabackup版本10.4,而不是10.5。
MariaDB服务器版本通常可以与同一版本系列中的大多数其他Mariabackup版本一起备份。例如,MariaDB 10.2.21和MariaDB 10.2.22都属于MariaDB 10.2版本系列,因此MariaDB 10.2.21中的MariaDB服务器可以通过MariaDB 10.2.22中的Mariabackup进行备份,反之亦然。
然而,有时,MariaDB服务器或Mariabackup版本会包含会破坏与以前版本兼容性的错误修复。例如,对MDEV-13564的修复更改了MariaDB 10.2.19中的InnoDB重做日志格式,这破坏了与以前版本的兼容性。为了最安全起见,MariaDB服务器版本通常应该与具有相同版本号的Mariabackup版本一起备份。
使用Docker容器进行自动备份
为了方便使用已编译成Docker镜像,
使用:
docker run -it --name mariadb-backup \
--privileged \
-e USER=root \
-e PASSWORD=123456 \
-e HOST=127.0.0.1 \
-e PORT=3306 \
-e BACKUP_DIR=/mnt/backup \
-v /var/lib/mysql:/var/lib/mysql \
ponycool/mariadb-backup:latest
参数说明:
- BACKUP_DIR: 备份文件存放目录
- HOST MariaDB连接地址
- PORT 端口
- USER 用户名
- PASSWORD 密码
- BACKUP_OPTIONS MariaDB连接参数-H IP地址 -P 端口号 -u 用户名 -p 密码,和上面的连接参数二选其一
- BACKUP_SCRIPTS 自定义备份脚本
必须挂载MariaDB的数据目录
备份规则为:
- 每周三和周六凌晨三点全量备份, 其余时间每隔两小时做一次增量更新,
- 每次全量更新的时候,会把之前的全量与增量备份数据压缩后存放在BACKUP_DIR目录下,
- 保留最近10天的备份数据,也就是最多三个全备数据
支持的Tags:
- 10.4
- 10.5
- 10.6
- 10.9
自行编译请参考:mariadb-backup
Comments | NOTHING