对 MySQL 数据做加密备份,核心是“先备份、再加密”,或“备份时直接加密”,确保数据在传输和存储过程中不被未授权访问。关键不是单纯压缩,而是用可信工具加密码或密钥保护内容。
使用 mysqldump + gpg 加密备份(推荐)
这是最常用且安全的方式:先用
mysqldump导出 SQL,再用 GPG(GNU Privacy Guard)非对称或对称加密。 对称加密(简单快捷,适合自动化):
mysqldump -u user -p database_name | gpg --cipher-algo AES256 --symmetric --armor > backup_$(date +%F).sql.gpg
执行后会提示输入密码,该密码必须安全保管——丢失即无法恢复。 若已配置 GPG 密钥对,可用公钥加密,更利于团队协作:
mysqldump -u user -p database_name | gpg --encrypt --recipient your-key@example.com > backup.sql.gpg还原时需对应解密:
gpg --decrypt backup.sql.gpg | mysql -u user -p database_name
使用 openssl 加密(轻量替代方案)
若服务器未安装 GPG,
openssl是通用选择,支持 AES-256-CBC 等强算法。 备份并加密:
mysqldump -u user -p database_name | openssl enc -aes-256-cbc -pbkdf2 -salt -out backup_$(date +%F).sql.enc
会要求输入密码(passphrase),同样不可丢失。 解密还原:
openssl enc -d -aes-256-cbc -pbkdf2 -in backup.sql.enc | mysql -u user -p database_name注意:
-pbkdf2启用密钥派生,比老版本
-md md5更安全;避免用
-k明文传密钥,应交互输入。
备份文件本身加密(适用于已有备份)
如果已有未加密的 SQL 或压缩包(如 .sql.gz),可单独加密归档文件:
加密已有 SQL 文件:gpg --symmetric --cipher-algo AES256 data.sql→ 生成
data.sql.gpg加密 gzip 备份:
gzip -c data.sql | gpg --symmetric > data.sql.gz.gpg务必删除原始明文文件:
shred -u data.sql data.sql.gz(
shred比
rm更安全,防恢复)
自动化与安全提醒
写入脚本自动执行时,注意规避密码泄露风险:
不要在命令行中用-p'password',改用 MySQL 配置文件
~/.my.cnf并设权限
chmod 600 ~/.my.cnfGPG/openssl 的密码不要硬编码,可用
gpg --batch --passphrase-fd 0从安全管道或密钥管理器注入 加密备份建议存放在独立位置(如加密 NAS、S3 服务端加密 + 客户端密钥管理),并定期验证解密还原流程是否正常 每次备份记录时间、数据库名、加密方式、密钥标识(如 GPG key ID),方便后续追踪
加密不是一劳永逸,关键是密钥生命周期管理和备份完整性验证。只要导出过程可控、加密环节无明文落地、密钥离线保管,MySQL 数据的静态备份就能达到较高安全水位。
