Skip to content

Commit aa9d346

Browse files
author
yikeke
committed
manually cp from pingcap#3151
1 parent 4c1b44d commit aa9d346

File tree

3 files changed

+118
-1
lines changed

3 files changed

+118
-1
lines changed

TOC.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
- [Ansible 常见运维操作](/maintain-tidb-using-ansible.md)
5959
+ 备份与恢复
6060
- [使用 Mydumper/TiDB Lightning 进行备份与恢复](/backup-and-restore-using-mydumper-lightning.md)
61+
- [使用 Dumpling 导出或备份 TiDB 数据](/export-or-backup-using-dumpling.md)
6162
- [使用 BR 进行备份与恢复](/br/backup-and-restore-tool.md)
6263
- [BR 备份与恢复场景示例](/br/backup-and-restore-use-cases.md)
6364
+ 定位异常查询

mydumper-overview.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ aliases: ['/docs-cn/v3.1/reference/tools/mydumper/']
99

1010
## Mydumper 简介
1111

12-
[Mydumper](https://github.com/pingcap/mydumper) 是一个 fork 项目,针对 TiDB 的特性进行了优化,推荐使用此工具对 TiDB 进行逻辑备份
12+
[Mydumper](https://github.com/pingcap/mydumper) 是一个 fork 项目,针对 TiDB 的特性进行了优化,使用此工具可以完成对 TiDB 的逻辑备份
1313

1414
Mydumper 包含在 tidb-enterprise-tools 安装包中,可[在此下载](/download-ecosystem-tools.md)
1515

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
---
2+
title: 使用 Dumpling 导出或备份 TiDB 数据
3+
summary: 使用新的导出工具 Dumpling 导出或者备份数据。
4+
category: how-to
5+
---
6+
7+
# 使用 Dumpling 导出或备份 TiDB 数据
8+
9+
本文档介绍如何使用数据导出工具 [Dumpling](https://github.com/pingcap/dumpling)。该工具可以把存储在 TiDB 中的数据导出为 SQL 或者 CSV 格式,可以用于完成逻辑上的全量备份或者导出。
10+
11+
如果需要直接备份 SST 文件(KV 对)或者对延迟不敏感的增量备份,请参阅 [BR](/br/backup-and-restore-tool.md)。如果需要实时的增量备份,请参阅 [TiCDC](/ticdc/ticdc-overview.md)
12+
13+
使用 Dumpling 时,需要在已经启动的集群上执行导出命令。本文假设在 `127.0.0.1:4000` 有一个 TiDB 实例,并且这个 TiDB 实例中有无密码的 root 用户。
14+
15+
## 从 TiDB 导出数据
16+
17+
使用如下命令导出数据:
18+
19+
{{< copyable "shell-regular" >}}
20+
21+
```shell
22+
dumpling \
23+
-u root \
24+
-P 4000 \
25+
-H 127.0.0.1 \
26+
--filetype sql \
27+
--threads 32 \
28+
-o /tmp/test \
29+
-F $(( 1024 * 1024 * 256 ))
30+
```
31+
32+
上述命令中,`-H``-P``-u` 分别是地址,端口,用户。如果需要密码验证,可以用 `-p $YOUR_SECRET_PASSWORD` 传给 Dumpling。
33+
34+
默认情况下,除了系统数据库中的表之外,Dumpling 会导出整个数据库的表。你可以使用 `--where <SQL where expression>` 来选定要导出的记录。假如导出数据的格式是 CSV(使用 `--filetype csv` 即可导出 CSV 文件),还可以使用 `--sql <SQL>` 导出指定 SQL 选择出来的记录,例如,导出 `test.sbtest1` 中所有 `id < 100` 的记录:
35+
36+
{{< copyable "shell-regular" >}}
37+
38+
```shell
39+
./dumpling \
40+
-u root \
41+
-P 4000 \
42+
-H 127.0.0.1 \
43+
-o /tmp/test \
44+
--filetype csv \
45+
--sql "select * from `test`.`sbtest1` where id < 100"
46+
```
47+
48+
注意,`--sql` 选项暂时仅仅可用于导出 csv 的场景。但是仍旧可以用 `--where` 来过滤要导出的行,使用以下指令,可以导出所有 `id < 100` 的记录:
49+
50+
> **注意:**
51+
>
52+
> 这里需要在要导出的所有表上执行 `select * from <table-name> where id < 100` 语句。如果部分表没有指定的字段,那么导出会失败。
53+
54+
{{< copyable "shell-regular" >}}
55+
56+
```shell
57+
./dumpling \
58+
-u root \
59+
-P 4000 \
60+
-H 127.0.0.1 \
61+
-o /tmp/test \
62+
--where "id < 100"
63+
```
64+
65+
> **注意:**
66+
>
67+
> 目前 Dumpling 不支持仅导出用户指定的某几张表(即 `-T` 标志,见[这个 issue](https://github.com/pingcap/dumpling/issues/76))。如果你确实需要这些功能,可以先使用 [MyDumper](/backup-and-restore-using-mydumper-lightning.md)
68+
69+
默认情况下,导出的文件会存储到 `./export-<current local time>` 目录下。常用参数如下:
70+
71+
- `-o` 用于选择存储导出文件的目录。
72+
- `-F` 选项用于指定单个文件的最大大小(和 MyDumper 不同,这里的单位是字节)。
73+
- `-r` 选项用于指定单个文件的最大记录数(或者说,数据库中的行数)。
74+
75+
利用以上参数可以让 Dumpling 的并行度更高。
76+
77+
还有一个尚未在上面展示出来的标志是 `--consistency <consistency level>`,这个标志控制导出数据“一致性保证”的方式。对于 TiDB 来说,默认情况下,会通过获取某个时间戳的快照来保证一致性(即 `--consistency snapshot`)。在使用 snapshot 来保证一致性的时候,可以使用 `--snapshot` 参数指定要备份的时间戳。还可以使用以下的一致性级别:
78+
79+
- `flush`:使用 [`FLUSH TABLES WITH READ LOCK`](https://dev.mysql.com/doc/refman/8.0/en/flush.html#flush-tables-with-read-lock) 来保证一致性。
80+
- `snapshot`:获取指定时间戳的一致性快照并导出。
81+
- `lock`:为待导出的所有表上读锁。
82+
- `none`:不做任何一致性保证。
83+
- `auto`:对 MySQL 使用 `flush`,对 TiDB 使用 `snapshot`
84+
85+
一切完成之后,你应该可以在 `/tmp/test` 看到导出的文件了:
86+
87+
```shell
88+
$ ls -lh /tmp/test | awk '{print $5 "\t" $9}'
89+
90+
140B metadata
91+
66B test-schema-create.sql
92+
300B test.sbtest1-schema.sql
93+
190K test.sbtest1.0.sql
94+
300B test.sbtest2-schema.sql
95+
190K test.sbtest2.0.sql
96+
300B test.sbtest3-schema.sql
97+
190K test.sbtest3.0.sql
98+
```
99+
100+
另外,假如数据量非常大,可以提前调长 GC 时间,以避免因为导出过程中发生 GC 导致导出失败:
101+
102+
{{< copyable "sql" >}}
103+
104+
```sql
105+
update mysql.tidb set VARIABLE_VALUE = '720h' where VARIABLE_NAME = 'tikv_gc_life_time';
106+
```
107+
108+
在操作结束之后,再将 GC 时间调回原样(默认是 `10m`):
109+
110+
{{< copyable "sql" >}}
111+
112+
```sql
113+
update mysql.tidb set VARIABLE_VALUE = '10m' where VARIABLE_NAME = 'tikv_gc_life_time';
114+
```
115+
116+
最后,所有的这些导出数据都可以用 [Lightning](/tidb-lightning/tidb-lightning-tidb-backend.md) 导入回 TiDB。

0 commit comments

Comments
 (0)