MariaDB/MySQL 逻辑备份到对象存储:mysqldump、压缩与保留策略
摘要:站点文章在库里,只拷文件不够。本文按 MariaDB / MySQL 官方文档,把逻辑备份(mariadb-dump / mysqldump)怎么做一致性导出、怎么压缩、怎么推到对象存储,以及生命周期保留怎么设写清楚。只放官网普通链接;查询日期 2026-10-27。
依据:MariaDB · Making Backups with mariadb-dump、mariadb-dump 参考、Restoring Data from Dump Files;MySQL 8.4 Reference Manual · mysqldump;rclone sync;阿里云 OSS《生命周期概述》《基于最后一次修改时间的生命周期规则》。查询日期:2026-10-27(北京时间)。只放官网普通链接(
affiliate_later);不写单价;菜单名以控制台为准。
有一天你发现后台文章列表空了半截,或者插件把表结构改坏了。云盘快照能整盘回滚,但有时你只想把库回到昨晚;站点文件还在,真正丢的是库。本站已有网站定期备份和对象存储整站备份。本文只收窄到数据库这一层:逻辑备份怎么导出、怎么压小、怎么推到对象存储,以及桶上保留多久再降冷或删。
一、逻辑备份是什么,和物理备份差在哪
MariaDB / MySQL 官方都把 mariadb-dump / mysqldump 归为逻辑备份:输出是一套 SQL(CREATE TABLE、INSERT 等),服务器可以不停机导出。物理备份拷的是数据目录文件,恢复路径不同,本文不展开。
MariaDB 文档写明:工具现名 mariadb-dump,以前叫 mysqldump,Linux 上常仍有同名符号链接;从 MariaDB 11.0 起,官方 Docker 镜像里 mysqldump 符号链接已弃用并移除。MySQL 8.4 手册仍以 mysqldump 为主条目。下面命令两边都能对照:MariaDB 优先写 mariadb-dump,MySQL 环境把命令名换成 mysqldump 即可。


mariadb-dump 参考页:原名 mysqldump;MariaDB 11.0 起官方 Docker 镜像移除 mysqldump 符号链接(2026-10-27 截图)
二、导出前先定三件事
- 备哪个库:WordPress 通常是单个业务库;不要随手
--all-databases把系统库和无关库一起推公网桶。 - 存储引擎:表以 InnoDB 为主时,官方更推荐
--single-transaction拿一致性快照,少用长时间--lock-tables。混有 MyISAM 时,锁表策略要另核官方说明。 - 账号权限:至少要有被导表的
SELECT;用--lock-tables还要LOCK TABLES;--routines/--events/SHOW VIEW等按你是否导出例程、事件、视图来补。密码不要写进 crontab 明文,优先~/.my.cnf(权限600)或环境注入。
三、一条能落地的导出命令(InnoDB)
MariaDB 备份指南对 InnoDB 给出的方向是:--single-transaction,在事务里读一致快照,避免长时间锁全库。例程与事件默认不一定进 dump,需要时显式加上 --routines、--events(参考页也提醒:触发器一般随表,过程/视图/事件要额外参数)。
# MariaDB;MySQL 把 mariadb-dump 换成 mysqldump 即可
# 日期用本地日历;密码放 ~/.my.cnf,勿写进命令历史
STAMP=$(date +%F)
OUTDIR=/backup/db
mkdir -p "$OUTDIR"
mariadb-dump --single-transaction --routines --events --triggers \
--databases your_wp_db \
| gzip -9 > "$OUTDIR/your_wp_db_${STAMP}.sql.gz"
# 立刻看体积与可读性(应能 gunzip -c | head 看到 SQL)
ls -lh "$OUTDIR/your_wp_db_${STAMP}.sql.gz"
gunzip -c "$OUTDIR/your_wp_db_${STAMP}.sql.gz" | head -n 20
核对要点:
--databases:dump 里会带CREATE DATABASE/USE,换机恢复时少一步手写建库。只导单表时按官方「库名 + 表名」写法,不要误加--databases。- 管道进
gzip:逻辑 dump 文本重复多,压缩后体积通常明显下降,上传对象存储也省流量。也可用zstd;工具链以你机器已装为准。 - 文件名带日期:后面生命周期按前缀/修改时间扫对象时,日备文件一眼能对上。
- 导出后立刻
gunzip -c | head:确认不是空文件或半截管道错误。
大库若导出过久、影响写入,再考虑分表、物理备份或官方提到的并行工具;个人内容站多数一天一次逻辑备足够起步。
四、推到对象存储:先 copy,慎 sync
对象存储桶建议私有,用子账号最小权限(该前缀的 List/Get/Put;Delete 是否开放按你保留策略定)。不要和图床公共读桶混用。推送可用 rclone(跨云)或云厂商 CLI。
rclone 文档对 rclone sync 加粗提醒:会让目标与源一致,可能删除目标上源没有的文件;正式跑之前先 --dry-run 或 --interactive。日备场景更稳妥的是:
# 只把本地日备目录「补」到桶,不按 sync 清远端历史
rclone copy /backup/db/ ossbackup:my-bucket/db-logical/ \
--include "*.sql.gz" --progress
# 若坚持用 sync:必须先 dry-run,并确认远端不会被误删周/月归档
rclone sync --dry-run /backup/db/ ossbackup:my-bucket/db-logical-daily/
整站文件与生命周期总览见用对象存储做整站备份。库 dump 建议单独前缀,例如 db-logical/2026/,别和 uploads/ 混在同一规则前缀里。
五、保留策略:本地几天 + 桶上生命周期
本地磁盘别无限堆 .sql.gz。常见做法:本地留 7~14 天日备;对象存储再留更长,用生命周期降冷或过期删除。
阿里云 OSS 生命周期说明:规则创建后约 24 小时内加载;之后通常按日扫描执行(文档写明常见为 UTC 0 点,对应北京时间上午 8 点后)。规则由控制对象(前缀/标签/大小,不支持通配后缀与正则)、动作(转低频/归档、过期删除、清理未合并分片)、触发条件组成。

