通过mysql的select data into outfile file.txt、load data infile file.txt into table的命令,以导入导出文件的形式完成了百万级数据的迁移。
迁移过程
在源数据库中导出数据文件
select * from user_base into outfile '/data/user.txt';
复制数据文件到目标服务器
zip user.zip /data/user.txt
scp user.zip root@ip:/data/
在目标数据库导入文件
unzip /data/user.zip
load data infile '/data/user.txt' into table user_base(id,appid,openid,unionid,created_at,nickname,gender,avatar_url);
按照这么几个步骤操作,几分钟内就完成了一个百万级数据表的跨服务器迁移工作。
注意项
mysql安全项设置
在mysql执行load data infile和into outfile命令都需要在mysql开启了secure_file_priv选项, 可以通过show global variables like '%secure%';查看mysql是否开启了此选项,默认值Null标识不允许执行导入导出命令。通过vim /etc/my.cnf修改mysql配置项,将secure_file_priv的值设置为空:
[mysqld] secure_file_priv=''