数据是服务器上最值钱的资产。硬盘坏了、被勒索病毒加密、误删数据库——任何一件事都可能让业务归零。今天分享一套完整的数据安全方案,覆盖加密、备份、容灾三个层面。
一、数据加密
- 磁盘加密(LUKS)
# 加密新分区
sudo cryptsetup luksFormat /dev/sdb1
sudo cryptsetup open /dev/sdb1 backup_crypt
sudo mkfs.ext4 /dev/mapper/backup_crypt
# 开机自动挂载(需输入密码或配置 keyfile)
file)
sudo cryptsetup close backup_crypt
- 数据库敏感字段加密
-- MySQL 加密函数示例
INSERT INTO users (email) VALUES (AES_ENCRYPT('user@example.com', 'your_key'));
SELECT AES_DECRYPT(email, 'your_key') FROM users;
- 配置文件加密
# 用 ansible-vault 或 sops 加密配置文件
sops -e config.yml > config.enc.yml
sops -d config.enc.yml > config.yml
二、备份策略(3-2-1 原则)
- 3 份副本:原始数据 + 2 份备份
- 2 种介质:本地磁盘 + 云存储
- 1 份异地:至少一份在不同地理位置
自动化备份脚本:
#!/bin/bash
# /usr/local/bin/backup.sh
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup/$DATE"
S3_BUCKET="s3://your-backup-bucket"
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份数据库
mysqldump -u root -p'password' --all-databases | gzip > $BACKUP_DIR/mysql-all.sql.gz
# 备份网站文件
tar czf $BACKUP_DIR/www.tar.gz /var/www/html
# 备份配置文件
tar czf $BACKUP_DIR/etc.tar.gz /etc/nginx /etc/mysql /etc/ssh
# 同步到云存储
rclone sync $BACKUP_DIR $S3_BUCKET/vps-backup/$DATE/
# 清理 7 天前的本地备份
find /backup -type d -mtime +7 -exec rm -rf {} \;
# 发送通知
curl -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY" \
-d "{\"msgtype\":\"text\",\"text\":{\"content\":\"备份完成:$DATE\"}}"
三、容灾演练
# 模拟数据库损坏,测试恢复
# 1. 停止 MySQL
sudo systemctl stop mysql
# 2. 删除数据目录(测试环境!)
sudo mv /var/lib/mysql /var/lib/mysql.bak
# 3. 从备份恢复
gunzip < /backup/20260808/mysql-all.sql.gz | mysql -u root -p
# 4. 验证数据完整性
mysql -e "SHOW DATABASES;"
mysql -e "SELECT COUNT(*) FROM wordpress.wp_posts;" 



