一、数据迁移方式
1.mysqldump
解释:mysqldump可以从mysql迁移到tidb,数据量小的时候比较好用,但是当数据量较大了,迁移时间会比较长
2.mydumper
解释:mydumper有两种,一种是我们所熟悉的mydumper,或者说原生mydumper,另一种则是tidb封装的mydumper,原生mydumper相对来说比较好用,而因为tidb后期维护了dumpling,而不是mydumper,所以tidb封装的mydumper在大数据量导出时会遇到多种问题。
问题一、
导出过程中出现:Lost connection to MySQL server during query
解决:加入-r参数,-r 10000等等
问题二、
导出过程中出现:Lost connection to MySQL server during query
解决:采用原生mydumper或者dumpling来解决
3.dumpling
解释:目前tidb比较主推的数据迁移工具
二、dumpling详解
1.参数解释
| 主要选项 | 用途 | 默认值 |
|---|---|---|
| -V 或 --version | 输出 Dumpling 版本并直接退出 | |
| -B 或 --database | 导出指定数据库 | |
| -T 或 --tables-list | 导出指定数据表 | |
| -f 或 --filter | 导出能匹配模式的表,语法可参考 table-filter | [\*.\*,!/^(mysql|sys|INFORMATION_SCHEMA|PERFORMANCE_SCHEMA|METRICS_SCHEMA|INSPECTION_SCHEMA)$/.\*](导出除系统库外的所有库表) |
| --case-sensitive | table-filter 是否大小写敏感 | false,大小写不敏感 |
| -h 或 --host | 连接的数据库主机的地址 | "127.0.0.1" |
| -t 或 --threads | 备份并发线程数 | 4 |
| -r 或 --rows | 将 table 划分成 row 行数据,一般针对大表操作并发生成多个文件。 | |
| -L 或 --logfile | 日志输出地址,为空时会输出到控制台 | "" |
| --loglevel | 日志级别 {debug,info,warn,error,dpanic,panic,fatal} | "info" |
| --logfmt | 日志输出格式 {text,json} | "text" |
| -d 或 --no-data | 不导出数据,适用于只导出 schema 场景 | |
| --no-header | 导出 csv 格式的 table 数据,不生成 header | |
| -W 或 --no-views | 不导出 view | true |
| -m 或 --no-schemas | 不导出 schema,只导出数据 | |
| -s 或--statement-size | 控制 INSERT SQL 语句的大小,单位 bytes | |
| -F 或 --filesize | 将 table 数据划分出来的文件大小,需指明单位(如 128B, 64KiB, 32MiB, 1.5GiB) | |
| --filetype | 导出文件类型(csv/sql) | "sql" |
| -o 或 --output | 导出本地文件路径或外部存储 URL | "./export-${time}" |
| -S 或 --sql | 根据指定的 sql 导出数据,该选项不支持并发导出 | |
| --consistency | flush: dump 前用 FTWRL snapshot: 通过 TSO 来指定 dump 某个快照时间点的 TiDB 数据 lock: 对需要 dump 的所有表执行 lock tables read 命令 none: 不加锁 dump,无法保证一致性 auto: 对 MySQL 使用 --consistency flush;对 TiDB 使用 --consistency snapshot | "auto" |
| --snapshot | snapshot tso,只在 consistency=snapshot 下生效 | |
| --where | 对备份的数据表通过 where 条件指定范围 | |
| -p 或 --password | 连接的数据库主机的密码 | |
| -P 或 --port | 连接的数据库主机的端口 | 4000 |
| -u 或 --user | 连接的数据库主机的用户名 | "root" |
| --dump-empty-database | 导出空数据库的建库语句 | true |
| --ca | 用于 TLS 连接的 certificate authority 文件的地址 | |
| --cert | 用于 TLS 连接的 client certificate 文件的地址 | |
| --key | 用于 TLS 连接的 client private key 文件的地址 | |
| --csv-delimiter | csv 文件中字符类型变量的定界符 | '"' |
| --csv-separator | csv 文件中各值的分隔符 | ',' |
| --csv-null-value | csv 文件空值的表示 | "\N" |
| --escape-backslash | 使用反斜杠 (\) 来转义导出文件中的特殊字符 | true |
| --output-filename-template | 以 golang template 格式表示的数据文件名格式 支持 {{.DB}}、{{.Table}}、{{.Index}} 三个参数 分别表示数据文件的库名、表名、分块 ID | '{{.DB}}.{{.Table}}.{{.Index}}' |
| --status-addr | Dumpling 的服务地址,包含了 Prometheus 拉取 metrics 信息及 pprof 调试的地址 | ":8281" |
| --tidb-mem-quota-query | 单条 dumpling 命令导出 SQL 语句的内存限制,单位为 byte。对于 v4.0.10 或以上版本,若不设置该参数,默认使用 TiDB 中的 mem-quota-query 配置项值作为内存限制值。对于 v4.0.10 以下版本,该参数值默认为 32 GB | 34359738368 |
| --params | 为需导出的数据库连接指定 session 变量,可接受的格式: "character_set_client=latin1,character_set_connection=latin1" |
2.使用准备
账号权限:
SELECT
RELOAD
LOCK TABLES
REPLICATION CLIENT
3.使用实例
./dumpling -h 192.168.1.101 -P 3306 -u root --consistency none -L ./a.log --threads 16 -o /data/backup -B db1 -f 'db1.ab*' -f 'db1.ac*' -r 20000 -p123456
./dumpling -u root -p'password' -P 4000 -h 192.168.1.101 -L ./a.log -o /data/backup --filetype csv --sql 'select * from db.table_name'
将数据迁移导出到TIDB上可以有多种方式,根据自己需求来选择
官网链接:https://docs.pingcap.com/zh/tidb/stable/dumpling-overview#dumpling-使用文档
本文介绍了Dumpling作为TiDB数据迁移的主要工具,包括其与mysqldump和mydumper的区别。重点讲解了Dumpling的参数设置,如并发线程数、文件大小和一致性选项,并提供了应对连接断开问题的解决方案。此外,还详细阐述了Dumpling的使用准备和实例,展示了如何进行数据导出。适合需要进行TiDB数据迁移的读者参考。
1338

被折叠的 条评论
为什么被折叠?



