NewSQL---- MYSQL 数据迁移到 TiDB 的几种方式

目录

1、使用MYSQL数据库的管理工具

1.1数据传输

 1.2 备份

1.3 转储SQL的功能

2、mysqldump

3、mydumper(官方推荐)

4、简单测试


 

1、使用MYSQL数据库的管理工具

以最常用的Navicat为例。类似的还有phpMyAdmin等。

1.1数据传输

Navicat 11以及之前的版本都有,数据传输的功能。对于数据量比较小的库,比如100M以内,完全够用了。但是在Navicat12之后这个功能就消失了。

 1.2 备份

Navicat自带数据库备份功能

1.3 转储SQL的功能

 

2、mysqldump

本地测试了下,mysqldump效率确实比较低,但还是比较稳定的,几百M的数据大概需要 一个多小时(可能跟我使用的机器有关,4C 8G )。对于1G以内应该还是可以满足需求的。

通过mysqldump 从MySQL库里备份出数据后,通过 source 初始化TiDB数据库的数据时,基本每次录入不大于150条左右的数据,这个单次录入的数量级跟MySQL差不多(可以配置),每次录入时间不定,最长差不多5S,最低大概0.05S。但是在MySQL数据库中使用source  命令初始化数据库每次录入数据基本都是毫秒的级。

下面是source初始化数据库的日志,可以做简单对比,可以看到mysql初始化数据的速度要比TiDB快很多。

TiDB source 初始化数据库日志:

Query OK, 74 rows affected (0.63 sec)
Records: 74  Duplicates: 0  Warnings: 0
Query OK, 74 rows affected (1.40 sec)
Records: 74  Duplicates: 0  Warnings: 0
Query OK, 74 rows affected (2.79 sec)
Records: 74  Duplicates: 0  Warnings: 0
Query OK, 74 rows affected (1.90 sec)
Records: 74  Duplicates: 0  Warnings: 0
Query OK, 74 rows affected (4.33 sec)
Records: 74  Duplicates: 0  Warnings: 0
Query OK, 74 rows affected (1.45 sec)
Records: 74  Duplicates: 0  Warnings: 0
Query OK, 74 rows affected (1.20 sec)
Records: 74  Duplicates: 0  Warnings: 0
Query OK, 74 rows affected (0.58 sec)
Records: 74  Duplicates: 0  Warnings: 0

MYSQL source 初始化数据库日志:

Query OK, 45 rows affected (0.02 sec)
Records: 45  Duplicates: 0  Warnings: 0
Query OK, 46 rows affected (0.02 sec)
Records: 46  Duplicates: 0  Warnings: 0
Query OK, 44 rows affected (0.02 sec)
Records: 44  Duplicates: 0  Warnings: 0
Query OK, 46 rows affected (0.02 sec)
Records: 46  Duplicates: 0  Warnings: 0
Query OK, 45 rows affected (0.02 sec)
Records: 45  Duplicates: 0  Warnings: 0
Query OK, 44 rows affected (0.02 sec)
Records: 44  Duplicates: 0  Warnings: 0
Query OK, 46 rows affected (0.02 sec)

3、mydumper(官方推荐)

从github上下载RPM包太慢,还是推荐二进制安装。安装可以参考:https://www.cnblogs.com/EikiXu/p/9811051.html,目前最新的版本是0.10。或者用TiDB提供的下载地址:wget http://download.pingcap.org/mydumper-linux-amd64.tar.gz

[root@localhost mydumper]# mydumper -V
mydumper 0.10.0, built against MySQL 5.5.64-MariaDB

使用mydumper导出数据还是挺快的,比mysqldump要快很多,我设置了 -t 8(8个线程) -F 32(每个文件32M)。

mydumper -h 172.24.213.141 -P 3306 -u root -p 123456 -t 8 -F 32 -B device_plan --skip-tz-utc -o device_plan

 

