|
| 1 | +--- |
| 2 | +title: TiDB 日志备份与 PITR 语句 |
| 3 | +summary: 介绍 TiDB 日志备份与 PITR 的 SQL 语句。 |
| 4 | +aliases: ['/zh/tidb/dev/br-log-statement/'] |
| 5 | +--- |
| 6 | + |
| 7 | +# TiDB 日志备份与 PITR |
| 8 | + |
| 9 | +本文介绍 TiDB 日志备份和 PITR (Point-in-time recovery) SQL 语句。 |
| 10 | + |
| 11 | +TiDB 日志备份与 PITR SQL 语句的大部分功能功能以及使用的参数的含义,和 BR 工具命令行基本是一致的,不同的是 SQL 语句备份恢复过程是由 TiDB 本身驱动,而非单独的 BR 工具。BR 工具的优势和警告也适用。如果你想了解如何进行日志备份与 PITR,可以参考以下教程: |
| 12 | + |
| 13 | +- [ TiDB 日志备份与 PITR 命令行手册](/br/br-pitr-manual.md) |
| 14 | +- [TiDB 日志备份与 PITR 使用指南](/br/br-pitr-guide.md) |
| 15 | +- [TiDB 集群备份与恢复实践示例](/br/backup-and-restore-use-cases.md) |
| 16 | +对于命令行已经存在功能,本文档重点是描述语法图和参数列表,对于 SQL 语句特有的功能会在本文档中做详细描述。 |
| 17 | + |
| 18 | +## 日志备份语句 |
| 19 | + |
| 20 | +执行日志备份语句需要 `BACKUP_ADMIN` 或 `SUPER` 权限。此外,执行备份的 TiDB 节点和集群中的所有 TiKV 节点都必须有对目标存储的读或写权限。 |
| 21 | + |
| 22 | +```sql |
| 23 | + BACKUP LOGS TO --start a log backup task |
| 24 | + SHOW BACKUP LOGS STATUS --get status for the log backup task\ |
| 25 | + PAUSE BACKUP LOGS --pause a log backup task |
| 26 | + RESUME BACKUP LOGS --resume a log backup task |
| 27 | + STOP BACKUP LOGS --stop a log backup task |
| 28 | + SHOW BACKUP LOGS METADATA FROM --get the metadata of log dir |
| 29 | + PURGE BACKUP JOBS FROM --purge the log data until sometime |
| 30 | +``` |
| 31 | + |
| 32 | +### 启动日志备份 |
| 33 | + |
| 34 | +等价于执行 `br log start` 命令,你可以在备份集群启动一个日志备份任务。该任务在 TiDB 集群持续地运行,及时地将 KV 变更日志保存到备份存储中。 |
| 35 | + |
| 36 | +#### 语法图 |
| 37 | + |
| 38 | +```ebnf+diagram |
| 39 | +StreamStartStmt ::= |
| 40 | + "BACKUP" "LOGS" "TO" stringLit StreamStartOption* |
| 41 | +
|
| 42 | +StreamStartOption ::= |
| 43 | + "START_TS" '='? StartTSO |
| 44 | +
|
| 45 | +StartTSO ::= |
| 46 | + LengthNum | stringLit |
| 47 | +``` |
| 48 | + |
| 49 | +#### 示例 |
| 50 | + |
| 51 | +{{< copyable "sql" >}} |
| 52 | + |
| 53 | +```sql |
| 54 | +BACKUP LOGS TO 'local:///mnt/backup/2020/07/26'; |
| 55 | +BACKUP LOGS TO 'local:///mnt/backup/2022/07/26' START_TS = '2022-07-26 21:20:00+0800'; |
| 56 | +``` |
| 57 | + |
| 58 | +### 查询日志备份任务 |
| 59 | + |
| 60 | +等价于执行 `br log status` 命令,查询日志备份任务状态。 |
| 61 | + |
| 62 | +#### 语法图 |
| 63 | + |
| 64 | +```ebnf+diagram |
| 65 | +StreamStatusStmt ::= |
| 66 | + "SHOW" "BACKUP" "LOGS" "STATUS" |
| 67 | +``` |
| 68 | + |
| 69 | +#### 示例 |
| 70 | + |
| 71 | +{{< copyable "sql" >}} |
| 72 | + |
| 73 | +```sql |
| 74 | +SHOW BACKUP LOGS STATUS; |
| 75 | +``` |
| 76 | + |
| 77 | +### 暂停日志备份任务 |
| 78 | + |
| 79 | +等价于执行 `br log pause` 命令,暂停正在运行的日志备份任务。 |
| 80 | + |
| 81 | +#### 语法图 |
| 82 | + |
| 83 | +```ebnf+diagram |
| 84 | +StreamPauseStmt ::= |
| 85 | + "PAUSE" "BACKUP" "LOGS" StreamPauseOption* |
| 86 | + |
| 87 | +StreamPauseOption ::= |
| 88 | + "GC_TTL" '='? GCTTLTSO |
| 89 | +
|
| 90 | +GCTTLTSO ::= |
| 91 | + LengthNum | stringLit |
| 92 | +``` |
| 93 | + |
| 94 | +#### 示例 |
| 95 | + |
| 96 | +{{< copyable "sql" >}} |
| 97 | + |
| 98 | +```sql |
| 99 | +PAUSE BACKUP LOGS; |
| 100 | +PAUSE BACKUP LOGS GC_TTL = '2022-08-26 21:20:00+0800'; |
| 101 | +``` |
| 102 | + |
| 103 | +### 恢复日志备份任务 |
| 104 | + |
| 105 | +等价于执行 `br log resume` 命令,恢复被暂停的日志备份任务。 |
| 106 | + |
| 107 | +#### 语法图 |
| 108 | + |
| 109 | +```ebnf+diagram |
| 110 | +StreamResumeStmt ::= |
| 111 | + "Resume" "BACKUP" "LOGS" |
| 112 | +``` |
| 113 | + |
| 114 | +#### 示例 |
| 115 | + |
| 116 | +{{< copyable "sql" >}} |
| 117 | + |
| 118 | +```sql |
| 119 | +RESUME BACKUP LOGS; |
| 120 | +``` |
| 121 | + |
| 122 | +### 停止日志备份任务 |
| 123 | + |
| 124 | +等价于执行 `br log stop` 命令,停止日志备份任务。 |
| 125 | + |
| 126 | +#### 语法图 |
| 127 | + |
| 128 | +```ebnf+diagram |
| 129 | +StreamStopStmt ::= |
| 130 | + "Stop" "BACKUP" "LOGS" |
| 131 | +``` |
| 132 | + |
| 133 | +#### 示例 |
| 134 | + |
| 135 | +{{< copyable "sql" >}} |
| 136 | + |
| 137 | +```sql |
| 138 | +STOP BACKUP LOGS; |
| 139 | +``` |
| 140 | + |
| 141 | +### 查看备份数据元信息 |
| 142 | + |
| 143 | +等价于执行 `br log metadata` 命令,查看备份存储中保存的日志备份的元信息,例如最早和最近的可恢复时间点。 |
| 144 | + |
| 145 | +#### 语法图 |
| 146 | + |
| 147 | +```ebnf+diagram |
| 148 | +StreamMetaDataStmt ::= |
| 149 | + "SHOW" "BACKUP" "LOGS" "METADATA" "FROM" stringLit |
| 150 | +``` |
| 151 | + |
| 152 | +#### 示例 |
| 153 | + |
| 154 | +{{< copyable "sql" >}} |
| 155 | + |
| 156 | +```sql |
| 157 | +SHOW BACKUP LOGS METADATA FROM 's3://backup-101/logbackup?access-key=${access-key}&secret-access-key=${secret-access-key}"'; |
| 158 | +``` |
| 159 | + |
| 160 | +### 清理日志备份数据 |
| 161 | + |
| 162 | +等价于执行 `br log truncate` 命令,从备份存储中删除过期或不再需要的备份日志数据。 |
| 163 | + |
| 164 | +#### 语法图 |
| 165 | + |
| 166 | +```ebnf+diagram |
| 167 | +StreamMetaPurgeStmt ::= |
| 168 | + "PURGE" "BACKUP" "LOGS" "METADATA" "FROM" stringLit StreamPurgeOption* |
| 169 | + |
| 170 | +StreamPurgeOption ::= |
| 171 | + "UNTIL_TS" '='? UNTILTSO |
| 172 | +
|
| 173 | +UNTILTSO ::= |
| 174 | + LengthNum | stringLit |
| 175 | +``` |
| 176 | + |
| 177 | +#### 示例 |
| 178 | + |
| 179 | +{{< copyable "sql" >}} |
| 180 | + |
| 181 | +```sql |
| 182 | +PURGE BACKUP LOGS METADATA FROM 's3://backup-101/logbackup?access-key=${access-key}&secret-access-key=${secret-access-key}"'; |
| 183 | +PURGE BACKUP LOGS METADATA FROM 's3://backup-101/logbackup?access-key=${access-key}&secret-access-key=${secret-access-key}"' UNTIL_TS = '2022-08-26 21:20:00+0800' ; |
| 184 | +``` |
| 185 | + |
| 186 | +## 恢复到指定时间点 PITR |
| 187 | + |
| 188 | +执行 PITR 语句需要 `RESTORE_ADMIN` 或 `SUPER` 权限。此外,执行恢复的 TiDB 节点和集群中的所有 TiKV 节点都必须有对目标存储的读或写权限。 |
| 189 | + |
| 190 | +```sql |
| 191 | + RESTORE POINT FROM --restore cluster to a point |
| 192 | +``` |
| 193 | + |
| 194 | +### 恢复到指定时间点 |
| 195 | + |
| 196 | +等价于执行 `br restore point` 命令,在新集群上进行 PITR,或者只恢复日志备份数据。 |
| 197 | + |
| 198 | +#### 语法图 |
| 199 | + |
| 200 | +```ebnf+diagram |
| 201 | +StreamRestorePITStmt ::= |
| 202 | + "RESTORE" "POINT" "FROM" stringLit StreamRestorePITOption* |
| 203 | +
|
| 204 | +StreamRestorePITOption ::= |
| 205 | + "START_TS" '='? StartTSO |
| 206 | +| "FULL_BACKUP_STORAGE" '='? stringLit |
| 207 | +| "START_TS" '='? StartTSO |
| 208 | +| "STORED_TS" '='? StoredTSO |
| 209 | +
|
| 210 | +StartTSO ::= |
| 211 | + LengthNum | stringLit |
| 212 | + |
| 213 | +StoredTSO ::= |
| 214 | + LengthNum | stringLit |
| 215 | +``` |
| 216 | + |
| 217 | +#### 示例 |
| 218 | + |
| 219 | +{{< copyable "sql" >}} |
| 220 | + |
| 221 | +```sql |
| 222 | +RESTORE POINT FROM 's3://backup-101/logbackup?access-key=${access-key}&secret-access-key=${secret-access-key}"' FULL-BACKUP-STORAGE = 's3://backup-101/snapshot-202205120000?access-key=${access-key}&secret-access-key=${secret-access-key}"'; |
| 223 | + |
| 224 | +``` |
| 225 | +> **注意:** |
| 226 | +> |
| 227 | +> - 不支持重复恢复某段时间区间的日志,如多次重复恢复 `[t1=10, t2=20)` 区间的日志数据,可能会造成恢复后的数据不正确。 |
| 228 | +> - 多次恢复不同时间区间的日志时,需保证恢复日志的连续性。如先后恢复 `[t1, t2)`、`[t2, t3)` 和 `[t3, t4)` 三个区间的日志可以保证正确性,而在恢复 `[t1, t2)` 后跳过 `[t2, t3)` 直接恢复 `[t3, t4)` 的区间可能导致恢复之后的数据不正确。 |
| 229 | +
|
| 230 | + |
| 231 | +## MySQL 兼容性 |
| 232 | + |
| 233 | +该语句是 TiDB 对 MySQL 语法的扩展。 |
| 234 | + |
| 235 | +## 另请参阅 |
| 236 | + |
| 237 | +* [BACKUP](/sql-statements/sql-statement-backup.md) |
| 238 | +* [SHOW BACKUPS](/sql-statements/sql-statement-show-backups.md) |
| 239 | +* [SHOW RESTORES](/sql-statements/sql-statement-show-backups.md) |
| 240 | +* [RESTORE](/sql-statements/sql-statement-restore.md) |
| 241 | +* [BR_JOB_ADMIN](/sql-statements/sql-statement-br-job-admin.md) |
| 242 | +* [SHOW_BACKUP_META](/sql-statements/show-backp-meta.md) |
0 commit comments