美文网首页
mysql迁移某个大数据的库

mysql迁移某个大数据的库

作者: OrangeLoveMilan | 来源:发表于2019-05-20 16:23 被阅读0次

    前言

    现在有个迁移数据库的需求,需要将旧mysql中risk库迁移到新mysql里面,数据量在13个GB左右,如果采用导出sql再导入到新库的方法,可能对线上正在使用的数据库产生性能上的影响,所以这次迁移采用官网推荐的select_file的方法

    迁移方案

    1、将旧库中risk库的表结构导出,导入到新库中。
    2、将旧库中risk库的数据导出到txt中,然后将txt中的数据load到新库中

    迁移

    1、查看select_file功能有没有开启

    show global variables like 'secure_file_priv';

    [root@localhost][(none)]> show global variables like 'secure_file_priv';
    +------------------+--------+
    | Variable_name    | Value  |
    +------------------+--------+
    | secure_file_priv | /data/ |
    +------------------+--------+
    1 row in set (0.00 sec)
    

    这个是我开启后的,如果配置文件里配置是NULL,意思就是mysql数据into outfile不允许into到任何文件夹
    这里vim /etc/my.cnf

    [mysqld]
      secure_file_priv='/data'
    

    重启下mysql,这里我重启的是从库,并且这个/data文件夹内,mysql要有操作权限,这点很重要

    2、迁移表结构

    旧库上执行:
    /usr/local/mysql/bin/mysqldump --set-gtid-purged=off -uroot -p -S /tmp/mysql.sock --master-data=2 --single-transaction --databases risk >risk.sql
    在新库上执行:
    mysql -uroot -p <risk.sql

    3、迁移数据

    select into file是以表的数据进行导出的,所以表多的话,建议写成一个脚本,这里以test表为例子,进行迁移
    将test这张table的数据into到一个txt文件中。
    登录到数据库里面,选择risk库,执行
    select * from test into outfile '/data/risk/test.txt'

    将test.txt放到新库/data/risk目录下面,开始在新库里面导入
    oad data infile '/data/risk/test.txt' into table test

    速度大概1百万条数据,导入时间在2分钟左右

    4、遇到的坑

    如果某张表太大的话,比如一张表就有6个GB的数据,那么load的时候可能会报错:
    提示max_binlog_cache_size不够。
    这个时候,建议把这个表的数据进行切割,由于是txt格式的,数据都是按行来计算的,可以按行来切割
    切割语句:
    split -d -l 1000000 test.txt test
    然后将切割后的文件,test1、test2、test3等等,mv成test1.txt,test2.txt,test3.txt等,将小文件进行导入,会大大提升导入速度

    相关文章

      网友评论

          本文标题:mysql迁移某个大数据的库

          本文链接:https://www.haomeiwen.com/subject/apnkzqtx.html