📣

TiDB Cloud Serverless 现已更名为
Starter
!此页面由 AI 自动翻译,英文原文请见
此处。

BACKUP

该语句用于对 TiDB 集群执行分布式备份。

BACKUP 语句使用与 BR 工具 相同的引擎,不同之处在于备份过程由 TiDB 自身驱动,而不是独立的 BR 工具。BR 的所有优势和注意事项同样适用于该语句。

执行 BACKUP 需要 BACKUP_ADMINSUPER 权限。此外,执行备份的 TiDB 节点以及集群中的所有 TiKV 节点都必须对目标路径具有读写权限。当启用 增强安全模式 时,不允许使用本地存储(以 local:// 开头的存储路径)。

BACKUP 语句会被阻塞,直到整个备份任务完成、失败或被取消。建议为执行 BACKUP 准备一个长时间保持的连接。可以使用 KILL TIDB QUERY 语句取消该任务。

同一时间只能执行一个 BACKUPRESTORE 任务。如果同一 TiDB 服务器上已经有 BACKUPRESTORE 语句在执行,新的 BACKUP 执行会等待所有前序任务完成。

BACKUP 只能用于 "tikv" 存储引擎。若在 "unistore" 引擎下使用 BACKUP 会失败。

语法

BackupStmt
BACKUPBRIETablesTOstringLitBackupOption
BRIETables
DATABASE*DBName,TABLETableNameList
BackupOption
CHECKSUM=BooleanCHECKSUM_CONCURRENCY=LengthNumCOMPRESSION_LEVEL=LengthNumCOMPRESSION_TYPE=stringLitCONCURRENCY=LengthNumIGNORE_STATS=BooleanLAST_BACKUP=BackupTSORATE_LIMIT=LengthNumMB/SECONDSEND_CREDENTIALS_TO_TIKV=BooleanSNAPSHOT=BackupTSOLengthNumTimestampUnitAGO
Boolean
NUMTRUEFALSE
BackupTSO
LengthNumstringLit

示例

备份数据库

BACKUP DATABASE `test` TO 'local:///mnt/backup/2020/04/';
+------------------------------+-----------+-----------------+---------------------+---------------------+ | Destination | Size | BackupTS | Queue Time | Execution Time | +------------------------------+-----------+-----------------+---------------------+---------------------+ | local:///mnt/backup/2020/04/ | 248665063 | 416099531454472 | 2020-04-12 23:09:48 | 2020-04-12 23:09:48 | +------------------------------+-----------+-----------------+---------------------+---------------------+ 1 row in set (58.453 sec)

在上面的示例中,test 数据库被备份到本地文件系统。数据以 SST 文件的形式分布式地保存在所有 TiDB 和 TiKV 节点的 /mnt/backup/2020/04/ 目录下。

上述结果的第一行各列含义如下:

列名说明
Destination目标 URL
Size备份归档的总大小,单位为字节
BackupTS创建备份时快照的 TSO(用于 增量备份
Queue TimeBACKUP 任务进入队列的时间戳(当前时区)
Execution TimeBACKUP 任务开始执行的时间戳(当前时区)

备份数据表

BACKUP TABLE `test`.`sbtest01` TO 'local:///mnt/backup/sbtest01/';
BACKUP TABLE sbtest02, sbtest03, sbtest04 TO 'local:///mnt/backup/sbtest/';

备份整个集群

BACKUP DATABASE * TO 'local:///mnt/backup/full/';

注意,系统表(mysql.*INFORMATION_SCHEMA.*PERFORMANCE_SCHEMA.* 等)不会被包含在备份中。

外部存储

BR 支持将数据备份到 S3 或 GCS:

BACKUP DATABASE `test` TO 's3://example-bucket-2020/backup-05/?access-key={YOUR_ACCESS_KEY}&secret-access-key={YOUR_SECRET_KEY}';

URL 语法详见 外部存储服务的 URI 格式

在云环境下,如果不希望分发凭证,可以将 SEND_CREDENTIALS_TO_TIKV 选项设置为 FALSE

BACKUP DATABASE `test` TO 's3://example-bucket-2020/backup-05/' SEND_CREDENTIALS_TO_TIKV = FALSE;

性能调优

使用 RATE_LIMIT 可以限制每个 TiKV 节点的平均上传速度,以减少网络带宽占用。

在备份完成前,BACKUP 默认会对集群中的数据进行校验(checksum),以验证数据正确性。单表校验任务的默认并发数为 4,可以通过 CHECKSUM_CONCURRENCY 参数进行调整。如果你确信无需数据校验,可以将 CHECKSUM 参数设置为 FALSE 以关闭校验。

如需指定 BR 备份表和索引时可执行的并发任务数,可使用 CONCURRENCY 参数。该参数控制 BR 内部的线程池大小,从而优化备份操作的性能和效率。

一个任务代表一个表范围或一个索引范围,具体取决于备份的 schema。对于一个带有一个索引的表,备份该表会使用两个任务。CONCURRENCY 的默认值为 4。如果需要备份大量表或索引,可以适当增大该值。

统计信息默认不会被备份。如需备份统计信息,需要将 IGNORE_STATS 参数设置为 FALSE

备份生成的 SST 文件默认使用 zstd 压缩算法。如有需要,可以通过 COMPRESSION_TYPE 参数指定其他压缩算法。支持的算法包括 lz4zstdsnappy。你还可以通过 COMPRESSION_LEVEL 参数调整压缩级别,级别数值越高,压缩比越高,但 CPU 消耗也越大。

BACKUP DATABASE `test` TO 's3://example-bucket-2020/backup-06/' RATE_LIMIT = 120 MB/SECOND CONCURRENCY = 8 CHECKSUM = FALSE;

快照

可以通过指定时间戳、TSO 或相对时间来备份历史数据。

-- relative time BACKUP DATABASE `test` TO 'local:///mnt/backup/hist01' SNAPSHOT = 36 HOUR AGO; -- timestamp (in current time zone) BACKUP DATABASE `test` TO 'local:///mnt/backup/hist02' SNAPSHOT = '2020-04-01 12:00:00'; -- timestamp oracle BACKUP DATABASE `test` TO 'local:///mnt/backup/hist03' SNAPSHOT = 415685305958400;

相对时间支持的单位有:

  • MICROSECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK

注意,按照 SQL 标准,单位始终为单数形式。

增量备份

通过指定 LAST_BACKUP 选项,仅备份上次备份到当前快照之间的变更数据。

-- timestamp (in current time zone) BACKUP DATABASE `test` TO 'local:///mnt/backup/hist02' LAST_BACKUP = '2020-04-01 12:00:00'; -- timestamp oracle BACKUP DATABASE `test` TO 'local:///mnt/backup/hist03' LAST_BACKUP = 415685305958400;

MySQL 兼容性

该语句是 TiDB 对 MySQL 语法的扩展。

参见

文档内容是否有帮助?