常见的MySQL数据导出有三种形式
SELECT ... INTO OUTFILE
SELECT * FROM person INTO OUTFILE '/var/lib/mysql-files/person.data';
-
LOAD DATA INFILE
LOAD DATA INFILE
是SELECT ... INTO OUTFILE
的逆操作
常用选项
-
FIELDS TERMINATED BY ','
:字段分隔符 -
ENCLOSED BY '"'
:包围字段的符号 -
LINES TERMINATED BY '\r\n'
:行分隔符
导出的数据格式非常灵活,但是只能导出在MySQL服务器上,而且是指定的目录(可能没有权限)
mysqldump
mysqldump -uroot -p blog > blog.sql
使用mysqldump需要锁表,有时候会因为安全规则,不允许使用。
mysqldump: Got error: 1044: "Access denied for user 'tenmao'@'192.168.58.100' to database 'tenmao_blog'" when using LOCK TABLES
常用选项
-
--where
条件过滤
mysqldump -uroot -p tenmao person --where="status=1" > tenmao.sql
-
--no-data
只导出表结构
mysqldump -uroot -p tenmao > tenmao_structure.sql
-
--single-transaction
不锁表
这个功能还是很实用的,只支持InnoDB引擎
mysql命令行
mysql -A tenmao_blog -h 192.168.58.200 -utenmao -p -e "select * from article where status=1" > articles.csv
这种方式特别灵活,缺点是不能像
SELECT ... INTO OUTFILE
指定分隔符,在一些column内容比较复杂的场景下(比如同时有'
,"
,\n
,\t
的时候),效果不太好
常见问题
-
The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
:因为只能导出到指定目录,该目录可以通过命令show global variables like '%secure_file_priv%';
查询得到
参考
- MySQL 数据导出
- mysql5.7导出数据提示--secure-file-priv选项问题的解决方法
- MySQL备份命令mysqldump参数说明与示例