数据库备份与恢复是数据库管理中至关重要的环节,旨在确保数据在硬件故障、软件错误、人为误操作或灾难事件发生时能够准确、完整地还原,保障业务连续性和数据安全性,不同数据库管理系统(如MySQL、PostgreSQL、Oracle、SQL Server等)提供了丰富的备份与恢复命令,以下将结合主流数据库场景,详细介绍常用命令及其使用方法。

数据库备份命令
数据库备份主要分为完整备份、增量备份和差异备份三种类型,不同数据库的实现方式有所差异。
MySQL备份命令
MySQL常用的备份工具是mysqldump
,它支持逻辑备份,可导出SQL语句或特定存储引擎的文件格式。
-
完整备份:导出整个数据库或所有数据库
# 备份单个数据库(包含创建数据库和表结构的语句) mysqldump -u [用户名] -p[密码] --databases [数据库名] > backup.sql # 备份所有数据库 mysqldump -u [用户名] -p[密码] --all-databases > all_backup.sql # 仅备份数据(不包含创建表语句) mysqldump -u [用户名] -p[密码] --no-create-info [数据库名] > data_only.sql
-
增量备份:MySQL原生不支持增量备份,需借助二进制日志(binlog)实现
首先开启binlog日志(在my.cnf
中配置log-bin=mysql-bin
),然后通过以下命令备份binlog:(图片来源网络,侵删)# 刷新binlog,生成新的日志文件 mysqladmin -u [用户名] -p[密码] flush-logs # 复制binlog文件(如mysql-bin.000001) cp /var/lib/mysql/mysql-bin.000001 /backup/
PostgreSQL备份命令
PostgreSQL提供pg_dump
和pg_dumpall
工具进行逻辑备份,同时支持物理备份(通过pg_basebackup
)。
-
完整逻辑备份:
# 备份单个数据库(默认输出为SQL脚本) pg_dump -U [用户名] -d [数据库名] -f backup.sql # 自定义格式备份(支持压缩和并行备份) pg_dump -U [用户名] -d [数据库名] -F c -f backup.dump
-
物理备份(流式备份):
# 创建基础备份(适用于主从复制搭建) pg_basebackup -U [用户名] -D /backup/data -Fp -z -P
参数说明:
-D
指定备份目录,-Fp
为输出格式(plain),-z
启用压缩,-P
显示进度。(图片来源网络,侵删)
Oracle备份命令
Oracle支持RMAN(Recovery Manager)和expdp
/impdp
(数据泵工具)进行备份。
-
RMAN物理备份:
-- 连接到RMAN rman target / nocatalog -- 执行完整备份(备份整个数据库到指定路径) RMAN> backup database format '/backup/full_%U.bak'; -- 备份控制文件和归档日志 RMAN> backup current controlfile; RMAN> backup archivelog all delete input;
-
数据泵逻辑备份:
# 导出整个数据库(expdp命令需在客户端执行) expdp [用户名]/[密码] DIRECTORY=dpump_dir DUMPFILE=full_db.dmp FULL=y
数据库恢复命令
恢复操作需根据备份类型(完整/增量/差异)和故障场景(全量丢失/部分损坏)选择对应命令。
MySQL恢复命令
-
从SQL脚本恢复:
# 恢复整个数据库(需提前创建数据库) mysql -u [用户名] -p[密码] [数据库名] < backup.sql # 恢复所有数据库(无需提前创建数据库) mysql -u [用户名] -p[密码] < all_backup.sql
-
基于binlog的增量恢复:
# 应用binlog日志(从备份点到故障点) mysqlbinlog --start-datetime="2023-10-01 00:00:00" --stop-datetime="2023-10-02 12:00:00" mysql-bin.000001 | mysql -u [用户名] -p[密码]
PostgreSQL恢复命令
- 从SQL脚本恢复:
# 使用psql执行备份脚本 psql -U [用户名] -d [数据库名] -f backup.sql
- 从自定义格式备份恢复:
# 使用pg_restore恢复(支持并行和选择性恢复) pg_restore -U [用户名] -d [数据库名] -v -j 4 backup.dump
Oracle恢复命令
- RMAN恢复:
RMAN> restore database; -- 恢复数据文件 RMAN> recover database; -- 应用归档日志和redo日志 RMAN> alter database open; -- 打开数据库
- 数据泵恢复:
# 导入整个数据库 impdp [用户名]/[密码] DIRECTORY=dpump_dir DUMPFILE=full_db.dmp FULL=y
备份恢复策略对比
以下表格总结不同数据库备份恢复场景的核心操作:
数据库 | 备份类型 | 常用命令/工具 | 恢复命令/工具 | 适用场景 |
---|---|---|---|---|
MySQL | 逻辑完整备份 | mysqldump --databases [DB] |
mysql [DB] < backup.sql |
小型数据库、结构迁移 |
MySQL | 增量备份 | mysqladmin flush-logs + 复制binlog |
mysqlbinlog [binlog] | mysql |
中大型数据库、减少备份耗时 |
PostgreSQL | 逻辑备份 | pg_dump -F c [DB] |
pg_restore -d [DB] backup.dump |
灵活恢复、跨版本迁移 |
PostgreSQL | 物理备份 | pg_basebackup -D /backup/data |
替换数据目录并恢复pg_wal |
高可用架构、快速全量恢复 |
Oracle | RMAN物理备份 | RMAN> backup database format '/backup/%U.bak' |
RMAN> restore database; recover database; |
企业级生产环境、高性能恢复 |
Oracle | 数据泵逻辑备份 | expdp [USER]/[PASS] FULL=y |
impdp [USER]/[PASS] FULL=y |
部分数据恢复、跨平台迁移 |
相关问答FAQs
Q1: 如何选择数据库备份策略(完整备份 vs 增量备份)?
A1: 选择备份策略需综合考虑数据量、恢复时间目标(RTO)和恢复点目标(RPO):
- 完整备份:适用于数据量小、RTO要求不高的场景,操作简单但备份文件大、耗时较长。
- 增量备份:适用于数据量大、RPO要求严格的场景(如金融系统),仅备份变化数据,节省存储空间和备份时间,但恢复时需先恢复完整备份再逐级应用增量备份,恢复流程较复杂。
建议采用“完整备份+增量备份”组合策略,例如每周日完整备份,其余时间每日增量备份,平衡备份效率与恢复速度。
Q2: 数据库恢复时遇到“日志序列不足”错误如何处理??
A2: 该错误通常是由于备份后产生的日志文件(如MySQL的binlog、PostgreSQL的wal日志、Oracle的redo log)未完整备份或丢失导致,解决方法:
- 检查日志完整性:确认备份点之后的所有日志文件是否可用,例如MySQL可通过
SHOW MASTER STATUS
检查binlog位置,Oracle通过v$log
视图检查日志状态。 - 补充日志文件:若日志文件部分丢失,尝试从归档日志或备用数据库中补充;若无法补充,则只能恢复到最近的完整备份点,并手动补充数据。
- 强制恢复(谨慎使用):部分数据库支持
RESETLOGS
选项(如Oracle)跳过未应用的日志,但可能导致数据丢失,需在业务低谷期操作并提前告知相关方。
预防措施:启用归档日志、定期备份日志文件、配置日志轮转策略,避免日志覆盖或丢失。