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

mysql迁移某个大数据的库(转)

作者: 不爱吃饭的小孩怎么办 | 来源:发表于2019-09-26 15:48 被阅读0次

    原文地址:https://www.jianshu.com/p/2aa75f444175

    前言
    现在有个迁移数据库的需求,需要将旧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等,将小文件进行导入,会大大提升导入速度

    如果库超级大,不如试试全库拷贝方案。见 https://www.jianshu.com/p/ec28f52a6ac1

    相关文章

      网友评论

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

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