概述
Linux服务器上有一个数据库表包含大于50亿条的记录,通过Navicat等数据迁移工具,将数据迁移到另一个服务器相同表中,总是执行一段时间后卡死,故选择先导出数据文件,再去另一个服务器导入该文件。
可以使用Navicat导出数据文件,也可以使用MySQL支持的命令导出数据文件。本文章介绍如何使用方案B导出。
方法
- 登录MySQL:
mysql -u test_user -p
输入密码
use test; #切换到目标数据库
- 导出数据文件:
csv 格式文件:
> select * from test_table into outfile='/home/test_table.csv' fields terminated by ',' lines terminated by '\n';
或sql格式文件:
> select * from test_table into outfile='/home/test_table.sql';
遇到的问题
- 执行导出数据文件命令,报错:The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
此问题需要修改MySQL配置文件:/etc/my.cnf
在文件最后加上一行:
secure_file_priv=''
然后重启MySQL:
service mysqld stop
service mysqld start
- 再次执行导出数据命令仍然报错:ERROR 1 (HY000): Can't create/write to file '/home/test_table.csv' (OS errno 13 - Permission denied)
原因是/home目录没有可写权限,MySQL无法写入。故新建/home/temp文件夹,然后修改改文件夹权限:
chmod 777 /home/temp
然后即可正常执行导出数据文件命令:
> select * from test_table into outfile='/home/temp/test_table.csv' fields terminated by ',' lines terminated by '\n';
或sql格式文件:
> select * from test_table into outfile='/home/temp/test_table.sql';