mysql百万级数据统计(mysql百万级数据分组)

技术Mysql百万级数据迁移的示例分析这篇文章将为大家详细讲解有关Mysql百万级数据迁移的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

本文将详细解释Mysql百万级数据迁移的实例分析。边肖觉得挺实用的,就分享给大家参考。希望你看完这篇文章能有所收获。

如果有这样的场景,就开发一个小程序,利用“双十一”活动的火爆,一个月后就迅速积累了一百多万用户。我们在小程序的页面上增加了收集formid的埋点,给微信用户发送模板消息通知。

随着数据量的增加,之前使用的服务器空间开始有点不足。最近写了一个专门为小程序后台开发设计的新框架,所以想把原来的数据迁移到新系统的数据库中。买了4核8G机,开始数据迁移。以下是迁移过程的简单记录。

Mysql百万级数据迁移的示例分析

方案选择

mysqldump迁移在正常的开发中,我们经常使用数据备份迁移的方法,用mysqldump工具导出一个sql文件,然后将sql导入到新的数据库中,完成数据迁移。

实验表明,通过mysqldump将一个百万级的数据库导出到一个sql文件需要几分钟的时间。导出的sql文件大小约为1G,然后通过scp命令将1G sql文件复制到另一台服务器需要几分钟。通过source命令将数据导入新服务器的数据库。我跑了一晚上没有导入数据,cpu满了。

脚本迁移

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

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

第二种方式,可以结合redis构建“生产与消费”的迁移方案。作为数据生产者,源数据服务器可以在源数据服务器上运行多线程脚本,并行读取数据库中的数据,并将数据写入redis队列。作为使用者,目标服务器还在目标服务器上运行多线程脚本,远程连接到redis,并行读取redis队列中的数据,并将读取的数据写入目标数据库。与第一种方法相比,这种方法是一种异步方案。数据导入和数据导出可以同时进行。通过使用redis作为数据传输站,效率将大大提高。

在这里,您还可以使用go语言编写迁移脚本。利用其原生并发性,可以达到并行迁移数据的目的,提高迁移效率。

文件迁移

第一种迁移方案的效率太低,第二种迁移方案的编码成本相对较高。通过对比分析网上找到的数据,最终选择了mysql。

选择dataintooutfilefile.txt、loaddatainfefilefile . txt totalable命令,以导入和导出文件的形式完成数百万数据的迁移。

迁移过程

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

选择* from DC _ MP _ fansintooutfile '/data/fans . txt ';将数据文件复制到目标服务器

ar:false">zip fans.zip /data/fans.txtscp fans.zip root@ip:/data/

在目标数据库导入文件

unzip /data/fans.zipload data infile '/data/fans.txt' into table wxa_fans(id,appid,openid,unionid,@dummy,created_at,@dummy,nickname,gender,avatar_url,@dummy,@dummy,@dummy,@dummy,language,country,province,city,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy);

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

注意项

  • 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

Mysql百万级数据迁移的示例分析

wxa_fans

Mysql百万级数据迁移的示例分析

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

关于“Mysql百万级数据迁移的示例分析”这篇文章就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/153415.html

(0)

相关推荐

  • 怎么打出拼音声调,怎么打出汉语拼音声调符号

    技术怎么打出拼音声调,怎么打出汉语拼音声调符号打开WORD后怎么打出拼音声调,选择“插入→符号”,在符号→子集”选项里选择“进格的修饰字符”,里面就有汉语的声调符号.如图所示. 拼音声调
    拼音声调是指普通话中的声调,通

    生活 2021年10月21日
  • ESP32读取串口传感器数据

    技术ESP32读取串口传感器数据 ESP32读取串口传感器数据最近拿到一个九轴陀螺仪传感器,如图:该设备通过串口方式输出九轴数据,可用官方自带得上位机或者是sscom看到数据,官网提供了很多例程,但唯独

    礼包 2021年12月9日
  • 馒头冷冻能保存多久,馒头一般保存多久还可以吃

    技术馒头冷冻能保存多久,馒头一般保存多久还可以吃你好!我是美食领域创作者娜小厨 ,很高兴可以为你解答问题馒头冷冻能保存多久。馒头属于发面类面食,内部结构宣软蓬松 气孔较多 。特别容易滋生细菌 。尤其是黄曲霉菌 。曲霉特别

    生活 2021年10月22日
  • python调用函数和打印函数的区别有哪些

    技术python调用函数和打印函数的区别有哪些本篇内容介绍了“python调用函数和打印函数的区别有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希

    攻略 2021年10月20日
  • 铁与盐酸反应的化学方程式,铁和盐酸反应的离子方程式

    技术铁与盐酸反应的化学方程式,铁和盐酸反应的离子方程式铁与盐酸反应生成氯化亚铁和氢气,氯化氢、氯化亚铁为强电解质,完全拆成离子形式。离子方程式铁与盐酸反应的化学方程式:Fe+2H+=Fe2++H2↑。铁是比较活泼的金属,

    生活 2021年10月24日
  • 利用聚合概念指导MongoDB的Schema设计是怎么样的

    技术利用聚合概念指导MongoDB的Schema设计是怎么样的这期内容当中小编将会给大家带来有关利用聚合概念指导MongoDB的Schema设计是怎么样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大

    攻略 2021年11月4日