[转帖]mysql 千万数据迁移的几种方式

mysql,千万,数据,迁移,几种,方式 · 浏览次数 : 0

小编点评

**数据迁移方案** **步骤 1:准备数据** * 将三天前的历史数据复制到一个新的业务表中。 * 创建一个新的业务表,并为其定义主键。 **步骤 2:使用分页查询** * 每次读取 5000 行数据,并使用 `LIMIT` 关键字限制结果数量。 * 使用 `OFFSET` 关键字分页数据。 **步骤 3:使用 `INSERT INTO SELECT` 语句** * 将每页数据插入到新的业务表中。 * 为插入语句添加索引,以加快数据检索。 **步骤 4:使用 DLA 导入数据** * 将历史数据先导到数据湖中。 * 使用 `load data` 命令快速导入数据。 **步骤 5:选择最佳导入方法** * **小数据量:** 使用 `INSERT INTO SELECT` 语句或 `mysqldump` 命令。 * **中数据量:** 使用 `mysqldump` 命令。 * **大数据量:** 使用 `load data` 命令。 **优化** * 使用索引来优化查询。 * 使用缓存机制来缓存查询结果。 * 使用多线程或异步编程来提高导入效率。

正文

最近因为业务需求,我们需要将我们的订单表(一千三百万数据,并且每天已五万条速度增加)已订单类型分组迁移到新的业务表中,以降低我们订单表的大小,同时暂时杜绝订单表所带来的数据瓶颈问题,需求下来了,基本思路也要确定下来,我打算先将三天前的历史数据先跑到表里,待整个业务线迁移过后,我再将剩下的数据跑进去,思路确立了,我就轰轰烈烈的干了起来。

首先我理所当然的想用代码实现,我就吭哧吭哧的用go写了是个协程同时跑数据,用gorm v2的FindInBatches可以批量插入数据,sql为insert into XXX(字段) values (数据1,数据2)这样,中间遇到一个问题,我想可以快点结束,就用了分页查询,每次5000条,每个对象包含四十个字段,结果就报错Prepared statement contains too many placeholders,占位符太多,mysql一条语句最多支持65535,然后我就修改为1500条每次,刚开始确实很快,但是越到后面就发现分页查询到几秒、几十秒最后基本跑不下去了,这种方案分页查询太慢,pass。

接着我就直接在sql里面跑,用insert into XXX(字段1,字段2…) form select 条件,以前我跑百万数据的时候就用的这个语句,需要注意的是,select 查询的时候一定记得要给查询条件加上索引,避免全表扫描。因为全表扫描会导致数据加锁,数据量太多会让数据读写均无法操作,切记,一定要加索引,这种方案可以正常导入,但是时间比较长,有全表加锁的风险,慎用。

再然后我使用的是阿里云的数据湖分析工具(DLA,功能强大,强烈推荐),将我们的历史数据先导下来,然后使用load data快速导入数据的方法去导入数据,这个方法有个弊端就是需要将数据(文件较大)上传到服务器,并且需要是宿主机上,但是速度真的是很快,我选择的是这种方式导入数据,方便快捷。

最后一种就是下载指定字段的dump文件,然后进入到数据库用source命令将我们的dump文件执行就OK了,en…速度不敢恭维

以上几种方式,小数据量的迁移可以选择代码(只要为了锻炼写代码能力)或者insert into select from,中数据量的可以使用mysqldump去迁移数据,大数据量还是推荐使用load data快速导入的方式去迁移数据。

文章知识点与官方知识档案匹配,可进一步学习相关知识
MySQL入门技能树数据修改插入26151 人正在系统学习中

与[转帖]mysql 千万数据迁移的几种方式相似的内容:

[转帖]mysql 千万数据迁移的几种方式

最近因为业务需求,我们需要将我们的订单表(一千三百万数据,并且每天已五万条速度增加)已订单类型分组迁移到新的业务表中,以降低我们订单表的大小,同时暂时杜绝订单表所带来的数据瓶颈问题,需求下来了,基本思路也要确定下来,我打算先将三天前的历史数据先跑到表里,待整个业务线迁移过后,我再将剩下的数据跑进去,

[转帖]在 TiDB 中正确使用索引,性能提升 666 倍

https://tidb.net/book/tidb-monthly/2022/2022-04/usercase/index-666 背景​ 最近在给一个物流系统做TiDB POC测试,这个系统是基于MySQL开发的,本次投入测试的业务数据大概10个库约900张表,最大单表6千多万行。 这个规模不算

[转帖]mysql百万级性能瓶颈-数据库选型

项目中使用了mysql数据库,但数据量增长太快,不久到了百万级,很快又到表到了千万级,尝试了各种优化方式,最终效果仍难达到秒级响应,那么引发了我关于数据库选型到一些思考。 1、mysql的单表性能瓶颈究竟是多少? 曾经在中国互联网技术圈广为流传着这么一个说法:MySQL 单表数据量大于 2000 万

[转帖]mysql百万级性能瓶颈-数据库选型

项目中使用了mysql数据库,但数据量增长太快,不久到了百万级,很快又到表到了千万级,尝试了各种优化方式,最终效果仍难达到秒级响应,那么引发了我关于数据库选型到一些思考。 1、mysql的单表性能瓶颈究竟是多少? 曾经在中国互联网技术圈广为流传着这么一个说法:MySQL 单表数据量大于 2000 万

[转帖]MySQL pid 和 socket 文件说明

2021-10-13 11:595110转载MySQL 1 pid-file文件 MySQL 中的 pid 文件记录的是当前 mysqld 进程的 pid ,pid 亦即 Process ID 。可以通过 pid-file 参数来配置 pid 文件路径及文件名,如果未指定此变量,则 pid 文件默认

[转帖]MySQL 慢查询日志深入理解

https://www.jb51.net/article/210312.htm + 目录 什么是慢查询日志 MySQL的慢查询日志是 MySQL提供的一种日志记录,它用来记录在 MySQL 中响应时间超过阀值的语句,具体指运行时间超过long_query_time 值的 SQL,则会被记录到慢查询日

[转帖]MySQL with Docker - Performance characteristics

https://dev.mysql.com/blog-archive/mysql-with-docker-performance-characteristics/ Docker presents new levels of portability and ease of use when it co

[转帖]MySQL Performance : Impact of InnoDB Transaction Isolation Modes in MySQL 5.7

http://dimitrik.free.fr/blog/archives/2015/02/mysql-performance-impact-of-innodb-transaction-isolation-modes-in-mysql-57.html There were so many valua

[转帖]MySQL Performance : IP port -vs- UNIX socket impact in 8.0 GA

http://dimitrik.free.fr/blog/posts/mysql-performance-80-ga-ip-port-vs-unix-socket-impact.html 2018-06-15 16:05 | MySQL, Performance, InnoDB, Benchmark

[转帖]MySQL Performance : XFS -vs- EXT4 Story

http://dimitrik.free.fr/blog/posts/mysql-80-perf-xfs-vs-ext4.html 2020-05-13 22:15 | MySQL, Performance, InnoDB, Benchmarks, DoubleWrite, XFS, EXT4 by