目录
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。