数据库备份全解析,包含大部分流行数据库国产数据库操作全解析!

一、备份核心概念(速览)
开始之前,快速对齐几个术语,确保后面阅读无障碍:
| 概念 | 大白话解释 |
|---|---|
| 逻辑备份 | 把表结构和数据转成SQL语句或专用文件,可读可编辑,慢但灵活 |
| 物理备份 | 直接拷贝数据库的数据文件,速度快,适合大库 |
| 全量备份 | 某一时刻的完整副本 |
| 增量备份 | 只备份自上一次备份以来变化过的数据块 |
| 差异备份 | 只备份自上一次全量备份以来变化的数据 |
| 归档日志 | 数据库会把每次修改记录写进这些日志,物理热备和增量恢复的基石 |
| RPO/RTO | 能容忍丢失多少数据/能接受多长时间恢复业务 |
生产铁律:只要用物理热备或增量备份,必须先打开数据库的"归档模式",否则备份必定失败。
二、主流及国产数据库备份实战
下面我们逐库展开,每个数据库独立一节,让你随时查阅。
1. MySQL
MySQL的备份工具分社区版和企业版,这里只讲最通用、生产验证过的两种:mysqldump(逻辑) 和 Percona XtraBackup(物理)。
1.1 逻辑备份 -- mysqldump
全量导出单个数据库
bash
mysqldump -u root -p'密码' --databases mydb --single-transaction --routines --triggers --events > /backup/mydb_full_$(date +%Y%m%d).sql
参数说明:
--databases:指定导出一个或多个库--single-transaction:对于InnoDB,导出过程中不锁表,保证数据一致性--routines:导出存储过程和函数--triggers:导出触发器--events:导出事件调度器
导出全部数据库
bash
mysqldump -u root -p'密码' --all-databases --single-transaction --routines --triggers --events > /backup/all_db_$(date +%Y%m%d).sql
仅导出表结构
bash
mysqldump -u root -p'密码' --no-data mydb > /backup/mydb_schema.sql
1.2 物理全量备份 -- XtraBackup
前提 :已安装 percona-xtrabackup。
bash
xtrabackup --backup --user=root --password='密码' --target-dir=/backup/base_$(date +%Y%m%d) --parallel=4
参数:
--target-dir:备份存放目录--parallel=4:并行线程数,按CPU核数调整
准备(应用日志):备份完必须执行这一步才能用于恢复
bash
xtrabackup --prepare --target-dir=/backup/base_20250625
1.3 增量备份 -- XtraBackup
先做一次全量:
bash
xtrabackup --backup --user=root --password='密码' --target-dir=/backup/base --parallel=4
第一次增量(基于全量):
bash
xtrabackup --backup --user=root --password='密码' --target-dir=/backup/inc1 \
--incremental-basedir=/backup/base --parallel=4
第二次增量(基于上一次增量):
bash
xtrabackup --backup --user=root --password='密码' --target-dir=/backup/inc2 \
--incremental-basedir=/backup/inc1 --parallel=4
恢复时,按顺序准备:
bash
# 先准备全量
xtrabackup --prepare --apply-log-only --target-dir=/backup/base
# 合并增量1
xtrabackup --prepare --apply-log-only --target-dir=/backup/base --incremental-dir=/backup/inc1
# 合并增量2,最后一次不加 --apply-log-only
xtrabackup --prepare --target-dir=/backup/base --incremental-dir=/backup/inc2
最后将 /backup/base 目录拷回数据目录,启动MySQL即可。
1.4 恢复验证
逻辑备份验证:在测试库导入
bash
mysql -u root -p'密码' testdb < /backup/mydb_full_20250625.sql
检查表数量、抽样数据。
物理备份验证 :恢复到一个空闲MySQL实例,启动后执行 CHECKSUM TABLE 或跑业务SQL验证。
2. PostgreSQL
PostgreSQL生态的标准工具组合:pg_dump(逻辑) + pg_basebackup(物理全量) + pg_probackup(全量增量)。
2.1 逻辑备份 -- pg_dump
单库导出
bash
pg_dump -U postgres -d mydb -F c -f /backup/mydb_$(date +%Y%m%d).dump
-F c:自定义格式,支持并行恢复,比纯SQL体积小- 如果希望导出为SQL文本,换成
-F p
仅导出结构
bash
pg_dump -U postgres -d mydb -s -f /backup/mydb_schema.sql
全部数据库 (用 pg_dumpall)
bash
pg_dumpall -U postgres -f /backup/all_db.sql
2.2 物理全量备份 -- pg_basebackup
要求 :wal_level = replica 且已配置归档(或至少允许流复制连接)。
bash
pg_basebackup -U postgres -D /backup/base_$(date +%Y%m%d) -Ft -z -P -Xs
-D:目标目录-Ft:tar打包-z:压缩-P:显示进度-Xs:使用流复制方式获取WAL,确保备份一致性
2.3 全量+增量备份 -- pg_probackup
初始化备份目录
bash
pg_probackup init -B /backup/probackup
pg_probackup add-instance -B /backup/probackup --instance=prod -D /var/lib/postgresql/data
全量备份
bash
pg_probackup backup -B /backup/probackup --instance=prod -b FULL \
-U postgres -d postgres --stream --temp-slot --progress
-b FULL:全量--stream:流式传输WAL--temp-slot:创建临时复制槽,防止所需WAL被清除
增量备份(基于页级追踪)
bash
pg_probackup backup -B /backup/probackup --instance=prod -b PAGE \
-U postgres -d postgres --stream --temp-slot --progress
2.4 恢复与验证
恢复全量
bash
# 解压后直接拷贝至数据目录,或使用 pg_probackup restore
pg_probackup restore -B /backup/probackup --instance=prod -D /var/lib/postgresql/data_new \
--recovery-target-action=promote
验证备份有效性
bash
pg_probackup validate -B /backup/probackup --instance=prod -i 备份ID
还可以通过 --recovery-target 进行时间点恢复测试。
3. Oracle
Oracle主推 RMAN 做物理备份,Data Pump(expdp/impdp) 做逻辑备份。
3.1 逻辑备份 -- expdp
bash
expdp system/密码@PDB1 DIRECTORY=DPUMP_DIR DUMPFILE=mydb_%U.dmp LOGFILE=exp_mydb.log \
FULL=Y PARALLEL=4
DIRECTORY:Oracle目录对象,需提前创建FULL=Y:全库导出PARALLEL=4:4个并行通道
按用户导出
bash
expdp system/密码@PDB1 DIRECTORY=DPUMP_DIR SCHEMAS=scott DUMPFILE=scott.dmp
3.2 物理全量备份 -- RMAN
sql
RMAN> BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;
PLUS ARCHIVELOG:同时备份归档日志DELETE INPUT:备份成功后删除已备份的归档,释放空间
3.3 增量备份 -- RMAN
0级全量(相当于增量基线)
sql
RMAN> BACKUP INCREMENTAL LEVEL 0 DATABASE;
1级增量
sql
RMAN> BACKUP INCREMENTAL LEVEL 1 DATABASE;
差异增量(默认) :只备份自上次任意级别备份以来变化的块。
累积增量 :加 CUMULATIVE 则备份自上次0级以来所有变化。
3.4 备份验证与恢复测试
验证备份集完整性
sql
RMAN> VALIDATE BACKUPSET 备份集号;
RMAN> RESTORE DATABASE VALIDATE; -- 完全模拟恢复过程,但不实际写数据
恢复演练到新位置
sql
RMAN> SET NEWNAME FOR DATABASE TO '/newpath/%b';
RMAN> RESTORE DATABASE;
RMAN> SWITCH DATAFILE ALL;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN RESETLOGS;
下面进入国产数据库,操作方法很多和以上三大主流库一脉相承。
4. 达梦数据库 DM8
达梦的逻辑备份用 dexp ,物理备份用 DMRMAN (命令行工具)或 SQL 中的 BACKUP 语句。生产环境推荐 DMRMAN。
4.1 逻辑备份 -- dexp
bash
./dexp USERID=SYSDBA/SYSDBA123@localhost:5236 FILE=/backup/dm_full_$(date +%Y%m%d).dmp LOG=exp.log FULL=Y
USERID:用户名/密码@主机:端口FILE:输出文件FULL=Y:全库导出- 可按用户导出:
OWNER=用户名;按表:TABLES=表名
4.2 物理全量备份 -- DMRMAN
前置条件 :数据库已开启归档模式(ARCH_MODE=1),否则只能做冷备。
进入 DMRMAN 工具:
bash
./dmrman
全量备份
sql
RMAN> BACKUP DATABASE '/dm8/data/DAMENG/dm.ini' FULL BACKUPSET '/dm8/backup/full_250625';
4.3 增量备份 -- DMRMAN
增量备份
sql
RMAN> BACKUP DATABASE '/dm8/data/DAMENG/dm.ini' INCREMENT BACKUPSET '/dm8/backup/inc1_250625';
增量备份自动基于上次全量或增量产生差异备份(达梦称之为累计增量,只备份自上次全量后变化的页)。如果需要纯粹的差异增量(基于上次备份),可配合 BASE ON 语法。
4.4 恢复与验证
检查备份集
sql
RMAN> CHECK BACKUPSET '/dm8/backup/full_250625';
恢复数据库(以全量+增量为例)
sql
RMAN> RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/backup/full_250625';
RMAN> RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' WITH BACKUPSET '/dm8/backup/inc1_250625';
RMAN> RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
完成后重启数据库即可。
5. 人大金仓 KingbaseES
金仓高度兼容 PostgreSQL,工具命名为 sys_dump、sys_basebackup、sys_rman。
5.1 逻辑备份 -- sys_dump
bash
sys_dump -U system -d mydb -F c -f /backup/kingbase_mydb_$(date +%Y%m%d).dump
参数含义与 pg_dump 完全一致。
5.2 物理全量备份 -- sys_basebackup
前提:打开 WAL 归档(kingbase.conf 中 wal_level=replica,配置 archive_command)。
bash
sys_basebackup -U system -D /backup/base_$(date +%Y%m%d) -Ft -z -P -Xs
5.3 全量+增量备份 -- sys_rman
初始化
bash
sys_rman init -B /backup/sysrman
sys_rman add-instance -B /backup/sysrman -D /opt/kingbase/data
全量备份
bash
sys_rman backup -B /backup/sysrman -D /opt/kingbase/data -b full -U system --progress
增量备份(基于上次备份)
bash
sys_rman backup -B /backup/sysrman -D /opt/kingbase/data -b inc -U system --progress
5.4 恢复与验证
列出备份
bash
sys_rman show -B /backup/sysrman
验证备份
bash
sys_rman validate -B /backup/sysrman -i 备份ID
恢复到新目录
bash
sys_rman restore -B /backup/sysrman -D /data/kingbase_restore -i 备份ID
6. 华为 GaussDB (openGauss)
GaussDB 的命令行工具也带着PG的影子:gs_dump、gs_basebackup、gs_probackup。
6.1 逻辑备份 -- gs_dump
bash
gs_dump -U gaussdba -W 密码 -d mydb -F c -f /backup/gaussdb_mydb_$(date +%Y%m%d).dump
-F c 自定义格式;-F p 纯SQL。
6.2 物理全量备份 -- gs_basebackup
要求:wal_level = archive 并设置归档路径。
bash
gs_basebackup -D /backup/base_$(date +%Y%m%d) -U gaussdba -W -P -Ft -z -X stream
-X stream:使用流复制方式获取WAL
6.3 全量+增量备份 -- gs_probackup
初始化
bash
gs_probackup init -B /backup/probackup
gs_probackup add-instance -B /backup/probackup --instance=gaussdb -D /opt/gaussdb/data
全量
bash
gs_probackup backup -B /backup/probackup --instance=gaussdb -b FULL -U gaussdba -W --progress
增量(PTRACK页追踪)
bash
gs_probackup backup -B /backup/probackup --instance=gaussdb -b PTRACK -U gaussdba -W --progress
6.4 恢复与验证
恢复
bash
gs_probackup restore -B /backup/probackup --instance=gaussdb -D /opt/gaussdb_restore -i 备份ID
验证
bash
gs_probackup validate -B /backup/probackup --instance=gaussdb -i 备份ID
7. 南大通用 GBase 8a MPP
GBase 8a 底层兼容MySQL协议,逻辑备份可直接用 mysqldump,物理备份则使用集群自带的 gcrcman 工具。
7.1 逻辑备份(同MySQL)
bash
mysqldump -h 集群VIP -u gbase -p'密码' mydb --single-transaction > /backup/gbase_mydb.sql
7.2 物理全量备份 -- gcrcman
bash
gcrcman -u gbase -p'密码' --host=管理节点IP --port=5050
进入交互式命令行后:
sql
backup level 0;
或直接一条命令:
bash
gcrcman -u gbase -p'密码' --host=管理节点IP -e "backup level 0"
7.3 增量备份
sql
backup level 1;
GBase 8a 的 level 0 为全量,level 1 为增量(自动基于上次 level 0 或 level 1)。
7.4 恢复与验证
查看备份信息
sql
show backup;
恢复整个集群(在 gcrcman 中)
sql
recover 备份ID;
恢复过程会自动从全量和增量叠加。
验证 :恢复后建议跑 CHECKSUM TABLE 或自定义数据校验。
8. OceanBase 社区版
OceanBase 的备份依赖 日志归档,备份命令通过 obclient 执行 SQL,物理备份和增量自动调度。
8.1 逻辑备份(使用 ob-dumper)
OceanBase 官方导出工具 obdumper:
bash
obdumper --host 11.22.33.44 --port 2883 -u root -p '密码' \
--database mydb --output /backup/ob_mydb
参数与 mysqldump 类似,但支持分布式导出。
8.2 物理备份
设置备份目的端
sql
ALTER SYSTEM SET backup_dest = 'file:///backup/oceanbase';
启动备份任务
sql
ALTER SYSTEM BACKUP DATABASE;
OceanBase 会自动进行全量+增量合并,不需要手动区分。
查看备份进度
sql
SELECT * FROM oceanbase.CDB_OB_BACKUP_JOBS;
8.3 恢复与验证
恢复前需要停止集群并启动恢复
bash
obclient> ALTER SYSTEM RESTORE DATABASE TO 'file:///backup/oceanbase' UNTIL TIME='2025-06-25 02:00:00';
OceanBase 支持时间点恢复。
验证:一般通过恢复到一个新的集群进行业务验证。
9. TiDB
TiDB 使用 Dumpling 做逻辑导出,BR 做物理全量/增量备份。
9.1 逻辑备份 -- Dumpling
bash
dumpling -u root -P 4000 -h 127.0.0.1 -o /backup/tidb_dump_$(date +%Y%m%d) \
--filetype sql -t 8 --no-schema false
-t 8:8个并发线程--no-schema false:同时导出表结构
9.2 物理全量备份 -- BR
bash
br backup full --pd "127.0.0.1:2379" \
--storage "local:///backup/tidb_full" \
--ratelimit 128 --log-file /var/log/br_backup.log
--storage:备份存储路径,支持本地或S3--ratelimit:限速(MB/s),防止影响业务
9.3 增量备份 -- BR
bash
br backup full --pd "127.0.0.1:2379" \
--storage "local:///backup/tidb_inc" \
--lastbackupts $(cat /backup/last_backup_ts)
--lastbackupts 指定上次备份的时间戳,BR自动找出变化数据。
生产上常用脚本记录上次备份的 gc_safepoint:
bash
br backup full --pd "127.0.0.1:2379" \
--storage "local:///backup/tidb_$(date +%Y%m%d%H%M)" \
--send-credentials-to-tikv=true
9.4 恢复与验证
全量恢复
bash
br restore full --pd "127.0.0.1:2379" \
--storage "local:///backup/tidb_full" \
--ratelimit 128
验证备份文件
bash
br validate --storage "local:///backup/tidb_full"
BR 会快速检查备份集的完整性和校验和。
三、通用备份策略与自动化
无论什么数据库,生产环境都建议遵循以下框架:
3-2-1 原则
- 3 份数据拷贝(生产 + 两份备份)
- 2 种不同介质(本地磁盘 + 云对象存储/NAS)
- 1 份异地存放(防机房级灾难)
策略组合模板
| 场景 | 备份方式 | 频次 |
|---|---|---|
| 核心交易库 | 物理全量 + 物理增量 | 每周日全量,每日增量 |
| 分析查询库 | 逻辑全量 | 每日凌晨 |
| 归档库 | 全量逻辑 | 每月1次 |
| 所有库 | 二进制日志/归档日志自动备份 | 持续 |
自动化示例(以达梦为例的crontab)
bash
# 每周日凌晨2点全量备份
0 2 * * 0 /dm8/bin/dmrman CTLSTMT="BACKUP DATABASE '/dm8/data/DAMENG/dm.ini' FULL BACKUPSET '/backup/dm_full_$(date +\%Y\%m\%d)'"
# 周一至周六凌晨2点增量备份
0 2 * * 1-6 /dm8/bin/dmrman CTLSTMT="BACKUP DATABASE '/dm8/data/DAMENG/dm.ini' INCREMENT BACKUPSET '/backup/dm_inc_$(date +\%Y\%m\%d)'"
恢复演练不可少
每月至少一次在隔离环境完整跑通恢复流程,记录恢复耗时(RTO),并核实数据最新时间戳(RPO)。
四、十大避坑要点
- 归档没开:物理热备和增量备份直接报错,务必检查。
- 备份用户权限不足:逻辑导出需 SELECT、LOCK TABLES 等权限。
- 磁盘空间爆满 :配置自动清理策略,如
find /backup -mtime +7 -delete。 - 字符集不匹配 :导出导入务必加
--default-character-set=utf8mb4或相应设置。 - 大表锁定 :InnoDB 用
--single-transaction,Oracle 注意 undo 压力。 - 并行度乱调:并行数不要超过CPU核心数,避免拖垮生产库。
- 未校验备份集:备份完立即运行 validate 或 checksum。
- 跨大版本恢复:优先使用逻辑备份,物理备份很可能不兼容。
- 忘记备份恢复脚本本身:自动化脚本也要入仓库。
- 只有本地备份:务必再复制一份到异地,防火灾、勒索。
以上,就是目前主流及国产数据库备份操作的完全手册。你只需找到对应数据库的章节,复制命令、修改路径和密码,就能迅速搭起生产级备份体系。备份是业务的保险绳,现在就去跑通第一条命令吧。