2.5. 备份 MariaDB 数据
在 Red Hat Enterprise Linux 9 中从 MariaDB 数据库备份数据主要有两种方法:
- 逻辑备份
- 物理备份
逻辑备份 由恢复数据所需的 SQL 语句组成。这种类型的备份以纯文本文件的形式导出信息和记录。
与物理备份相比,逻辑备份的主要优势在于可移植性和灵活性。数据可以在其他硬件配置上恢复,MariaDB 版本或数据库管理系统(DBMS)上恢复,这些系统无法进行物理备份。
请注意,如果 mariadb.service
正在运行,则可以执行逻辑备份。逻辑备份不包括日志和配置文件。
物理备份由保存内容的文件和目录副本组成。
与逻辑备份相比,物理备份具有以下优点:
- 输出更为紧凑。
- 备份的大小会较小。
- 备份和恢复速度更快。
- 备份包括日志和配置文件。
请注意,当 mariadb.service
没有运行或者数据库中的所有表都被锁定以防止备份期间更改时,必须执行物理备份。
您可以使用以下一种 MariaDB 备份方法,来从 MariaDB 数据库备份数据:
-
使用
mariadb-dump
的逻辑备份 -
使用
Mariabackup
工具的物理在线备份 - 文件系统备份
- 作为备份解决方案复制
2.5.1. 使用 mariadb-dump 执行逻辑备份
mariadb-dump 客户端是一种备份实用程序,可用于转储数据库或数据库集合,用于备份或传输到其他数据库服务器。mariadb-dump 的输出通常由 SQL 语句组成,用于重新创建服务器表结构、生成表的数据。mariadb-dump 也可以以其他格式生成文件,包括 XML 和分隔的文本格式,如 CSV。
要执行 mariadb-dump 备份,您可以使用以下选项之一:
- 备份一个或多个所选的数据库
- 备份所有数据库
- 从一个数据库备份表子集
流程
要转储单个数据库,请运行:
# mariadb-dump [options] --databases db_name > backup-file.sql
要一次转储多个数据库,请运行:
# mariadb-dump [options] --databases db_name1 [db_name2 ...] > backup-file.sql
要转储所有数据库,请运行:
# mariadb-dump [options] --all-databases > backup-file.sql
要将一个或多个转储的完整数据库加载回服务器,请运行:
# mariadb < backup-file.sql
要将数据库加载到远程 MariaDB 服务器,请运行:
# mariadb --host=remote_host < backup-file.sql
要从一个数据库转储表子集,请在
mariadb-dump
命令末尾添加所选表的列表:# mariadb-dump [options] db_name [tbl_name ...] > backup-file.sql
要载入从一个数据库转储的表的子集,请运行:
# mariadb db_name < backup-file.sql
注意此时,db_name 数据库必须存在。
要查看 mariadb-dump 支持的选项列表,请运行:
$ mariadb-dump --help
2.5.2. 使用 Mariabackup 工具执行物理在线备份
mariabackup 是一个基于 Percona XtraBackup 技术的工具,能够执行 InnoDB、Aria 和 MyISAM 表的物理在线备份。这个工具是由 AppStream 存储库中的 mariadb-backup
软件包提供的。
mariabackup 支持对 MariaDB 服务器的全备份功能,其中包括加密和压缩的数据。
先决条件
mariadb-backup
软件包已在系统中安装:# dnf install mariadb-backup
- 您必须为 Mariabackup 提供要在其下运行备份的用户的凭证。您可以在命令行中或通过配置文件来提供凭证。
-
Mariabackup 的用户必须具有
RELOAD
、LOCK TABLES
和REPLICATION CLIENT
特权。
要使用 Mariabackup 创建数据库备份,请使用以下流程:
流程
要在在命令行上提供凭证的同时创建备份,请运行:
$ mariabackup --backup --target-dir <backup_directory> --user <backup_user> --password <backup_passwd>
target-dir
选项定义存储备份文件的目录。如果要执行全备份,目标目录必是空或者不存在。user
和password
选项允许您配置用户名和密码。要使用配置文件中设置的凭证创建备份:
-
在
/etc/my.cnf.d/
目录中创建配置文件,例如/etc/my.cnf.d/mariabackup.cnf
。 将以下行添加到新文件的
[xtrabackup]
或[mysqld]
部分中:[xtrabackup] user=myuser password=mypassword
执行备份:
$ mariabackup --backup --target-dir <backup_directory>
-
在
2.5.3. 使用 Mariabackup 工具恢复数据
备份完成后,您可以使用 mariabackup
命令及以下一个选项来从备份中恢复数据:
-
--copy-back
允许您保存原始的备份文件。 -
--move-back
将备份文件移到数据目录中,并删除原始的备份文件。
要使用 Mariabackup 工具来恢复数据,请使用以下流程:
先决条件
验证
mariadb
服务是否没有运行:# systemctl stop mariadb.service
- 验证数据目录是否为空。
-
Mariabackup 的用户必须具有
RELOAD
、LOCK TABLES
和REPLICATION CLIENT
特权。
流程
运行
mariabackup
命令:要恢复数据并保留原始备份文件,请使用
--copy-back
选项:$ mariabackup --copy-back --target-dir=/var/mariadb/backup/
要恢复数据并删除原始备份文件,请使用
--move-back
选项:$ mariabackup --move-back --target-dir=/var/mariadb/backup/
修复文件权限。
恢复数据库时,Mariabackup 会保留备份的文件和目录特权。但是,Mariabackup 以恢复数据库的用户和组的身份将文件写入磁盘。恢复备份后,您可能需要调整数据目录的所有者,以匹配 MariaDB 服务器的用户和组,通常两者都为
mysql
。例如,要递归地将文件的所有权改为
mysql
用户和组:# chown -R mysql:mysql /var/lib/mysql/
启动
mariadb
服务:# systemctl start mariadb.service
2.5.4. 执行文件系统备份
要创建 MariaDB 数据文件的文件系统备份,请将 MariaDB 数据目录的内容复制到您的备份位置。
要同时备份当前的配置或日志文件,请使用以下流程的可选步骤:
流程
停止
mariadb
服务:# systemctl stop mariadb.service
将数据文件复制到所需位置:
# cp -r /var/lib/mysql /backup-location
(可选)将配置文件复制到所需位置:
# cp -r /etc/my.cnf /etc/my.cnf.d /backup-location/configuration
(可选)将日志文件复制到所需位置:
# cp /var/log/mariadb/* /backup-location/logs
启动
mariadb
服务:# systemctl start mariadb.service
将备份位置的备份数据加载到
/var/lib/mysql
目录时,请确保mysql:mysql
是/var/lib/mysql
中所有数据的所有者:# chown -R mysql:mysql /var/lib/mysql
2.5.5. 作为备份解决方案复制
复制是源服务器的一个替代的备份解决方案。如果源服务器复制到副本服务器,备份可以在副本上运行,而不会对源造成任何影响。当您关闭副本,并从副本备份数据时,源仍然可以运行。
复制本身并不是一个足够的备份解决方案。复制可以防止源服务器出现硬件故障,但它不能确保防止数据的丢失。建议您将对副本的任何其他备份解决方案与此方法一起使用。