本文主要讲解“如何快速完成百万MySQL数据的数据迁移”。本文的解释简单明了,易学易懂。现在,请跟随边肖的思路,一起学习学习“如何快速完成百万MySQL数据的数据迁移”!
方案选择
mysqldump迁移
在正常开发中,我们经常使用数据备份迁移的方法,用mysqldump工具导出一个sql文件,然后将sql导入到新的数据库中,完成数据迁移。实验表明,通过mysqldump将一个百万级的数据库导出到一个sql文件需要几分钟的时间。导出的sql文件大小约为1G,然后通过scp命令将1G sql文件复制到另一台服务器需要几分钟。通过source命令将数据导入新服务器的数据库。我跑了一晚上没有导入数据,cpu满了。
脚本迁移
通过命令行直接操作数据库是一种方便的数据导出和导入方式,但在数据量较大时,这种方式往往很耗时,并且需要较高的服务器性能。如果数据迁移的时间要求不是很高,可以尝试编写脚本来迁移数据。虽然没有实际尝试,但我想过大概有两种脚本方案。
第一种方式,在迁移目标服务器上运行迁移脚本,远程连接到源数据服务器的数据库,通过设置查询条件分块读取源数据,读取后写入目标数据库。这种迁移方式的效率可能比较低,数据的导出和导入相当于一个同步的过程,需要等到读完再写。如果查询条件设计合理,也可以通过多线程启动多个迁移脚本,达到并行迁移的效果。
第二种方式,可以结合redis构建一个“生产和消费”迁移计划。作为数据生产者,源数据服务器可以在源数据服务器上运行多线程脚本,并行读取数据库中的数据,并将数据写入redis队列。作为使用者,目标服务器还在目标服务器上运行多线程脚本,远程连接到redis,并行读取redis队列中的数据,并将读取的数据写入目标数据库。与第一种方法相比,这种方法是一种异步方案。数据导入和数据导出可以同时进行。通过使用redis作为数据传输站,效率将大大提高。关注微信官方账号互联网架构师,回复关键词2T,获取最新架构视频。
Go语言可以用来编写迁移脚本,其原生并发性可以达到数据并行迁移的目的,提高迁移效率。
文件迁移
第一种迁移方案的效率太低,第二种迁移方案的编码成本相对较高。通过对网上找到的数据进行对比分析,最终选择了mysql的select data进入output file.txt,load data infeile file.txt进入table的命令,以导入导出文件的形式完成了百万数据的迁移。
迁移过程
导出源数据库中的数据文件
选择* from DC _ MP _ fansintooutfile '/data/fans . txt ';将数据文件复制到目标服务器
Zipfans.zip/data/fans.txtscpfans.ziproot@ip:/data/在目标数据库中导入文件。
unzip/data/fans . zippoladdatainfile '/data/fans . txt '进入tablewxa _ fans (id,appid,OpenID,unionid,@ dummy,created _ at,@ dummy,昵称,性别,avatar _ URL,@ dummy,@ d,根据以下
注意项
mysql安全项目设置
在mysql中执行load data infile和into outfile命令需要在mysql中打开secure_file_priv选项,这可以通过显示像“% secure%”这样的全局变量来完成;检查mysql是否打开了该选项。默认值为空表示不允许导入和导出命令。通过vim /etc/my.cnf修改mysql配置项,并将secure_file_priv的值设置为null:
[mysqld]secure_file_priv=' '可以通过命令导入和导出数据文件。
导出的数据表字段不对应。
在上面的示例中,数据从源数据库的dc_mp_fans表迁移到目标数据库的wxa_fans表。两个数据表的字段是:-dc_mp_fans。
wxa _ fans
导入数据时,可以通过设置字段名来匹配目标字段的数据,也可以通过@dummy来丢弃目标字段不必要的数据。
感谢阅读。以上就是“如何快速迁移百万级MySQL的数据”的内容。看完这篇文章,相信你对如何快速迁移百万级MySQL的数据有了更深的理解,具体用法还需要实践验证。在这里,边肖将为您推送更多关于知识点的文章,敬请关注!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/101151.html