能,但需满足secure_file_priv非空且导出路径在其限定目录内;导出文件不能已存在;需显式指定FIELDS和LINES格式;还原时LOAD DATA INFILE路径必须为服务端本地绝对路径且受同样权限限制。

SELECT INTO OUTFILE 能不能直接导出表数据?
能,但有硬性前提:secure_file_priv 必须非空,且你指定的导出路径必须落在它的值所限定的目录里。MySQL 默认关闭这个功能(设为 NULL 或空字符串),不是权限不够,而是根本没开出口。
常见错误现象:ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
- 先查配置:
SHOW VARIABLES LIKE 'secure_file_priv'; - 如果返回
NULL,说明完全禁用,SELECT INTO OUTFILE无法使用——改配置要重启 MySQL,生产环境慎动 - 如果返回一个具体路径(如
/var/lib/mysql-files/),导出文件只能写到那里,不能写到/tmp或家目录 - 导出目标文件不能已存在,否则报错:
ERROR 1086 (HY000): File 'xxx.csv' already exists
导出时字段分隔和换行怎么控制?
导出 CSV 或制表符分隔文件时,FIELDS 和 LINES 子句决定格式,不写默认是制表符 + 换行,但中文、逗号、换行符会直接破坏结构。
推荐显式声明:
SELECT * FROM users INTO OUTFILE '/var/lib/mysql-files/users.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
-
ENCLOSED BY '"'必加,否则含逗号或双引号的字段会错位 -
LINES TERMINATED BY '\n'比默认更明确;Windows 环境还原时可能需要'\r\n',但导出仍建议统一用\n - 不支持直接导出列名头(header),得自己拼
SELECT 'id','name',... UNION ALL SELECT id,name,...,但要注意类型隐式转换风险
还原时为什么 LOAD DATA INFILE 总失败?
还原不是“把文件拖回去”那么简单。LOAD DATA INFILE 同样受 secure_file_priv 限制,而且要求文件路径是 MySQL 服务端本地路径(不是你本机路径)。
常见错误现象:ERROR 29 (HY000): File '/home/me/users.csv' not found —— 因为 MySQL 在服务器上找这个路径,而它根本不存在于服务端。
- 确认文件已上传到
secure_file_priv指定目录下(如/var/lib/mysql-files/) - 还原命令必须用服务端可访问的绝对路径:
LOAD DATA INFILE '/var/lib/mysql-files/users.csv' INTO TABLE users ... - 字段顺序、类型、NULL 处理要严格匹配表结构;比如导出时没处理
NULL,默认写成空字符串,还原时可能被转成0或报错 - 如果表有自增主键,导出数据里又包含该列值,还原前记得加
SET SQL_MODE='NO_AUTO_VALUE_ON_ZERO';,否则可能跳过或冲突
比 SELECT INTO OUTFILE 更靠谱的单表导出方案?
真要稳定导出还原单表,mysqldump 是更少踩坑的选择,尤其当 secure_file_priv 不可控时。
mysqldump 不依赖服务端文件系统权限,导出的是带建表语句和 INSERT 的 SQL 文件,还原也只靠 mysql 命令执行:
mysqldump -u root -p mydb users > users.sql mysql -u root -p mydb < users.sql
- 加
--no-create-info只导数据,--skip-extended-insert每行一条 INSERT,方便调试 - 大表导出注意加
--single-transaction避免锁表(InnoDB) - 字符集问题常被忽略:导出时加
--default-character-set=utf8mb4,还原时也要确保 client 和 connection 字符集一致
真正麻烦的从来不是语法,而是路径权限、字符编码、NULL 表示、字段边界这些细节——它们不出错时看不见,一出就是整批数据错位或截断。


















