MySQL 备份防泄露需四层防线:权限控制(目录 700、属主 mysql)、加密存储(openssl/gpg 加密 + 密钥离线保管)、传输安全(rsync over ssh/TLS+SSE)、异地隔离(跨网络副本 + 自动清理 + 定期可读性验证)。

MySQL 备份文件一旦泄露,等同于把整个数据库白送出去。防止备份泄露不是“加个密码”就完事,关键在权限控制、加密存储、传输安全和异地隔离四层防线。
备份目录与文件权限必须严格限制
备份文件不能放在任何人都能读写的路径下。系统层面要确保:
- 备份目录(如 /backup/mysql)归属mysql 用户,权限设为700(仅属主可读写执行)
- 备份脚本和生成的。sql 或。xb 文件,禁止其他用户(包括 root 以外的运维账号)有访问权限
- 删除备份过程中的临时文件,避免残留明文数据
备份文件必须加密后再落盘
即使磁盘被物理窃取,加密也能守住最后一道门:
- 用 gpg 或openssl对备份文件加密,密钥单独离线保管,不存服务器
- 示例:openssl enc -aes-256-cbc -salt -in full_20251216.sql -out full_20251216.sql.enc
- 禁用简单压缩密码(如zip -P),这类密码极易被暴力破解
传输过程全程加密,杜绝明文外发
备份同步到远程或 云存储 时,绝不能走明文协议:
- 用 rsync over ssh 或scp -C替代 ftp、http、nfs 等无加密方式
- 若上传至对象存储(如 S3、MinIO),启用服务端加密(SSE)并强制 TLS 1.2+ 传输
- 跨公网传输前,先校验文件完整性(如sha256sum),再加密上传
异地保存 + 自动清理,降低单点失效风险
本地备份和服务器在同一机房,等于没备:
- 至少保留一份副本在独立网络、不同物理位置的存储节点上
- 设置自动清理策略,如只保留最近 7 天全量 +30 天增量,避免磁盘满导致新备份失败
- 定期抽查异地备份可读性——用 mysql –no-defaults -e “SELECT 1” 快速验证压缩包能否 解压、SQL 能否解析