有 mysqldump 为什么还需要 MySQL Enterprise Backup

有 mysqldump 为什么还需要 MySQL Enterprise Backup

ShawnYan Lv.6

随着企业业务的不断拓展,数据库中的数据量呈爆炸式增长。对于海量数据(如TB级别的数据),传统的备份工具可能无法在合理的时间内完成备份任务。同时,业务的复杂性也意味着数据结构更加复杂多样,包括各种事务型数据、分析型数据等。在这种情况下,需要一种高效、可靠的备份解决方案来确保数据的安全性和完整性。

MySQL Enterprise Backup 8.4 是什么

MySQL Enterprise Backup 8.4 (以下简称 MEB)是一款功能强大的企业级物理热备份工具。支持在线热备份、增量备份与恢复、备份压缩与加密、灵活的备份范围配置(如表级、数据库级)、多种备份类型(包括全量、增量、差异备份)、云原生存储支持(如对接 OCI、Amazon S3 等云存储)、智能恢复(如时间点恢复、表级恢复)、并行处理以提升备份恢复速度、详尽的监控与报告功能以及良好的兼容性(优化支持 InnoDB 表及其他存储引擎表)。它能有效保障数据库在备份与恢复过程中的高效性、安全性和可靠性,满足企业对数据安全、业务连续性及合规性的严格要求。

1.png

相对于 MEB 8.0,8.4 有如下变化

由于 keyring_file 和 keyring_encrypted_file 插件已从 MySQL Enterprise Server 8.4.0 中删除,因此,当使用任何密钥环插件恢复服务器的加密 InnoDB 表的备份时,服务器现在将以 component_keyring_encrypted_file 启动,除非在恢复的服务器上执行了密钥环迁移。

MySQL Enterprise Backup 与 mysqldump 对比

我们从三个角度来剖析 MEB 比 mysqldump 的优势。

性能方面

MySQL Enterprise Backup:它是一种物理备份工具,直接备份数据库的数据文件。这种备份方式速度非常快,因为它以块为单位读取数据文件,能够快速地复制大量数据。例如,对于一个包含大量 InnoDB 表的数据库,它可以直接备份 InnoDB 的数据文件(如 ibdata1 等),而不需要逐行读取和解析数据。恢复时直接将备份的数据文件复制到数据库目录中即可。例如,在恢复一个全量备份时,它只需将备份的数据文件解压并放到合适的位置,然后进行一些必要的日志应用操作,就可以使数据库恢复正常运行。

mysqldump:它是一种逻辑备份工具,通过执行 SQL 查询语句来导出数据库的结构和数据。对于大型数据库来说,这个过程会比较耗时,因为它需要逐行读取数据,并且还会受到查询性能的限制。例如,当备份一个包含数百万行数据的表时,mysqldump 可能会花费数小时甚至数天的时间来完成备份。恢复过程需要执行大量的 SQL 插入操作来重建数据库。这在数据量较大的情况下,会因为每个插入操作都需要进行事务处理、索引维护等操作而花费很长时间。

可靠性方面

MySQL Enterprise Backup:提供了备份验证功能,可以在备份完成后自动验证备份数据的完整性和一致性。这有助于及时发现备份过程中可能出现的问题,如数据损坏、备份不完整等。在恢复时,它也能更可靠地将数据库恢复到一个一致的状态。

mysqldump:虽然可以通过重新导入备份文件来验证备份是否成功,但这并不能完全保证备份数据的一致性和完整性。在恢复时,如果备份文件存在错误或者数据不一致,可能会导致恢复失败或者数据库处于不一致的状态。

备份功能

MySQL Enterprise Backup:支持多种备份类型,包括全量备份、增量备份和差异备份。全量备份可以完整地备份数据库的所有数据文件;增量备份只备份自上次备份以来发生更改的数据部分,这对于频繁备份的场景非常有用,因为它可以减少备份所需的时间和存储空间;差异备份则备份自上一次全量备份以来所有更改的数据。MEB 提供了一些高级功能,如备份加密和压缩。加密功能可以保护备份数据的安全,防止数据泄露;压缩功能可以减少备份文件的大小,节省存储空间。此外,它还支持并行备份,可以利用多线程来提高备份性能。

mysqldump:主要进行逻辑备份,一般是全量备份数据库的结构和数据。不支持增量备份。mysqldump 虽然也可以对备份文件进行加密和压缩,但这通常需要借助外部工具(如 gpg、gzip 等)。并且它不支持并行备份,备份过程是单线程的,这在备份大型数据库时效率较低。