[root@localhost mydumper]# mydumper -h 172.24.213.141 -P 3306 -u root -p 123456 -t 8 -F 32 -B device_plan  --skip-tz-utc -o device_plan
[root@localhost mydumper]# ls device_plan/
device_plan.dm_area-schema.sql                  device_plan.pl_task_result.00028.sql  device_plan.pl_task_result.00097.sql
device_plan.dm_area.sql                         device_plan.pl_task_result.00029.sql  device_plan.pl_task_result.00098.sql
device_plan.dm_camera_config-schema.sql         device_plan.pl_task_result.00030.sql  device_plan.pl_task_result.00099.sql
device_plan.dm_camera_config.sql                device_plan.pl_task_result.00031.sql  device_plan.pl_task_result.00100.sql
device_plan.dm_cruise_job-schema.sql            device_plan.pl_task_result.00032.sql  device_plan.pl_task_result.00101.sql
device_plan.dm_device_monitor-schema.sql        device_plan.pl_task_result.00033.sql  device_plan.pl_task_result.00102.sql
device_plan.dm_device_monitor.sql               device_plan.pl_task_result.00034.sql  device_plan.pl_task_result.00103.sql
device_plan.dm_device-schema.sql                device_plan.pl_task_result.00035.sql  device_plan.pl_task_result.00104.sql
device_plan.dm_device.sql                       device_plan.pl_task_result.00036.sql  device_plan.pl_task_result.00105.sql
device_plan.dm_device_threshold-schema.sql      device_plan.pl_task_result.00037.sql  device_plan.pl_task_result.00106.sql
device_plan.dm_device_threshold.sql             device_plan.pl_task_result.00038.sql  device_plan.pl_task_result.00107.sql
device_plan.dm_dictionary-schema.sql            device_plan.pl_task_result.00039.sql  device_plan.pl_task_result.00108.sql

 

同步到TiDB中

#导入数据-t 6(6个线程) -q 10 每个事物包含10 个query 
myloader -h 127.0.0.1 -P 4000 -u root -t 6 -q 10 -d device_plan

使用单机部署时需要注意的地方:

(1)myloader 支持断点续传。遇到错误,也可以继续  只要 Tidb 没有停掉就不用担心。

[root@localhost mydumper]# myloader -h 127.0.0.1 -P 4000 -u root -t 3 -q 1 -d device_plan
** (myloader:9104): CRITICAL **: 20:57:28.795: Error restoring device_plan.pl_task_result from file device_plan.pl_task_result-schema.sql: Table 'device_plan.pl_task_resul
t' already exists
** (myloader:9104): CRITICAL **: 20:57:40.697: Error committing data for device_plan.pl_task_result: Duplicate entry '136289' for key 'PRIMARY'
** (myloader:9104): CRITICAL **: 20:57:45.427: Error committing data for device_plan.pl_task_result: Duplicate entry '37051' for key 'PRIMARY'
** (myloader:9104): CRITICAL **: 20:57:45.471: Error committing data for device_plan.pl_task_result: Duplicate entry '549169' for key 'PRIMARY'
** (myloader:9104): CRITICAL **: 20:57:46.280: Error committing data for device_plan.pl_task_result: Duplicate entry '325066' for key 'PRIMARY'
** (myloader:9104): CRITICAL **: 20:57:46.378: Error committing data for device_plan.pl_task_result: Duplicate entry '228578' for key 'PRIMARY'
** (myloader:9104): CRITICAL **: 21:09:12.488: Error committing data for device_plan.pl_task_result: TiKV server timeout

(2)单机集群,硬盘会成为性能瓶颈,

 所以  myloader 使用的线程数  -t 参数 用3 就可以,-q  设置为1。

mydumper 导出的块大小,-F 参数 最好不要设置太大,我设置了32M ,myloader 时明显事务太长,因为一个文件块 是一个独立的insert语句。建议设置成 16M 或者 8M。

(3)TiDB还是很耗资源的

官方给出的数据确实很快,那是在硬件资源充足的情况下给出的数据。对于普通开发和测试来说,没有太大参考意义。

 

4、简单测试

pl_task_result表总数量大概 300万,简单的分页查询大概200ms。

 

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

October-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值