搭建完双主复制后,用navicat 导数据时发现超过150万的数据会出现导入丢失的情况。
经过分析,采用命令行方式导入
1、同步表结构
先建立备份数据库的表结构同源库一致。
2、导出表数据文件
2.1 首先确认数据文件路径
mysql> show variables like '%secure%';
如图所示,框住的便是导出的数据文件路径。
2.2执行导出数据脚本
mysql> select * into outfile '/var/lib/mysql-files/testdata.txt' fields terminated by ',' from tbab;
一千多万的数据不到7s的时间(跟表的字段数量有关系)
3.导入表数据
导入之前先检查目标表的表结构是否已经建好。(PS:最好是先把表的索引和外键先去除,不然会耗费时间)
mysql> load data infile '/var/lib/mysql-files/testdata.txt' into table tbab fields terminated by ',';
4.有可能出现的问题解决
一般会出现: The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
解决办法:
在my.ini 或 my.cnf 文件对secure_file_priv的值进行配置:
secure_file_priv为null 表示不允许导入导出 (5.7后为默认值)
secure_file_priv='指定文件路径',表示mysql的导入导出只能发生在指定的路径
secure_file_priv='' ,表示没有任何限制
修改完配置后对MySql进行重新启动生效。
结束语:数据迁移有很多种方式,适合业务需要的才是最好的。