SQL 备份数据库命令是数据库管理中至关重要的操作,它能够确保数据在发生硬件故障、软件错误、人为误操作或灾难事件时能够得以恢复,保障业务的连续性和数据的安全性,不同的数据库管理系统(DBMS)如 MySQL、SQL Server、PostgreSQL、Oracle 等,其备份数据库的命令和语法各有差异,但核心目标一致——创建数据库的副本或特定数据对象的备份文件,以下将详细介绍几种主流数据库的备份命令,涵盖全量备份、增量备份、差异备份等常见场景,并辅以实际示例和注意事项。

MySQL 数据库备份命令
MySQL 提供了多种备份工具,mysqldump 是最常用且功能强大的命令行工具,适用于逻辑备份(即 SQL 语句导出),对于物理备份(文件系统级别的备份),可使用 mysqlbackup(需商业版支持)或第三方工具如 Percona XtraBackup。
使用 mysqldump 进行全量备份
mysqldump 的基本语法为:
mysqldump -u [用户名] -p[密码] [数据库名] > [备份文件路径].sql
-
示例:备份
testdb数据库到/backup/testdb_backup.sql:mysqldump -u root -ptest123 testdb > /backup/testdb_backup.sql
若不希望在命令行中暴露密码,可省略
-p后的密码,执行后交互式输入密码。
(图片来源网络,侵删) -
备份多个数据库:使用
--databases参数,多个数据库名以空格分隔:mysqldump -u root -p --databases db1 db2 > /backup/multi_db_backup.sql
-
备份所有数据库:使用
--all-databases参数:mysqldump -u root -p --all-databases > /backup/all_db_backup.sql
压缩备份(节省存储空间)
通过管道将 mysqldump 的输出压缩为 .gz 文件:
mysqldump -u root -p testdb | gzip > /backup/testdb_backup.sql.gz
仅备份表结构(不包含数据)
使用 --no-data 参数:

