Dumpling 是支持以 SQL 文本或者 CSV 格式将 MySQL/TiDB 数据导出的工具。
设计初衷是为了替代 Mydumper, 所以基本用法可以参考 Mydumper, 当然在实现中没有完全照搬 Mydumper, 因此存在与 Mydumper 不同的用法。
下表罗列了一些主要参数
主要参数 | |
---|---|
-B 或 --database | 导出指定数据库 |
-T 或 --tables-list | 导出指定数据表 |
-f 或 --filter | 导出能匹配模式的表,语法可参考 table-filter(只有英文版) |
--case-sensitive | table-filter 是否大小写敏感,默认为 false 不敏感 |
-h 或 --host | 链接节点地址(默认 "127.0.0.1") |
-t 或 --threads | 备份并发线程数 |
-r 或 --rows | 将 table 划分成 row 行数据,一般针对大表操作并发生成多个文件。 |
--loglevel | 日志级别 {debug,info,warn,error,dpanic,panic,fatal} (默认 "info") |
-d 或 --no-data | 不导出数据, 适用于只导出 schema 场景 |
--no-header | 导出 table csv 数据,不生成 header |
-W 或 --no-views | 不导出 view, 默认 true |
-m 或 --no-schemas | 不导出 schema , 只导出数据 |
-s 或--statement-size | 控制 Insert Statement 的大小,单位 bytes |
-F 或 --filesize | 将 table 数据划分出来的文件大小, 需指明单位 (如 128B , 64KiB , 32MiB , 1.5GiB ) |
--filetype | 导出文件类型 csv/sql (默认 sql) |
-o 或 --output | 设置导出文件路径 |
--output-filename-template | 设置导出文件名模版,详情见下 |
-S 或 --sql | 根据指定的 sql 导出数据,该指令不支持并发导出 |
--consistency | flush: dump 前用 FTWRL snapshot: 通过 tso 指定 dump 位置 lock: 对需要 dump 的所有表执行 lock tables read none: 不加锁 dump,无法保证一致性 auto: MySQL flush, TiDB snapshot |
--snapshot | snapshot tso, 只在 consistency=snapshot 下生效 |
--where | 对备份的数据表通过 where 条件指定范围 |
-p 或 --password | 链接密码 |
-P 或 --port | 链接端口,默认 4000 |
-u 或 --user | 默认 root |
更多具体用法可以使用 -h, --help 进行查看。
--output-filename-template
参数指定了所有文件的命名方式(不含扩展名)。它使用 Go 的 text/template
语法。
模板可使用以下字段:
.DB
— 库名.Table
— 表名、物件名称。.Index
— 由 0 开始的序列号,代表当前导出的表中的哪一份文件
库和表名中可能包含 /
之类的特殊字符,而这些字符不能用在文件系统中。因此,Dumpling 提供了一个 fn
函数来对这些特殊字符进行百分号编码。它们是:
- U 0000 到 U 001F (控制字符)
/
、\
、<
、>
、:
、"
、*
、?
(无效的 Windows 路径字符).
(库/表名分隔符)-
,当出现在-schema
字串里
例如,使用 --output-filename-template '{{fn .Table}}.{{printf " d" .Index}}'
后,Dumpling 会把表 "db"."tbl:normal"
导出到 tbl:normal.000000000.sql
、tbl:normal.000000001.sql
等文件。
除数据文件外,Dumpling 还支持透过子模版自定义命名表结构文件的名称。默认的配置是:
模版名 | 默认内容 |
---|---|
data | {{fn .DB}}.{{fn .Table}}.{{.Index}} |
schema | {{fn .DB}}-schema-create |
table | {{fn .DB}}.{{fn .Table}}-schema |
event | {{fn .DB}}.{{fn .Table}}-schema-post |
function | {{fn .DB}}.{{fn .Table}}-schema-post |
procedure | {{fn .DB}}.{{fn .Table}}-schema-post |
sequence | {{fn .DB}}.{{fn .Table}}-schema-sequence |
trigger | {{fn .DB}}.{{fn .Table}}-schema-triggers |
view | {{fn .DB}}.{{fn .Table}}-schema-view |
例如,使用 --output-filename-template '{{define "table"}}{{fn .Table}}.$schema{{end}}{{define "data"}}{{fn .Table}}.{{printf " d" .Index}}{{end}}'
后,Dumpling 会把表 "db"."tbl:normal"
的结构写到 tbl:normal.$schema.sql
,以及把数据写到 tbl:normal.000000000.sql
。