百万级MySQL的数据量怎么快速完成数据迁移

53次阅读
没有评论

共计 1939 个字符,预计需要花费 5 分钟才能阅读完成。

这篇文章主要讲解了“百万级 MySQL 的数据量怎么快速完成数据迁移”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“百万级 MySQL 的数据量怎么快速完成数据迁移”吧!

方案选择

mysqldump 迁移

平常开发中,我们比较经常使用的数据备份迁移方式是用 mysqldump 工具导出一个 sql 文件,再在新数据库中导入 sql 来完成数据迁移。试验发现,通过 mysqldump 导出百万级量的数据库成一个 sql 文件,大概耗时几分钟,导出的 sql 文件大小在 1G 左右,然后再把这个 1G 的 sql 文件通过 scp 命令复制到另一台服务器,大概也需要耗时几分钟。在新服务器的数据库中通过 source 命令来导入数据,我跑了一晚上都没有把数据导入进来,cpu 跑满。

脚本迁移

直接通过命令行操作数据库进行数据的导出和导入是比较便捷的方式,但是数据量较大的情况下往往会比较耗时,对服务器性能要求也比较高。如果对数据迁移时间要求不是很高,可以尝试写脚本来迁移数据。虽然没有实际尝试,但是我想过大概有两种脚本方案。

第一种方式,在迁移目标服务器跑一个迁移脚本,远程连接源数据服务器的数据库,通过设置查询条件,分块读取源数据,并在读取完之后写入目标数据库。这种迁移方式效率可能会比较低,数据导出和导入相当于是一个同步的过程,需要等到读取完了才能写入。如果查询条件设计得合理,也可以通过多线程的方式启动多个迁移脚本,达到并行迁移的效果。

第二种方式,可以结合 redis 搭建一个“生产 + 消费”的迁移方案。源数据服务器可以作为数据生产者,在源数据服务器上跑一个多线程脚本,并行读取数据库里面的数据,并把数据写入到 redis 队列。目标服务器作为一个消费者,在目标服务器上也跑一个多线程脚本,远程连接 redis,并行读取 redis 队列里面的数据,并把读取到的数据写入到目标数据库。这种方式相对于第一种方式,是一种异步方案,数据导入和数据导出可以同时进行,通过 redis 做数据的中转站,效率会有较大的提升。关注公众号互联网架构师,回复关键字 2T,获取最新架构视频

可以使用 go 语言来写迁移脚本,利用其原生的并发特性,可以达到并行迁移数据的目的,提升迁移效率。

文件迁移

第一种迁移方案效率太低,第二种迁移方案编码代价较高,通过对比和在网上找的资料分析,我最终选择了通过 mysql 的 select data into  outfile file.txt、load data infile file.txt into  table 的命令,以导入导出文件的形式完成了百万级数据的迁移。

迁移过程

在源数据库中导出数据文件

select * from dc_mp_fans into outfile  /data/fans.txt

复制数据文件到目标服务器

zip fans.zip /data/fans.txt scp fans.zip root@ip:/data/

在目标数据库导入文件

unzip /data/fans.zip load data infile  /data/fans.txt  into table wxa_fans(id,appid,openid,unionid,@dummy,created_at,@dummy,nickname,gender,avatar_url,@dummy,@d

按照这么几个步骤操作,几分钟内就完成了一个百万级数据表的跨服务器迁移工作。

注意项

mysql 安全项设置

在 mysql 执行 load data infile 和 into outfile 命令都需要在 mysql 开启了 secure_file_priv 选项,  可以通过 show global variables like   %secure% 查看 mysql 是否开启了此选项,默认值 Null 标识不允许执行导入导出命令。通过 vim  /etc/my.cnf 修改 mysql 配置项,将 secure_file_priv 的值设置为空:

[mysqld] secure_file_priv=

则可通过命令导入导出数据文件。

导入导出的数据表字段不对应

上面示例的从源数据库的 dc_mp_fans 表迁移数据到目标数据库的 wxa_fans 表,两个数据表的字段分别为:- dc_mp_fans

wxa_fans

在导入数据的时候,可以通过设置字段名来匹配目标字段的数据,可以通过 @dummy 丢弃掉不需要的目标字段数据。

感谢各位的阅读,以上就是“百万级 MySQL 的数据量怎么快速完成数据迁移”的内容了,经过本文的学习后,相信大家对百万级 MySQL 的数据量怎么快速完成数据迁移这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-19发表,共计1939字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)