首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >mysql全量数据迁移

mysql全量数据迁移

原创
作者头像
用户1685462
修改2021-07-19 10:56:38
修改2021-07-19 10:56:38
1.3K00
代码可运行
举报
文章被收录于专栏:网站教程网站教程
运行总次数:0
代码可运行

mydumper/loader 全量导入数据最佳实践

为了快速的迁移数据 (特别是数据量巨大的库),可以参考以下建议:

  • mydumper 导出数据至少要拥有 SELECTRELOADLOCK TABLES 权限
  • 使用 mydumper 导出来的数据文件尽可能的小,最好不要超过 64M,可以设置参数 -F 64
  • loader的 -t 参数可以根据 TiKV 的实例个数以及负载进行评估调整,例如 3个 TiKV 的场景,此值可以设为 3 *(1 ~ n);当 TiKV 负载过高,loader 以及 TiDB 日志中出现大量 backoffer.maxSleep 15000ms is exceeded 可以适当调小该值,当 TiKV 负载不是太高的时候,可以适当调大该值。

导入示例及相关配置:

  • mydumper 导出后总数据量 214G,单表 8 列,20 亿行数据
  • 集群拓扑
    • TiKV * 12
    • TiDB * 4
    • PD * 3
  • mydumper -F 设置为 16,Loader -t 参数设置为 64

结果:导入时间 11 小时左右,19.4 G/小时

从 MySQL 导出数据

我们使用 mydumper 从 MySQL 导出数据,如下:

代码语言:javascript
代码运行次数:0
运行
复制
./bin/mydumper -h 127.0.0.1-P 3306-u root -t 16-F 64-B test -T t1,t2 --skip-tz-utc -o ./var/test

上面,我们使用 -B test 表明是对 test 这个 database 操作,然后用 -T t1,t2 表明只导出 t1t2 两张表。

-t 16 表明使用 16 个线程去导出数据。-F 64 是将实际的 table 切分成多大的 chunk,这里就是 64MB 一个 chunk。

--skip-tz-utc 添加这个参数忽略掉 MySQL 与导数据的机器之间时区设置不一致的情况,禁止自动转换。

注意: 在阿里云等一些需要 super privilege 的云上面,mydumper 需要加上 --no-locks 参数,否则会提示没有权限操作。

向 TiDB 导入数据

注意: 目前 TiDB 支持 UTF8mb4 字符编码,假设 mydumper 导出数据为 latin1 字符编码,请使用 iconv -f latin1 -t utf-8 $file -o /data/imdbload/$basename 命令转换,$file 为已有文件,$basename 为转换后文件。 注意: 如果 mydumper 使用 -m 参数,会导出不带表结构的数据,这时 loader 无法导入数据。

我们使用 loader 将之前导出的数据导入到 TiDB。Loader 的下载和具体的使用方法见 Loader 使用文档

代码语言:javascript
代码运行次数:0
运行
复制
./bin/loader -h 127.0.0.1-u root -P 4000-t 32-d ./var/test

导入成功之后,我们可以用 MySQL 官方客户端进入 TiDB,查看:

代码语言:javascript
代码运行次数:0
运行
复制
mysql -h127.0.0.1-P4000 -uroot

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • mydumper/loader 全量导入数据最佳实践
  • 从 MySQL 导出数据
  • 向 TiDB 导入数据
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档