大数据的数据迁移

一、简介

迁移全量MySQL数据到TIDB。情况如下:

  • 源库:RDS备份文件启动的MySQL实例,一个DB,数据量大约800张表,数据大小500+GB

  • 目标库:TIDB集群

将源库中的数据导入TiDB

二、方案

1、Navicat的数据传输工具

  • 直接使用Navicat的数据传输工具,配置数据源连接和目标源连接。

2、TiDB生态圈工具

  • TiDB Dumping导出:导出源MySQL中的数据为SQL文件
  • 修改SQL文件命名:修改TiDB Dumping导出的SQL文件命名格式
  • TiDB Lighting导入:将SQL文件导入到TiDB

TiDB Dumpling

version=v4.0.5 && \
curl -# https://download.pingcap.org/tidb-toolkit-$version-linux-amd64.tar.gz | tar -zxC /opt && \
ln -s /opt/tidb-toolkit-$version-linux-amd64 /opt/tidb-toolkit-$version && \
echo "export PATH=/opt/tidb-toolkit-$version/bin:$PATH" >> /etc/profile && \
mkdir -p /data/dumping-export/sql && \
source /etc/profile && \
nohup dumpling \
  -u 用于导出数据的用户 \                    # 用于导出数据的用户要拥有SELECT、RELOAD、LOCK TABLES、REPLICATION CLIENT服务器权限
  -p 用于导出数据的用户密码 \
  -P 3306 \
  -h 192.168.1.4 \
  -B database \                                        # 指定要导出的Database
  --filetype sql \                                # 指定导出文件类型(可为csv/sql)
  --threads 32 \                                    # 指定备份并发线程数
  -o /data/dumping-export/sql \        # 指定导出文件存储路径
  -F 256MiB \                                            # 指定导出文件最大大小
  --logfile /data/dumping-export/export-task.log >/data/dumping-export/dumpling-nohupout.log 2>&1 &

批量修改SQL文件

# 例如源库DB为Test,想把数据导入到目标库Test-2中
old_database_name=test
new_database_name=Test-2
for i in $(ls /data/dumping-export/sql/*.sql | grep -v schema-create );do 
        mv /data/dumping-export/sql/$i /data/dumping-export/sql/$new_database_name.${i#*.};
done
mv /data/dumping-export/sql/${old_database_name}-schema-create.sql /data/dumping-export/sql/${new_database_name}-schema-create.sql
echo "" > ${new_database_name}-schema-create.sql

TiDB Lighting

nohup /opt/tidb-toolkit-v4.0.5-linux-amd64/bin/tidb-lightning \
  -config /data/dumping-export/tidb-lightning.toml \
  --log-file /data/dumping-export/import-task.log > /data/dumping-export/lightning-nohupout.log 2>&1 &


nohup tidb-lightning \
  -L info \
  -log-file /data/dumping-export/import-task.log \
  -backend tidb \
  -status-addr 10080 \
  -d /data/dumping-export/sql \
  -tidb-host 192.168.1.4 \
  -tidb-port 4000 \
  -tidb-user root \
  -tidb-password ***** > /data/dumping-export/lightning-nohupout.log 2>&1 &

三、结论

大约三千万条记录的表,Navicat数据传输工具同步完耗时约3个小时而使用TiDB生态圈的工具耗时26分钟

四、其他

1、查询DB下所有表的行数

由于从INFORMATION_SCHEMA.TABLES中显示的表的行数不准确,需要使用count函数来统计表的行数

SELECT CONCAT( 'SELECT "', TABLE_NAME, '", COUNT(*) FROM ', TABLE_SCHEMA, '.', TABLE_NAME, ' UNION ALL' )  EXEC_SQL
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'DB名字';

上述SQL会输出用于统计表的SQL语句,复制以后,删除最后一行末尾的UNION ALL,然后执行

Copyright Curiouser all right reserved,powered by Gitbook该文件最后修改时间: 2022-05-16 17:26:46

results matching ""

    No results matching ""