MySQL海量数据迁移
数据库迁移
本主前一段时间写毕业设计主要使用MySQL,紧锣密鼓的开发了将近一个多月,项目数据层、接口层、数据采集层已经开发完成,算法还在不断的优化提速,由于请了几位大佬帮我做Code Review,所以不得已购买了一个阿里云的RDS服务,将本地的所有数据迁移到RDS上。本篇文章仅仅介绍数据库MySQL本地迁移到云端。HIVE的数据同步到MySQL后续会介绍。使用的是Sqoop脚本。
01
为什么进行数据库迁移
我们首先需要确认的是什么场景下才会进行数据库迁移工作呢?
1、磁盘空间不足
2、业务出现瓶颈:业务扩展,单机读写压力大,在IO性能允许的情况下可以进行读写分离,横向扩展。
3、机器出现瓶颈:磁盘IO能力、内存、CPU出现瓶颈
4、项目改造
......
02
数据库迁移要求
1、 数据完整性
2、 线上业务平稳运行
3、 安全性
03
数据库备份
1、 数据量较小的情况下的迁移方式(10G)
直接选择数据库的备份命令mysqldump,将数据库SQL脚本导入到一个文件中,直接将文件上传至云端服务器执行或Load即可。我将本地数据迁移的RDS上使用的是这种迁移方式。
mysqldump -h host -p 3306 -u [用户名] -p [用户密码] --no-data --[database|database | all-databases] [数据库名称 | 多个数据库名称] [表1,表2] > sql脚本名称 | gzip 压缩文件.gz
选项说明:--no-data 仅仅备份数据库结构,不备份数据
--[database | databases ] 本分单个或多个数据库
--all-databases 备份所有数据库
当然导出文件只是第一步,当然需要将脚本文件上传到新的服务器上(这里就不对上传方式进行介绍了,scp等等),然后将脚本重新执行即可迁移新的数据库。这一个过程完全可以写一个Shell脚本放到旧的服务器上进行执行。比如导出所有的数据库,不包括表结构,代码如下,近期会改造该代码,需要搭建MySQL集群,两个节点:
mysqldump --no-data --all-databases -uroot -proot > all_databases.sql
Tips : 有一个前提,您安装的mysql必须配置到环境变量中。
2、当数据量超过10G的迁移方式
当数据量较大的时候,不能再使用mysqldump,因为此时会产生锁,导致时间较长,可以选择xtrabackup、直接拷贝数据目录(前提是容许停止服务),此时数据传输可以使用rsync进行传输数据文件。
04
参考
mysqldump https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html
05
展望
海量数据迁移还没有场景得以应用,后期会在公司研究高并发(百万级QPS)一定会接触到的,后期会从数据库主从节点角度分析数据迁移,主要点如下:
1、主从分离下从节点的数据的备份与迁移
2、主从分离下任意节点数据的备份与迁移
......
喜欢本主的打个赏吧