Mon site est hébergé sur une Dedibox V3. Afin d’avoir des sauvegardes régulières j’ai décidé de mettre en place l'espace FTP de 10Go offert avec la Dedibox et une solution de backup éprouvé qui nous sert quotidiennement au bureau. La recette pour faire ma sauvegarde est donc simple.
Ingrédients.
- CurlFTPfs afin de monter un espace FTP sur votre filesystem.
- Rsnapshot, un très bon outil de backup.
- Un petit script de backup MySQL pour les bases de données.
Préparation.
Mon serveur est sous Ubuntu, il vous faudra adapter les commandes shell à votre distribution si nécessaire. On s’assure que l’espace FTP est bien accessible. Ensuite on install CurlFTPfs et on monte notre espace FTP dans /backup/.``` root@sd-XXXXX:/# aptitude install curlftpfs root@sd-XXXXX:/# mkdir /backup root@sd-XXXXX:/# vim /etc/fstab
curlftpfs#myuser:[email protected]/ /backup fuse allow_other 0 1
root@sd-XXXXX:/# mount -a
root@sd-XXXXX:/# df -h
Sys. de fichiers Tail. Occ. Disp. %Occ. Monté sur
/dev/sda2 146G 18G 121G 13% /
none 987M 164K 987M 1% /dev
none 991M 740K 990M 1% /dev/shm
none 991M 124K 991M 1% /var/run
none 991M 0 991M 0% /var/lock
none 991M 0 991M 0% /lib/init/rw
none 146G 18G 121G 13% /var/lib/ureadahead/debugfs
/dev/sda1 190M 39M 142M 22% /boot
curlftpfs#ftp://myuser:[email protected]/
7,5T 0 7,5T 0% /backup
On peut voir que visiblement le serveur FTP dispose de 7,5 To d'espace disque ... au total pas juste pour moi :-) On passe maintenant à l'installation de Rsnapshot.
root@sd-XXXXX:/# aptitude install rsnapshot
root@sd-XXXXX:/# vim /etc/rsnapshot.conf
Je ne présente ici que les lignes différentes de la config par défaut.
Je vais d’abord faire mes backups en local et je ne pousserai sur le FTP que certaines choses (vu que je suis limité à 10Go)
On utilisera la commande cmd_postexec pour mettre en place un script qui ira copier notre backup déporté.
snapshot_root /data/backup/ […] cmd_postexec /usr/local/libexec/snapshot_postexec.sh […] backup /etc/ localhost/ backup /usr/local/libexec localhost/ backup /var/www localhost/ backup_script /usr/local/libexec/backup_mysql.sh localhost/sql/
Nous avons donc besoin de deux scripts, un pour sauvegarder les bases de données, l'autre pour faire un beau tgz du snapshot vers l'espace ftp.
root@sd-XXXXX:/# vim /usr/local/libexec/backup_mysql.sh
#!/bin/sh
MYSQL_SERVER=localhost MYSQL_USER=user MYSQL_PASSWORD=password
MYSQLDUMP=/usr/bin/mysqldump MYSQL=/usr/bin/mysql GZIP=/bin/gzip
$MYSQL -h $MYSQL_SERVER -u $MYSQL_USER -p$MYSQL_PASSWORD -qse ‘show databases’ | while read db do $MYSQLDUMP -h $MYSQL_SERVER -u $MYSQL_USER -p$MYSQL_PASSWORD $db >localhost_$db.sql $GZIP localhost_$db.sql /bin/chmod 600 localhost_$db.sql.gz done
root@sd-XXXXX:/# vim /usr/local/libexec/snapshot\_postexec.sh
--
#!/bin/sh
cd /data/backup/daily.0/localhost/ && tar czpf /backup/backup.tgz ./\* && cd -
```Il ne nous reste plus qu'à "cronner" le snapshot pour qu'il tourne de manière quotidienne.```
root@sd-XXXXX:/# vim /etc/cron.d/rsnapshot
--
# This is a sample cron file for rsnapshot.
# The values used correspond to the examples in /etc/rsnapshot.conf.
# There you can also set the backup points and many other things.
#
# To activate this cron file you have to uncomment the lines below.
# Feel free to adapt it to your needs.
# 0 \*/4 \* \* \* root /usr/bin/rsnapshot hourly
30 3 \* \* \* root /usr/bin/rsnapshot daily
# 0 3 \* \* 1 root /usr/bin/rsnapshot weekly
# 30 2 1 \* \* root /usr/bin/rsnapshot monthly
```Dans cette configuration nous aurons donc :
* 7 snapshots en local pour avoir 7 jours d'historique
* le dernier snapshot externalisé sur l'espace de sauvegarde FTP