MySQL 指定表导出 CSV

更新日期: 2025-11-02 阅读次数: 40 字数: 688 分类: MySQL

需要将 MySQL 数据库中的某个表,导出成 CSV 文件格式。方便在 Excel 中查看和修改,然后再导入回数据库。 突然感觉智能表格才是应用的未来。。。因为大家还是习惯在 Excel 中查看和修改数据。

尝试了几种方法,最终发现还是 mysqldump 命令最方便。

mysqldump 导出 CSV 文件

sudo mysqldump -u username -p \
  --tab=/var/lib/mysql-files/ \
  --fields-terminated-by=',' \
  --fields-enclosed-by='"' \
  db_name table_name

--tab 参数是指定导出文件的目录,必须是 MySQL 服务器有权限写入的目录。

导出速度很快,50 万条记录,秒完成。大概 100MB 左右的文件大小。查看导出目录:

> sudo ls /var/lib/mysql-files/
table_name.sql  table_name.txt

会看到两个文件,其中的 txt 文件就是 CSV 格式的文件,可以直接改后缀名为 .csv。 sql 文件是表结构的定义,可以忽略。

为何要指定 /var/lib/mysql-files/ 目录

如果指定了其他目录,可能会报错:

mysqldump: Got error: 1290: The MySQL server is running with the --secure-file-priv option so it cannot execute this statement when executing 'SELECT INTO OUTFILE'

进入 MySQL 命令行,执行下面的命令,可以查看 secure_file_priv 的值:

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.01 sec)

看起来是为了安全起见,MySQL 限制只能在指定目录下读写文件。

要修改这个值,需要修改 MySQL 的配置文件 my.cnf,然后重启 MySQL 服务。 不想重启服务的话,就只能使用这个目录了。

方案二:SELECT ... INTO OUTFILE

也可以使用 SQL 语句导出 CSV 文件:

SELECT * FROM table_name
   INTO OUTFILE '/var/lib/mysql-files/table_name.csv'
   FIELDS TERMINATED BY ','
   ENCLOSED BY '"'
   LINES TERMINATED BY '\n';

同样需要指定 secure_file_priv 目录,否则会报上面同样的错误:

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

不靠谱方案:MySQL Workbench 导出 CSV

MySQL Workbench 中右键表名,选择 "Table Data Export Wizard"。也能将表导出成 CSV 文件。 但是这个导出功能,上面1秒完成的任务,导出1个小时也没执行完,而且界面卡死。

docker 环境下导出 CSV

如果 MySQL 是运行在 Docker 容器中,可以使用 docker exec 命令进入容器,然后执行上面的 mysqldump 命令。 或者使用一行命令:

docker compose exec mysql /usr/bin/mysqldump -u root --password=password --tab=/var/lib/mysql-files/ --fields-terminated-by=',' --fields-enclosed-by='"' db table

但是也有指定目录的限制。

关于作者 🌱

我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式