mysql迁移某个大数据的库

前言

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容