mysqldump -u root -p --no-data testdb > /backup/testdb_structure.sql
仅备份数据(不包含表结构)
使用 --no-create-info 参数:
mysqldump -u root -p --no-create-info testdb > /backup/testdb_data.sql
MySQL 增量备份(需启用二进制日志)
MySQL 的增量备份依赖于二进制日志(binlog),需在配置文件(my.cnf 或 my.ini)中启用:
[mysqld] log-bin=mysql-bin binlog-format=ROW
- 步骤:
- 全量备份(如前述
mysqldump命令); - 记录备份时的二进制日志文件名和位置:
mysql -u root -p -e "SHOW MASTER STATUS;"
输出示例:
mysql-bin.000003 123(文件名mysql-bin.000003,位置123); - 恢复时,先恢复全量备份,再应用二进制日志(从位置
123开始)到最新数据。
- 全量备份(如前述
SQL Server 数据库备份命令
SQL Server 使用 BACKUP DATABASE 语句进行备份,支持全量备份、差异备份和事务日志备份,备份文件通常为 .bak 或 .trn 格式。
全量备份(完整数据库备份)
BACKUP DATABASE [数据库名]
TO DISK = '[备份文件路径].bak'
WITH NAME = '全量备份名称',
DESCRIPTION = '备份描述',
COMPRESSION, -- 启用压缩(需SQL Server 2008及以上版本)
STATS = 10, -- 每完成10%的备份输出进度
CHECKSUM; -- 验证备份校验和
- 示例:备份
SalesDB到D:\Backup\SalesDB_Full.bak:BACKUP DATABASE SalesDB TO DISK = 'D:\Backup\SalesDB_Full.bak' WITH NAME = 'SalesDB Full Backup', COMPRESSION, STATS = 10;
差异备份(备份自上次全量备份以来的更改)
需先执行一次全量备份,再执行差异备份:
BACKUP DATABASE SalesDB
TO DISK = 'D:\Backup\SalesDB_Diff.bak'
WITH DIFFERENTIAL,
NAME = 'SalesDB Differential Backup';
事务日志备份(增量备份的一种,需启用“完整恢复模式”或“大容量日志恢复模式”)
BACKUP LOG [数据库名] TO DISK = '[备份文件路径].trn' WITH NAME = '事务日志备份名称';
- 示例:备份
SalesDB的事务日志:BACKUP LOG SalesDB TO DISK = 'D:\Backup\SalesDB_Log.trn' WITH NAME = 'SalesDB Log Backup';
备份到 Azure Blob 存储(SQL Server 2012及以上版本)
需先创建凭证(指向存储账户的密钥),再执行备份:
-- 创建凭证
CREATE CREDENTIAL [AzureBackupCredential]
WITH IDENTITY = 'StorageAccountName',
SECRET = 'StorageAccountKey';
-- 备份到Azure
BACKUP DATABASE SalesDB
TO URL = 'https://StorageAccountName.blob.core.windows.net/backup/SalesDB_Full.bak'
WITH CREDENTIAL = 'AzureBackupCredential',
COMPRESSION,
NAME = 'Azure Full Backup';
PostgreSQL 数据库备份命令
PostgreSQL 主要使用 pg_dump 进行逻辑备份,pg_basebackup 进行物理备份(流复制备份)。
使用 pg_dump 进行全量备份
基本语法:
pg_dump -U [用户名] -d [数据库名] -f [备份文件路径].sql
-
示例:备份
testdb数据库到/backup/testdb_backup.sql:pg_dump -U postgres -d testdb -f /backup/testdb_backup.sql
执行后会提示输入密码(需在
pg_hba.conf中配置信任或密码认证)。 -
自定义格式备份(推荐):支持压缩、并行备份,恢复时需使用
pg_restore:pg_dump -U postgres -d testdb -Fc -f /backup/testdb_backup.dump
-
备份表空间:使用
-l参数指定表空间,或通过--tablespace-mapping映射表空间路径:pg_dump -U postgres -d testdb --tablespace-mapping=ts_1=/new/path/ts_1 -f /backup/testdb_backup.sql
使用 pg_basebackup 进行物理备份(适用于流复制或灾备)
pg_basebackup -h [主机名] -p [端口] -U [复制用户] -D [备份目录] -Fp -z -P
- 参数说明:
-h:数据库服务器主机名(默认本地);-p:端口号(默认5432);-U:具有REPLICATION权限的用户;-D:备份文件存储目录;-Fp:输出为纯文件格式(默认);-z:启用压缩;-P:显示进度。
PostgreSQL 增量备份
PostgreSQL 原生不支持增量备份,但可通过 pg_dumpall 备份所有数据库、角色和权限,或使用第三方工具如 barman 实现增量备份。
Oracle 数据库备份命令
Oracle 提供多种备份工具,包括 expdp(数据泵导出)、rman(恢复管理器,物理备份)等。
使用 expdp 进行逻辑备份
需先创建目录对象(指向服务器上的备份路径):
-- 创建目录(需SYSDBA权限) CREATE DIRECTORY expdp_dir AS '/backup/'; -- 授予用户目录权限 GRANT READ, WRITE ON DIRECTORY expdp_dir TO scott;
-
全量导出:
expdp scott/tiger@orcl DIRECTORY=expdp_dir DUMPFILE=full_exp.dmp FULL=YES
-
按用户导出:
expdp scott/tiger@orcl DIRECTORY=expdp_dir DUMPFILE=user_exp.dmp SCHEMAS=scott
-
按表空间导出:
expdp system/oracle@orcl DIRECTORY=expdp_dir DUMPFILE=ts_exp.dmp TABLESPACES=users,example
使用 RMAN 进行物理备份(推荐)
rman target / # 连接到本地数据库
-
全量备份(备份整个数据库):
RMAN> BACKUP DATABASE PLUS ARCHIVELOG; -- 备份数据库和归档日志
-
增量备份:
RMAN> BACKUP INCREMENTAL LEVEL 0 DATABASE; -- 0级增量备份(相当于全量) RMAN> BACKUP INCREMENTAL LEVEL 1 DATABASE; -- 1级增量备份(备份自上次0级或1级备份以来的变化)
-
备份控制文件:
RMAN> BACKUP CURRENT CONTROLFILE TO '/backup/controlfile.bak';
-
备份到磁带或云存储:需配置
CONFIGURE CHANNEL,RMAN> CONFIGURE CHANNEL DEVICE TYPE S3 PARMS 'ACCESS_KEY=xxx SECRET_KEY=xxx BUCKET_NAME=mybucket'; RMAN> BACKUP DATABASE TO 'db_backup.bak';
备份命令的通用注意事项
- 权限要求:执行备份的用户需具备足够的权限,如 MySQL 的
SELECT、LOCK TABLES,SQL Server 的CONTROL权限,PostgreSQL 的CONNECT、SELECT权限等。 - 备份频率:根据数据更新频率确定,高频更新的数据库需增加备份频率(如每日全量+每小时增量)。
- 备份验证:定期测试备份文件的可用性,可通过恢复命令(如 MySQL 的
mysql -u root -p testdb < backup.sql)验证备份完整性。 - 安全存储:备份文件需存储在与数据库服务器不同的物理位置,避免单点故障;敏感数据备份需加密(如 MySQL 的
--encrypt参数、SQL Server 的TDE加密)。 - 备份脚本自动化:通过
cron(Linux)或任务计划程序(Windows)定期执行备份脚本,避免人工遗忘。
相关问答FAQs
问题1:如何选择合适的数据库备份工具?
解答:选择备份工具需考虑以下因素:
- 数据库类型:MySQL 优先选
mysqldump或Percona XtraBackup(物理备份),SQL Server 选BACKUP DATABASE或SQL Server Management Studio (SSMS)图形化工具,PostgreSQL 选pg_dump或pg_basebackup,Oracle 选expdp或RMAN。 - 备份类型:逻辑备份(
mysqldump、expdp)可读性强,适合数据迁移或小数据量;物理备份(pg_basebackup、RMAN)恢复速度快,适合大数据量或灾备场景。 - 性能影响:逻辑备份可能锁表(如
mysqldump默认锁定表),生产环境建议使用支持热备份的工具(如Percona XtraBackup、RMAN)。 - 成本:开源工具(
mysqldump、pg_dump)免费,商业工具(如 Oracle RMAN 部分功能、SQL Server 企业版)需付费,但功能更强大(如压缩、加密、并行备份)。
问题2:数据库备份失败时如何排查?
解答:备份失败常见原因及排查步骤如下:
- 权限不足:检查备份用户是否具备所需权限(如 MySQL 的
SHOW DATABASES、SQL Server 的VIEW DEFINITION),可通过数据库日志(如 MySQL 的error.log、SQL Server 的ERRORLOG)确认错误信息。 - 磁盘空间不足:检查备份路径所在磁盘的剩余空间,可通过
df -h(Linux)或wmic logicaldisk get size,freespace,caption(Windows)查看。 - 网络问题:若备份到远程存储(如 Azure Blob、S3),检查网络连通性(如
ping、telnet)和存储账户密钥是否正确。 - 数据库状态异常:如数据库处于
RESTORING、RECOVERING状态,或存在未提交的长事务,可能导致备份失败,可通过数据库管理工具查看当前状态,并终止异常事务。 - 工具版本兼容性:如使用旧版
mysqldump备份新版 MySQL 数据库,可能因语法不兼容失败,需升级工具版本。 - 配置错误:如 PostgreSQL 未配置
pg_hba.conf导致用户无法登录,或 Oracle 未创建备份目录对象,需检查相关配置文件。
通过以上步骤逐一排查,可定位备份失败的具体原因并解决。