综上所述,MEB 的优势远超 mysqldump,如果有条件,尽量选择 MEB。

MySQL Enterprise Backup 8.4 的使用

创建备份用户

创建一个备份专用用户,如 mysqlbackup,并授予其相应的权限。

1
2
3
4
CREATE USER 'mysqlbackup'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, BACKUP_ADMIN, RELOAD, PROCESS, SUPER, REPLICATION CLIENT ON *.* TO `mysqlbackup`@`localhost`;
GRANT CREATE, INSERT, DROP, UPDATE ON mysql.backup_progress TO 'mysqlbackup'@'localhost';
GRANT CREATE, INSERT, DROP, UPDATE, SELECT, ALTER ON mysql.backup_history TO 'mysqlbackup'@'localhost';

mysqlbackup 客户端

MEB 使用 mysqlbackup 客户端进行备份和恢复数据。

查看 mysqlbackup 帮助信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bash-5.1# mysqlbackup --help | head -n 20
MySQL Enterprise Backup Ver 8.4.4-commercial for Linux on x86_64 (MySQL Enterprise - Commercial)
Copyright (c) 2003, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Usage:
mysqlbackup [STD-OPTIONS]
[CONNECTION-OPTIONS]
[SERVER-REPOSITORY-OPTIONS]
[BACKUP-REPOSITORY-OPTIONS]
[PARALLELIZATION-OPTIONS]
[ENCRYPTION-OPTIONS]
[OPTIMISTIC-BACKUP-OPTIONS]

全量备份

使用命令如下进行全量备份。

1
mysqlbackup --user=mysqlbackup --password=password --socket=/var/lib/mysql/mysql.sock --backup-image=my_full_bak.mbi --backup-dir=/tmp --show-progress --compress --with-timestamp backup-to-image

常用参数含义:

–user、–password、–socket 分别指定备份用户的用户名、密码和套接字文件路径
–backup-image 指定备份镜像文件名
–backup-dir 指定备份目录
–show-progress 显示备份进度
–compress 启用压缩
–with-timestamp 在备份文件名中包含时间戳

输出如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
MySQL Enterprise Backup  Ver 8.4.4-commercial for Linux on x86_64 (MySQL Enterprise - Commercial)
Copyright (c) 2003, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Starting with following command line ...
mysqlbackup
--user=mysqlbackup
--password=xxxxxxxx
--socket=/var/lib/mysql/mysql.sock
--backup-image=my_full_bak.mbi
--backup-dir=/tmp
--show-progress
--compress
--with-timestamp
backup-to-image

IMPORTANT: Please check that mysqlbackup run completes successfully.
At the end of a successful 'backup-to-image' run mysqlbackup
prints "mysqlbackup completed OK!".

250316 08:05:57 MAIN INFO: Establishing connection to server.
250316 08:05:57 MAIN INFO: No SSL options specified.
250316 08:05:57 MAIN INFO: MySQL server version is '8.4.4-commercial'
250316 08:05:57 MAIN INFO: MySQL server compile os version is 'Linux'
250316 08:05:57 MAIN INFO: Got some server configuration information from running server.

250316 08:05:57 MAIN INFO: Establishing connection to server for locking.
250316 08:05:57 MAIN INFO: No SSL options specified.
250316 08:05:57 MAIN INFO: Backup directory created: '/tmp/2025-03-16_08-05-57'
250316 08:05:57 MAIN INFO: MySQL server version_comment is 'MySQL Enterprise Server - Commercial'
...
250316 08:05:59 MAIN INFO: Compress Image Backup operation completed successfully.
250316 08:05:59 MAIN INFO: Image Path = /tmp/2025-03-16_08-05-57/my_full_bak.mbi
250316 08:05:59 MAIN INFO: MySQL binlog position: filename binlog.000003, position 1323.

-------------------------------------------------------------
Parameters Summary
-------------------------------------------------------------
Start LSN : 29611008
Last Checkpoint LSN : 29701923
End LSN : 29708609
-------------------------------------------------------------

mysqlbackup completed OK!

增量备份

MEB 支持基于从某个 LSN 开始备份,也可以基于上一个备份镜像做增量备份。

找到上次备份编号 END LSN 的方法:可以从备份日志中查询,或者在数据库里查看备份历史记录。

