重点记录Mysql百万级的数据迁移过程!


假如有这么一个场景,开发了一个小程序,趁着双十一活动的热度,一个月后迅速积累了一百多万用户,我们在小程序页面增加了收集formid的埋点,用于给微信用户发送模板消息通知。

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

557da1805cce94c2eb9ee42c3151192.png

方案选择

mysqldump迁移

平常开发中,我们比较经常使用的数据备份迁移方式是用mysqldump工具导出一个sql文件,再在新数据库中导入sql来完成数据迁移。【推荐:mysql视频教程】

试验发现,通过mysqldump导出百万级量的数据库成一个sql文件,大概耗时几分钟,导出的sql文件大小在1G左右,然后再把这个1G的sql文件通过scp命令复制到另一台服务器,大概也需要耗时几分钟。在新服务器的数据库中通过source命令来导入数据,我跑了一晚上都没有把数据导入进来,cpu跑满。

脚本迁移

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

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

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

这里你也可以使用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';

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

Trae国内版 Trae国内版

国内首款AI原生IDE,专为中国开发者打造

Trae国内版 2045 查看详情 Trae国内版
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,*atar_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

57472b9472292102fce92a834d55390.png

wxa_fans

f7a4a3d2408f8d5aff68a9491749a62.png

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

总结

结合本次数据迁移经历,总结起来就是:

  • 小数据量可以使用mysqldump命令进行导入导出,这种方式简单便捷。
  • 数据量较大,且有足够的迁移耐心时,可以选择自己写脚本,选择合适的并行方案迁移数据,这种方式编码成本较高。
  • 数据量较大,且希望能在短时间内完成数据迁移时,可以通过mysql导入导出文件的方式来迁移,这种方式效率较高。             

以上就是重点记录Mysql百万级的数据迁移过程!的详细内容,更多请关注其它相关文章!


# 并把  # 产品营销推广在线服务  # 东莞网站推广seo公司  # 原创文章和seo  # 静海茶叶网站建设  # 杭州seo公司代理公司  # 石碣一键网站建设  # 宁津县seo网站优化  # 网站的推广优化预期效果  # 官方网站推广图片大全  # 网站建设公司哪家便宜  # Mysql  # 可以使用  # 第一种  # 数据库中  # 几分钟  # 国内  # 多线程  # 较高  # 可以通过  # 镜像 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: TikTok私信无法发送表情怎么办 TikTok消息表情发送修复方法  掌握Go App Engine项目结构与GOPATH:包管理与导入实践  德邦快递收费标准详解  Flash AS3.0简易相册制作  抖音评论无法发送如何修复 抖音评论功能操作指南  虫虫漫画绿色安全入口_虫虫漫画绿色安全入口安全看漫画  J*aScript 数值去小数位处理:多种方法与实践  Python中对象引用与链表属性赋值的机制解析  鲁班大师乓乓皮肤获取方法  抖音赚钱快速入门_新手必看的抖音赚钱步骤  Python中处理嵌套字典与列表的数据提取与过滤教程  qq音乐官方网站入口_qq音乐在线听歌网页版链接  Python csv 模块处理非字符串数据:列表写入 CSV 文件的机制解析  @Team是什么?揭秘团队含义  J*aScript二进制处理_ArrayBuffer与Blob  作业帮网页版不用下载入口 在线问老师快速答疑  mysql如何管理数据库账户_mysql数据库账户管理技巧  解决 Vue 3 组件未定义错误:理解 createApp 与根组件的正确使用  Final Cut Pro视频加EQ教程  PHP与SQL实践:高效实现数据复制与特定列值修改  J*a实现任务清单管理_集合框架综合入门练手  繁花漫画使用教程  PDF如何批量加注释_PDF多文件批注高亮操作教程  谷歌浏览器官方镜像获取方法_谷歌浏览器网页版入口极速直达  背部总是隐隐作痛怎么回事 背痛如何改善  怎样让Windows 11的开始菜单恢复经典样式_Open-Shell工具使用指南【怀旧】  服装短视频如何起号推广?服装短视频起号推广有什么要求?  漫蛙官网(首页入口)_漫蛙漫画稳定访问教程分享  tiktok国际版入口_tiktok官网网页版链接  荣耀 Magic10 Pro 系统更新提示失败_荣耀 Magic10 Pro 升级修复  12306APP选座怎么选充电位置_12306APP带充电插座座位选择方法与技巧  教资成绩怎么查询  《360浏览器》设置摄像头权限方法  Flask 应用中图片动态更新与上传:实现客户端定时刷新与服务器端文件管理  Google Drive API 认证:服务账户与OAuth 2.0的选择与实践  《领英》查看屏蔽名单方法  胃动力不足?试试这5个调理方法  蛙漫2(台版)正版官网 2025免费网页版分享  如何取消数字签名  如何在CSS中清除浮动解决背景颜色不包裹内容问题_clear after技巧  如何使用 composer 和 aop-php 实现 AOP 编程?  QQ邮箱注册地址 免费获取QQ邮箱账号  食品生产用水只要符合国家规定的生活饮用水卫生标准就可以吗  如何修改Windows截图的默认保存位置_告别C盘让桌面更整洁【教程】  汽水音乐在线听歌网页版 汽水音乐在线听歌网页版入口  《大润发优鲜》充值方法介绍  创建您的便携版VS Code:让配置随身携带  c++类和对象到底是什么_c++面向对象编程基础  在Dash应用中自定义HTML标题和网站图标  Yandex俄罗斯搜索引擎官网入口 Yandex网页端直接访问 

 2021-12-20

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.