内容站可参考的阶梯(天数按你合规与磁盘账单改;先在测试桶验证前缀):
| 阶段 | 示例动作 | 说明 |
|---|---|---|
| 近 14 天 | 标准存储 | 方便随时拉回演练 |
| 15~90 天 | 转低频 | 偶尔恢复仍可接受取回成本 |
| 90 天以后 | 转归档或直接过期删除 | 归档有最短存放与取回流程,删前算清 |
| 未合并分片 | 单独清理规则 | 大文件上传中断会留下分片占空间 |
注意:多规则命中同一对象时,删除通常优先于转换;删除天数务必长于转换天数。开了版本控制,还要单独清历史版本,否则「过期」只清当前版本不够。用 API 一次性提交生命周期可能覆盖整桶规则,改前先导出当前配置。
六、恢复演练:有文件不等于能还原
MariaDB 恢复指南写明:用 mariadb 客户端(MySQL 侧为 mysql)执行 dump 里的 SQL;mariadb-dump 负责导出,客户端负责导入。

# 先在测试实例建空库或确认 dump 自带 CREATE DATABASE
gunzip -c /backup/db/your_wp_db_2026-10-27.sql.gz \
| mariadb --user=restore_user --password
# 或先解压再导入
gunzip -c remote-downloaded.sql.gz > /tmp/restore.sql
mariadb --user=restore_user --password your_wp_db < /tmp/restore.sql
每月至少做一次:从对象存储下载一份日备 → 导入测试机 → 打开后台文章列表与关键用户表,确认行数大致对得上。生产机直接灌 dump 会按文件里的 DROP/CREATE 覆盖同名表,动手前先确认影响范围。
定时触发可把上述导出 + rclone copy 写进系统 cron;若站点是 WordPress 且仍依赖页面触发的 WP-Cron,先看WP-Cron 禁用与系统 cron,避免「备份脚本以为跑了、其实主机上根本没按时叫醒」。
七、常见坑(按出现频率)
- 只备了文件没备库:恢复后主题在,文章没了。
- 密码写进 crontab:历史与进程列表都能看见;改用选项文件。
rclone sync误删远端周归档:日备目录一空,远端也被掏空。日备用copy更稳。- 生命周期前缀写太宽:把仍在用的配置文件或证书一并删掉。
- 从未演练:gzip 坏了、权限不够、字符集不对,都要到恢复那天才暴露。
相关阅读
- 网站定期备份方案:数据库与文件
- 用对象存储做整站备份:rclone、生命周期与恢复演练
- WordPress WP-Cron:禁用、系统 cron 与积压排查
- 用 Docker 部署 WordPress:数据卷备份与升级
- 对象存储做图床:防盗链与防盗刷账单
来源与查询日期
- MariaDB — Making Backups with mariadb-dump
- MariaDB — mariadb-dump
- MariaDB — Restoring Data from Dump Files
- MySQL 8.4 — mysqldump
- rclone sync
- 阿里云 OSS — 生命周期概述
- 阿里云 OSS — 基于最后一次修改时间的生命周期规则
- 查询日期:2026-10-27(北京时间)
风险提示:备份脚本权限过大、密钥泄露或恢复操作失误都可能导致数据丢失或费用异常。操作前在测试环境验证;规则与命令行选项以各官方文档当时版本为准。