# 12. Backup Rsync ## Prerequis - Serveur de stockage distant avec acces SSH - Cle SSH configuree pour l'acces sans mot de passe ## Configurer l'acces SSH ```bash # Copier la cle SSH de l'utilisateur vers root (le script tourne en root via cron) mkdir -p /root/.ssh cp /home//.ssh/id_* /root/.ssh/ cp /home//.ssh/known_hosts /root/.ssh/ ``` Tester : ```bash ssh -p @ "echo OK" ``` ## Creer la config Creer `/etc/vps-backup.env` : ```bash REMOTE_USER= REMOTE_HOST= REMOTE_PORT= REMOTE_BASE=/backups DB_BACKUP_DIR=/tmp/vps-db-backup ``` ```bash chmod 600 /etc/vps-backup.env ``` ## Creer les repertoires distants ```bash ssh -p @ "mkdir -p /backups/{db,etc,ispconfig,www}" ``` ## Script de backup Creer `/usr/local/bin/vps-backup.sh` : ```bash #!/bin/bash source /etc/vps-backup.env DATE=$(date +%Y%m%d_%H%M%S) LOG="/var/log/vps-backup.log" echo "[$DATE] Backup started" >> $LOG # Dump databases mkdir -p $DB_BACKUP_DIR rm -f $DB_BACKUP_DIR/*.sql.gz $DB_BACKUP_DIR/*.tar.gz for DB in $(mysql -N -e "SHOW DATABASES" | grep -v -E "^(information_schema|performance_schema|sys)$"); do mysqldump --single-transaction --routines --triggers "$DB" | gzip > "$DB_BACKUP_DIR/${DB}.sql.gz" done # Compresser en tar tar -czf "$DB_BACKUP_DIR/all-databases-${DATE}.tar.gz" -C $DB_BACKUP_DIR --exclude="*.tar.gz" . || true rm -f $DB_BACKUP_DIR/*.sql.gz # Sync rsync -avz -e "ssh -p $REMOTE_PORT" $DB_BACKUP_DIR/*.tar.gz $REMOTE_USER@$REMOTE_HOST:$REMOTE_BASE/db/ || echo "[$DATE] DB sync failed" >> $LOG rsync -avz --delete -e "ssh -p $REMOTE_PORT" /etc/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_BASE/etc/ || echo "[$DATE] etc sync failed" >> $LOG rsync -avz --delete -e "ssh -p $REMOTE_PORT" /usr/local/ispconfig/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_BASE/ispconfig/ || echo "[$DATE] ispconfig sync failed" >> $LOG rsync -avz --delete -e "ssh -p $REMOTE_PORT" /var/www/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_BASE/www/ || echo "[$DATE] www sync failed" >> $LOG rm -rf $DB_BACKUP_DIR DATE_END=$(date +%Y%m%d_%H%M%S) echo "[$DATE_END] Backup completed" >> $LOG ``` ```bash chmod 755 /usr/local/bin/vps-backup.sh ``` ## Cron quotidien ```bash crontab -e # Ajouter : 0 2 * * * /usr/local/bin/vps-backup.sh ``` ## Tester ```bash sudo /usr/local/bin/vps-backup.sh ``` > **Piege :** Le script tourne en root via cron. La cle SSH de root doit etre configuree pour l'acces distant.