返回介绍

PART Ⅰ : 容器云OPENSHIFT

PART Ⅱ:容器云 KUBERNETES

PART Ⅲ:持续集成与持续部署

PART Ⅴ:日志/监控/告警

PART Ⅵ:基础

PART Ⅶ:数据存储、处理

PART VIII:CODE

PART X:HACKINTOSH

PART XI:安全

大数据量的迁移方案对比

发布于 2024-06-08 21:16:45 字数 6109 浏览 0 评论 0 收藏 0

迁移全量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,然后执行

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文