Debian LNMP环境的备份与恢复方法
一 备份范围与准备
二 手动备份步骤
mysqldump -u 用户名 -p 数据库名 > /backups/mydatabase_$(date +%F).sqlmysqldump -u root -p --single-transaction --routines --triggers --all-databases > /backups/full_$(date +%F).sqlgzip /backups/mydatabase_$(date +%F).sqltar -czvf /backups/www_$(date +%F).tar.gz -C /var/www .rsync -avz /var/www/ /backups/www_$(date +%F)/tar -czvf /backups/nginx_conf_$(date +%F).tar.gz /etc/nginxtar -czvf /backups/php_fpm_$(date +%F).tar.gz /etc/php/8.2/fpm/tar -czvf /backups/logs_$(date +%F).tar.gz /var/log/nginx /var/log/mysqltar -czvf /backups/certs_$(date +%F).tar.gz /etc/letsencrypt三 自动备份方案
/usr/local/bin/backup_mysql.sh#!/bin/bash
BACKUP_DIR="/backups/mysql"
DATE=$(date +"%Y%m%d%H%M%S")
DB_USER="backup_user"
DB_PASS="StrongPass!23"
DB_NAME="mydatabase"
mkdir -p "$BACKUP_DIR"
mysqldump -u"$DB_USER" -p"$DB_PASS" --single-transaction --routines --triggers "$DB_NAME" \
> "$BACKUP_DIR/${DB_NAME}-${DATE}.sql"
gzip "$BACKUP_DIR/${DB_NAME}-${DATE}.sql"
# 保留最近30天
find "$BACKUP_DIR" -type f -name "*.sql.gz" -mtime +30 -delete
chmod +x /usr/local/bin/backup_mysql.sh0 2 * * * /usr/local/bin/backup_mysql.sh >> /var/log/backup_mysql.log 2>&10 3 * * * tar -czf /backups/nginx_conf_$(date +\%F).tar.gz -C /etc/nginx . >> /var/log/backup_nginx.log 2>&1
0 4 * * * tar -czf /backups/www_$(date +\%F).tar.gz -C /var/www . >> /var/log/backup_www.log 2>&1
四 恢复流程
sudo apt-get update && sudo apt-get install nginx mariadb-server php-fpm php-mysqlsudo mysql_secure_installationmysql -u 用户名 -p 数据库名 < /backups/mydatabase_YYYY-MM-DD.sqlmysql -u root -p < /backups/full_YYYY-MM-DD.sqltar -xzvf /backups/www_YYYY-MM-DD.tar.gz -C /var/wwwrsync -avz /backups/www_YYYY-MM-DD/ /var/www/tar -xzvf /backups/nginx_conf_YYYY-MM-DD.tar.gz -C /tar -xzvf /backups/php_fpm_YYYY-MM-DD.tar.gz -C /chown -R www-data:www-data /var/wwwnginx -t && systemctl reload nginxsystemctl restart php8.2-fpm(按实际版本)systemctl stop nginx php8.2-fpm mariadbsystemctl start mariadb php8.2-fpm nginxtail -f /var/log/nginx/error.logtail -f /var/log/mysql/error.log五 注意事项与最佳实践
--single-transaction 获取一致性快照;如含 MyISAM 表,可考虑短暂锁表或改用 InnoDB。