Initial commit: VPS tutorial complet (105 etapes)
This commit is contained in:
100
12-backup.md
Normal file
100
12-backup.md
Normal file
@@ -0,0 +1,100 @@
|
||||
# 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/<USER>/.ssh/id_* /root/.ssh/
|
||||
cp /home/<USER>/.ssh/known_hosts /root/.ssh/
|
||||
```
|
||||
|
||||
Tester :
|
||||
```bash
|
||||
ssh -p <PORT_SSH_DISTANT> <USER_DISTANT>@<HOST_DISTANT> "echo OK"
|
||||
```
|
||||
|
||||
## Creer la config
|
||||
|
||||
Creer `/etc/vps-backup.env` :
|
||||
|
||||
```bash
|
||||
REMOTE_USER=<USER_DISTANT>
|
||||
REMOTE_HOST=<HOST_DISTANT>
|
||||
REMOTE_PORT=<PORT_SSH_DISTANT>
|
||||
REMOTE_BASE=<CHEMIN_DISTANT>/backups
|
||||
DB_BACKUP_DIR=/tmp/vps-db-backup
|
||||
```
|
||||
|
||||
```bash
|
||||
chmod 600 /etc/vps-backup.env
|
||||
```
|
||||
|
||||
## Creer les repertoires distants
|
||||
|
||||
```bash
|
||||
ssh -p <PORT_SSH_DISTANT> <USER_DISTANT>@<HOST_DISTANT> "mkdir -p <CHEMIN_DISTANT>/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.
|
||||
Reference in New Issue
Block a user