vlambda博客
学习文章列表

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、主从分离下任意节点数据的备份与迁移

       ......


喜欢本主的打个赏吧