适用场景
数据库备份的关键不是"备份成功",而是"能恢复"。很多单位备份任务天天成功,真出事时发现备份文件损坏或恢复不上。
配置步骤(MySQL / MariaDB)
# 逻辑备份
docker exec db sh -c 'mysqldump -uroot -p --single-transaction --routines --triggers --events --all-databases' | gzip > /backup/mysql_$(date +%F).sql.gz
# 校验可恢复性(恢复到临时库)
zcat /backup/mysql_2026-09-26.sql.gz | head -30
# 账号与权限
mysql -e \「select user,host from mysql.user\」
mysql -e \「show grants for app@'10.0.0.%'\」
关键参数与建议
- 逻辑备份用于小库与迁移,物理备份(xtrabackup/存储快照)用于大库与快速恢复
- 每周至少一次全量 + 每日增量,备份文件异地保存一份
- 每月做一次恢复演练,记录恢复耗时(RTO)与数据丢失窗口(RPO)
- 数据库账号按应用分配,最小权限;禁止应用使用 root/sa
- 开启慢查询与审计日志,保留周期按合规要求
容易踩的坑
- 备份不加 --single-transaction,InnoDB 数据不一致
- 备份文件放本地同一块盘,磁盘坏一起丢
- 用 root 连数据库跑应用,一旦 SQL 注入直接全库失控
验证与巡检
ls -lh /backup/mysql_*.gz | tail -3
mysql -e \「select @@log_bin, @@slow_query_log\」
- 巡检:备份文件大小正常、恢复演练记录、账号权限最小化
小结
把"备份 + 恢复演练"写进运维清单:备份任务失败告警、恢复演练每季度一次、演练记录归档。这比任何优化都重要。
> 说明:文中命令为通用写法,不同型号/版本可能略有差异,落地前请对照设备实际版本的官方文档;带外管理与安全设备变更建议先在测试设备验证。