一、数据迁移方式
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-使用文档