备份范围与总体思路
数据库备份与恢复
mysqldump -u 用户名 -p 数据库名 > backup_$(date +%F).sqlmysqldump -u 用户名 -p --databases 库1 库2 ... > backup_$(date +%F).sqlmysqldump -u 用户名 -p --all-databases --events --routines > backup_$(date +%F).sqlmysqldump -u 用户名 -p 数据库名 | gzip > backup_$(date +%F).sql.gzmysql -u 用户名 -p 数据库名 < backup_$(date +%F).sqlgunzip < backup_$(date +%F).sql.gz | mysql -u 用户名 -p 数据库名--set-gtid-purged=OFF(视版本与复制拓扑而定)。网站文件与配置备份
tar -czvf web_$(date +%F).tar.gz -C /var/www/html .tar -czvf config_$(date +%F).tar.gz /etc/httpd /etc/php.inirsync -avz --delete /var/www/html/ 用户名@远程主机:/path/to/backup/scp -P 22 web_$(date +%F).tar.gz 用户名@远程主机:/path/to/backup/自动化与远程备份脚本
#!/usr/bin/env bash
set -Eeuo pipefail
BACKUP_DIR="/backup/$(date +%F)"
MYSQL_USER="backup"
MYSQL_PASS="YourStrongPass"
DB_NAME="mydb"
REMOTE_USER="backup"
REMOTE_HOST="192.0.2.10"
REMOTE_DIR="/data/backup"
mkdir -p "$BACKUP_DIR"
# 1) 数据库
mysqldump -u"$MYSQL_USER" -p"$MYSQL_PASS" --single-transaction --routines --triggers "$DB_NAME" \
| gzip > "$BACKUP_DIR/db_$(date +%F).sql.gz"
# 2) 网站文件
tar -czvf "$BACKUP_DIR/web_$(date +%F).tar.gz" -C /var/www/html .
# 3) 配置
tar -czvf "$BACKUP_DIR/config_$(date +%F).tar.gz" /etc/httpd /etc/php.ini
# 4) 远程同步
rsync -avz --delete -e ssh "$BACKUP_DIR/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
# 5) 保留最近7天
find /backup -maxdepth 1 -type d -mtime +7 -exec rm -rf {} +
0 2 * * * /usr/local/bin/backup_lamp.sh >> /var/log/backup.log 2>&1~/.my.cnf 或采用 ~/.mylogin.cnf 以避免在命令行暴露;SSH 建议使用密钥登录替代口令。恢复步骤与验证
mysql -u 用户名 -p 数据库名 < db_YYYY-MM-DD.sqlgunzip < db_YYYY-MM-DD.sql.gz | mysql -u 用户名 -p 数据库名tar -xzvf web_YYYY-MM-DD.tar.gz -C /var/www/htmltar -xzvf config_YYYY-MM-DD.tar.gz -C /