在数据库管理工作中,导出数据是一项常见且重要的任务,无论是数据备份、迁移还是分析,都离不开对数据库数据的导出操作,相较于图形化界面工具,命令行操作具有高效、灵活、可自动化脚本化等优势,尤其适合处理大规模数据或需要批量操作的场景,本文将详细介绍如何使用命令行导出不同类型数据库(如MySQL、PostgreSQL、MongoDB等)的数据,涵盖基础命令、参数说明及实际应用场景。

MySQL数据库导出
MySQL是最常用的关系型数据库之一,其命令行导出工具主要是mysqldump。mysqldump功能强大,支持导出整个数据库、特定表或查询结果,并可选择多种格式(如SQL、CSV等)。
导出整个数据库
mysqldump -u [用户名] -p[密码] [数据库名] > [备份文件名].sql
- -u:指定MySQL用户名。
- -p:后跟密码(注意- -p和密码之间无空格,也可单独写- -p,执行后输入密码)。
- [数据库名]:要导出的数据库名称。
- >:输出重定向,将结果保存到文件中。
导出名为testdb的数据库到testdb_backup.sql:
mysqldump -u root -ptest123 testdb > testdb_backup.sql
导出特定表
mysqldump -u [用户名] -p[密码] [数据库名] [表名1] [表名2] > [备份文件名].sql
导出testdb中的users和orders表:
mysqldump -u root -ptest123 testdb users orders > tables_backup.sql
导出为CSV格式
mysql -u [用户名] -p[密码] -e "SELECT * FROM [表名] INTO OUTFILE '[文件路径].csv' FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n';" [数据库名]
- -e:执行SQL语句。
- INTO OUTFILE:指定输出文件路径(需确保MySQL有写入权限)。
- FIELDS TERMINATED BY:字段分隔符(默认为制表符,此处改为逗号)。
- ENCLOSED BY:字段包围符(如双引号,避免字段中包含分隔符时出错)。
- LINES TERMINATED BY:行终止符(默认为- \n)。
导出users表为CSV:

mysql -u root -ptest123 -e "SELECT * FROM users INTO OUTFILE '/tmp/users.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n';" testdb
导出结构或数据仅
- 仅导出结构:mysqldump -u [用户名] -p[密码] --no-data [数据库名] > [结构文件].sql 
- 仅导出数据:mysqldump -u [用户名] -p[密码] --no-create-info [数据库名] > [数据文件].sql 
PostgreSQL数据库导出
PostgreSQL常用的命令行导出工具是pg_dump和pg_dumpall。pg_dump用于导出单个数据库,pg_dumpall用于导出所有数据库(包括角色和表空间信息)。
导出单个数据库
pg_dump -U [用户名] -h [主机名] -p [端口] -F [格式] [数据库名] > [备份文件名]
- -U:指定PostgreSQL用户名。
- -h:数据库主机名(默认为localhost)。
- -p:端口号(默认为5432)。
- -F:输出格式,可选- c(自定义归档)、- p(纯SQL脚本,默认)、- d(目录格式)等。
导出testdb为SQL脚本:
pg_dump -U postgres -h localhost -p 5432 testdb > testdb_backup.sql
导出为自定义归档格式(适合快速备份和恢复)
pg_dump -U [用户名] -Fc [数据库名] > [备份文件].dump
导出所有数据库
pg_dumpall -U [用户名] > [全量备份文件].sql
MongoDB数据库导出
MongoDB是NoSQL数据库,其导出工具为mongoexport,支持导出JSON、CSV等格式。
导出集合为JSON
mongoexport --host [主机名]:[端口] -u [用户名] -p [密码] --authenticationDatabase [认证数据库] -d [数据库名] -c [集合名] --out [输出文件].json
- --host:MongoDB主机和端口(默认为localhost:27017)。
- -u/-p:用户名和密码(如无认证可省略)。
- --authenticationDatabase:认证数据库(通常为- admin)。
- -d:数据库名。
- -c:集合名(相当于关系型数据库的表)。
- --out:输出文件路径。
导出testdb中的users集合:

mongoexport --host localhost:27017 -u admin -p admin123 --authenticationDatabase admin -d testdb -c users --out users.json
导出为CSV格式
mongoexport --host [主机名]:[端口] -u [用户名] -p [密码] -d [数据库名] -c [集合名] --type=csv --fields [字段名1],[字段名2] --out [输出文件].csv
- --type=csv:指定输出格式为CSV。
- --fields:指定导出的字段(多个字段用逗号分隔)。
导出users集合的name和email字段:
mongoexport --host localhost:27017 -u admin -p admin123 -d testdb -c users --type=csv --fields name,email --out users.csv
导出数据时的注意事项
- 权限控制:确保执行导出命令的用户具有足够的权限(如SELECT权限、FILE权限等)。
- 文件路径:导出文件路径需存在且用户有写入权限,避免因路径错误导致导出失败。
- 数据一致性:对于大型数据库,导出过程中应尽量减少数据写入操作,避免导出的数据与实际数据不一致,可通过锁定表(MySQL的--lock-tables参数)或使用--single-transaction(InnoDB引擎)确保一致性。
- 压缩备份:为节省存储空间,可结合压缩工具(如gzip)使用:mysqldump -u root -ptest123 testdb | gzip > testdb_backup.sql.gz 
相关问答FAQs
问题1:导出MySQL数据库时,如何避免因表锁定导致业务中断?
解答:对于InnoDB引擎的表,可以使用--single-transaction参数,该参数通过开启事务实现一致性读,避免锁定表。  
mysqldump -u root -ptest123 --single-transaction testdb > testdb_backup.sql
注意:该参数仅适用于InnoDB,且导出过程中事务会持续占用资源,需确保磁盘空间足够。
问题2:MongoDB导出数据时,如何过滤条件导出特定文档?
解答:使用mongoexport的--query参数,传入JSON格式的查询条件,导出users集合中age大于25的文档:  
mongoexport --host localhost:27017 -u admin -p admin123 -d testdb -c users --query '{"age": {"$gt": 25}}' --out users_filtered.json
--query参数支持MongoDB的查询操作符,如$gt(大于)、$lt(小于)、$in(包含)等,可实现灵活的数据过滤。

 
                             
         
         
         
         
         
         
         
         
         
        