1
2
3
4
5
6
7
mysql> SELECT end_lsn FROM mysql.backup_history WHERE exit_state = 'SUCCESS';
+----------+
| end_lsn |
+----------+
| 29708609 |
+----------+
1 row in set (0.00 sec)

基于上一个备份镜像进行增量备份。

使用 --incremental-base 选项,你不必跟踪一次备份和下一次备份之间的 LSN 值。相反,你可以使用以下方法之一:

使用 --incremental-base=history:last_backup 或 history:last_full_backup,告诉 mysqlbackup 查询上一次成功的非 TTS 备份的 end_lsn 值。

1
2
3
4
mysqlbackup --user=mysqlbackup --password=password --socket=/var/lib/mysql/mysql.sock \
--incremental --incremental-base=history:last_backup \
--backup-dir=/tmp/inc1 --backup-image=incremental_image1.bi \
backup-to-image

备份输出如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
MySQL Enterprise Backup  Ver 8.4.4-commercial for Linux on x86_64 (MySQL Enterprise - Commercial)
Copyright (c) 2003, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Starting with following command line ...
mysqlbackup
--user=mysqlbackup
--password=xxxxxxxx
--socket=/var/lib/mysql/mysql.sock
--incremental
--incremental-base=history:last_backup
--backup-dir=/tmp/inc1
--backup-image=incremental_image1.bi
backup-to-image

IMPORTANT: Please check that mysqlbackup run completes successfully.
At the end of a successful 'backup-to-image' run mysqlbackup
prints "mysqlbackup completed OK!".

250316 08:17:36 MAIN INFO: Establishing connection to server.
250316 08:17:36 MAIN INFO: No SSL options specified.
250316 08:17:36 MAIN INFO: MySQL server version is '8.4.4-commercial'
250316 08:17:36 MAIN INFO: MySQL server compile os version is 'Linux'
250316 08:17:36 MAIN INFO: Got some server configuration information from running server.
...
250316 08:17:36 RDR1 INFO: Writing server defaults files 'server-my.cnf' and 'server-all.cnf' for server '8.4.4-commercial' in '/tmp/inc1'.
250316 08:17:36 RDR1 INFO: Copying meta file /tmp/inc1/meta/backup_variables.txt.
250316 08:17:36 RDR1 INFO: Copying meta file /tmp/inc1/datadir/ibbackup_logfile.
250316 08:17:36 RDR1 INFO: Copying meta file /tmp/inc1/server-all.cnf.
250316 08:17:36 RDR1 INFO: Copying meta file /tmp/inc1/server-my.cnf.
250316 08:17:36 RDR1 INFO: Copying meta file /tmp/inc1/datadir/ibbackup_ibd_files.
250316 08:17:36 RDR1 INFO: Copying meta file /tmp/inc1/meta/backup_content.xml.
250316 08:17:36 RDR1 INFO: Copying meta file /tmp/inc1/meta/image_files.xml.
250316 08:17:36 MAIN INFO: Incremental Image Backup operation completed successfully.
250316 08:17:36 MAIN INFO: Backup image created successfully.
250316 08:17:36 MAIN INFO: Image Path = /tmp/inc1/incremental_image1.bi
250316 08:17:36 MAIN INFO: Backup contains changes from lsn 29708610 to lsn 29879497.
250316 08:17:36 MAIN INFO: MySQL binlog position: filename binlog.000003, position 1925.

-------------------------------------------------------------
Parameters Summary
-------------------------------------------------------------
Start LSN : 29708610
Last Checkpoint LSN : 29878489
End LSN : 29879497
-------------------------------------------------------------

mysqlbackup completed OK!

备份完成。

总结

本节内容介绍了什么是 MySQL Enterprise Backup,及其与 mysqldump 的对比。并演示如何使用 MEB,接下来,我们还可以借助操作系统的定时系统 crontab 定时对数据库进行备份。MEB 还有很多用法,我们后面继续介绍。

Have a nice day ~

– / END / –

  • Title: 有 mysqldump 为什么还需要 MySQL Enterprise Backup
  • Author: ShawnYan
  • Created at: 2025-03-16 23:00:00
  • Updated at: 2025-03-16 23:00:00
  • Link: https://shawnyan.cn/2025/mysql/mysql-ee-mysqlbackup/
  • License: This work is licensed under CC BY-NC-SA 4.0.
 Comments