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