菜鸟科技网

数据库备份与恢复命令有哪些核心操作?

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

数据库备份与恢复命令有哪些核心操作?-图1
(图片来源网络,侵删)

数据库备份命令

数据库备份主要分为完整备份、增量备份和差异备份三种类型,不同数据库的实现方式有所差异。

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:

    数据库备份与恢复命令有哪些核心操作?-图2
    (图片来源网络,侵删)
    # 刷新binlog,生成新的日志文件
    mysqladmin -u [用户名] -p[密码] flush-logs
    # 复制binlog文件(如mysql-bin.000001)
    cp /var/lib/mysql/mysql-bin.000001 /backup/

PostgreSQL备份命令

PostgreSQL提供pg_dumppg_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显示进度。

    数据库备份与恢复命令有哪些核心操作?-图3
    (图片来源网络,侵删)

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)未完整备份或丢失导致,解决方法:

  1. 检查日志完整性:确认备份点之后的所有日志文件是否可用,例如MySQL可通过SHOW MASTER STATUS检查binlog位置,Oracle通过v$log视图检查日志状态。
  2. 补充日志文件:若日志文件部分丢失,尝试从归档日志或备用数据库中补充;若无法补充,则只能恢复到最近的完整备份点,并手动补充数据。
  3. 强制恢复(谨慎使用):部分数据库支持RESETLOGS选项(如Oracle)跳过未应用的日志,但可能导致数据丢失,需在业务低谷期操作并提前告知相关方。
    预防措施:启用归档日志、定期备份日志文件、配置日志轮转策略,避免日志覆盖或丢失。
分享:
扫描分享到社交APP
上一篇
下一篇