在Linux服务器管理中,通过命令行导出数据库是一项基础且至关重要的技能,它不仅适用于没有图形界面的远程服务器,更是实现自动化备份、数据迁移和脚本化运维的核心手段,本文将详细介绍如何在Linux命令行中导出主流数据库(如MySQL/MariaDB和PostgreSQL),并提供一些实用的技巧。

使用 mysqldump 导出 MySQL/MariaDB 数据库
mysqldump 是MySQL和MariaDB官方提供的数据库备份工具,它可以将数据库或数据表导出为SQL脚本文件,便于后续恢复或迁移。
基本语法
其基本命令结构非常直观:
mysqldump -u [用户名] -p [数据库名] > [导出文件名].sql
-u [用户名]:指定连接数据库的用户名。-p:表示需要输入密码,执行命令后,系统会提示你输入密码,这是最安全的方式,切勿在-p后直接跟密码。[数据库名]:你想要导出的目标数据库的名称。>:重定向符号,将命令输出的内容(即SQL语句)写入到指定的文件中。
示例
假设我们要导出名为 my_app_db 的数据库,使用 root 用户,并保存为 backup_20251027.sql 文件:
mysqldump -u root -p my_app_db > backup_20251027.sql
执行后,输入密码,当前目录下就会生成一个包含所有建表语句和INSERT数据的SQL文件。
常用高级选项
| 选项 | 描述 |
|---|---|
--all-databases | 导出服务器上的所有数据库。 |
--databases db1 db2 | 同时导出多个指定的数据库。 |
--no-data | 只导出数据库结构(建表语句),不导出数据。 |
使用 pg_dump 导出 PostgreSQL 数据库
对于PostgreSQL数据库,其官方的导出工具是 pg_dump,它功能强大,支持多种导出格式。
基本语法
pg_dump 的基本用法与 mysqldump 类似:

pg_dump -U [用户名] -h [主机名] -W [数据库名] > [导出文件名].sql
-U [用户名]:指定连接数据库的用户。-h [主机名]:指定数据库服务器地址,如localhost或IP地址,如果是在本机操作,可以省略。-W:强制提示输入密码。[数据库名]:要导出的数据库名称。
示例
导出名为 my_pg_app 的数据库,使用 postgres 用户,保存为 pg_backup_20251027.sql:
pg_dump -U postgres -h localhost -W my_pg_app > pg_backup_20251027.sql
输入密码后,即可完成导出,PostgreSQL还支持自定义格式(-Fc),这是一种压缩且可定制的二进制格式,推荐用于生产环境备份。
pg_dump -U postgres -h localhost -W -Fc my_pg_app > pg_backup_20251027.dump
最佳实践与技巧
即时压缩:数据库文件通常很大,导出时直接进行压缩可以节省大量磁盘空间和网络传输时间。
# MySQL/MariaDB 导出并压缩为 .gz 文件 mysqldump -u root -p my_app_db | gzip > backup_20251027.sql.gz # PostgreSQL 导出并压缩 pg_dump -U postgres -W my_app_db | gzip > pg_backup_20251027.sql.gz
定时备份:结合
cron定时任务,可以实现数据库的自动化每日备份,编辑crontab -e,添加一行如下内容,即可在每天凌晨2点执行备份脚本。0 2 * * * /usr/bin/mysqldump -u root -p'your_password' --all-databases | gzip > /path/to/backups/all_db_$(date +%Y%m%d).sql.gz
注意:在
cron中使用密码时,需权衡安全风险,建议使用配置文件(如~/.my.cnf)来管理凭据。
相关问答 (FAQs)
问题1:导出的 .sql 文件和压缩后的文件(如 .sql.gz)有什么区别?我该如何选择?

解答: .sql 文件是纯文本格式,包含了所有SQL语句,可以直接用文本编辑器查看和修改,但文件体积最大。.sql.gz 是经过 gzip 压缩后的文件,体积远小于 .sql 文件,便于存储和传输,但查看前需要先解压(如使用 gunzip 或 zcat 命令),如果你的目的是长期备份或通过网络传输,强烈推荐使用压缩格式,如果只是临时导出用于检查或小规模修改,可以使用 .sql 格式。
问题2:我只想导出数据库中的一个表,或者导出时不要数据,只要结构,该怎么做?
解答: 这两种需求都可以通过添加特定参数实现。
- 只导出单个表:
- MySQL/MariaDB:
mysqldump -u user -p db_name table_name > table.sql - PostgreSQL:
pg_dump -U user -d db_name -t table_name > table.sql
- MySQL/MariaDB:
- 只导出结构(不导出数据):
- MySQL/MariaDB: 在命令后添加
--no-data参数,如mysqldump -u user -p --no-data db_name > structure.sql - PostgreSQL: 在命令后添加
-s(或--schema-only) 参数,如pg_dump -U user -d db_name -s > structure.sql
- MySQL/MariaDB: 在命令后添加
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复