菜鸟科技网

命令行如何导出数据库?

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

命令行如何导出数据库?-图1
(图片来源网络,侵删)

MySQL数据库导出

MySQL是最常用的关系型数据库之一,其命令行导出工具主要是mysqldumpmysqldump功能强大,支持导出整个数据库、特定表或查询结果,并可选择多种格式(如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中的usersorders表:

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:

命令行如何导出数据库?-图2
(图片来源网络,侵删)
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_dumppg_dumpallpg_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集合:

命令行如何导出数据库?-图3
(图片来源网络,侵删)
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集合的nameemail字段:

mongoexport --host localhost:27017 -u admin -p admin123 -d testdb -c users --type=csv --fields name,email --out users.csv

导出数据时的注意事项

  1. 权限控制:确保执行导出命令的用户具有足够的权限(如SELECT权限、FILE权限等)。
  2. 文件路径:导出文件路径需存在且用户有写入权限,避免因路径错误导致导出失败。
  3. 数据一致性:对于大型数据库,导出过程中应尽量减少数据写入操作,避免导出的数据与实际数据不一致,可通过锁定表(MySQL的--lock-tables参数)或使用--single-transaction(InnoDB引擎)确保一致性。
  4. 压缩备份:为节省存储空间,可结合压缩工具(如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(包含)等,可实现灵活的数据过滤。

分享:
扫描分享到社交APP
上一篇
下一篇