BACKUP

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

    BACKUP 语句使用的引擎与 相同,但备份过程是由 TiDB 本身驱动,而非单独的 BR 工具。BR 工具的优势和警告也适用于 BACKUP 语句。

    执行 BACKUP 需要 SUPER 权限。此外,执行备份的 TiDB 节点和集群中的所有 TiKV 节点都必须有对目标存储的读或写权限。

    BACKUP 语句开始执行后将会加锁,直到整个备份任务完成、失败或取消。因此,执行 BACKUP 时需要准备一个持久的连接。如需取消任务,可执行 KILL TIDB QUERY 语句。

    一次只能执行一个 BACKUP 和 任务。如果 TiDB server 上已经在执行一个 BACKUPRESTORE 语句,新的 BACKUP 将等待前面所有的任务完成后再执行。

    1. BACKUP DATABASE `test` TO 'local:///mnt/backup/2020/04/';
    1. +------------------------------+-----------+-----------------+---------------------+---------------------+
    2. +------------------------------+-----------+-----------------+---------------------+---------------------+
    3. | local:///mnt/backup/2020/04/ | 248665063 | 416099531454472 | 2020-04-12 23:09:48 | 2020-04-12 23:09:48 |
    4. 1 row in set (58.453 sec)

    输出结果的第一行描述如下:

    备份表

    1. BACKUP TABLE sbtest02, sbtest03, sbtest04 TO 'local:///mnt/backup/sbtest/';
    1. BACKUP DATABASE * TO 'local:///mnt/backup/full/';

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

    外部存储

    BR 支持备份数据到 Amazon S3 或 Google Cloud Storage (GCS):

    有关详细的 URL 语法,见 外部存储

    当运行在云环境中时,不能分发凭证,可设置 SEND_CREDENTIALS_TO_TIKV 选项为 FALSE

    1. SEND_CREDENTIALS_TO_TIKV = FALSE;

    默认情况下,每个 TiKV 节点上运行 4 个备份线程。可以通过 CONCURRENCY 选项来调整这个值。

    在备份完成之前,BACKUP 将对集群上的数据进行校验,以验证数据的正确性。如果你确信无需进行校验,可以通过 CHECKSUM 选项禁用这一步骤。

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

    快照

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

    对于相对时间,支持以下时间单位:

    • MICROSECOND(微秒)
    • MINUTE(分钟)
    • HOUR(小时)
    • DAY(天)
    • WEEK(周)

    注意,相对时间的单位遵循 SQL 标准,永远使用单数。

    1. -- 时间戳(当前时区)
    2. BACKUP DATABASE `test` TO 'local:///mnt/backup/hist02'
    3. LAST_BACKUP = '2020-04-01 12:00:00';
    4. -- TSO
    5. BACKUP DATABASE `test` TO 'local:///mnt/backup/hist03'
    6. LAST_BACKUP = 415685305958400;

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