Backuper DB BareMetal Scaleway sur Object storage
Où l'on voit comment sauvegarder quotidiennement la base de données d'un site hébergé sur un serveur BareMetal chez Scaleway vers 'l'object storage de l'hébergeur.
Pré-requis :
Avoir configuré un Bucket chez Scaleway, y avoir créé un dossier "backups"
Utilisateur IAM chez Scaleway
On créé un utilisateur qui sera dédié aux backups :

On créé une policy donnant accès à 'lobject storage à l'utilisateur précédemment créé :


Il n'est pas nécessaire d'attacher une policy spécifique au bucket utilisé, on se contente de celle de l'utilisateur.
Utilisateur Mysql dédié au backup
On va créer un utilisateur Mysql avec que des droits de lecture qui aura accès à toutes les bases pour pouvoir les backuper.
# mysql -uroot -p
Puis dans mysql :
MariaDB [(none)]> CREATE USER user4backup IDENTIFIED BY 'unSuperMotDePasse';
MariaDB [(none)]> GRANT SELECT, LOCK TABLES, RELOAD, SHOW VIEW, PROCESS ON *.* TO user4backup;
MariaDB [(none)]> FLUSH PRIVILEGES;
Configuration sur serveur BareMetal
On récupère le client console Scaleway :
curl -s https://raw.githubusercontent.com/scaleway/scaleway-cli/master/scripts/get.sh | sh
On met en place la configuration issue de scaleway :
scw init -p newprofile access-key=xxxxxxxxxxxxxxx secret-key=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx organization-id=xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx project-id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx
Si besoin configurer la bonne région :
scw config set default-region=nl-ams
Vérifier la configuration :
scw config dump
Vérifier la connexion au bucket :
scw object bucket list
On installe s3cmd (pour envoi de fichier sur Bucket) :
sudo apt install s3cmd
On installe la config s3cmd :
scw object config install type=s3cmd
On peut tester un envoi de fichier (mes backups sont dans un dossier "backups"):
s3cmd put file monfichiertest.txt s3://bucketname/backups/
Script de backups des bases de données et envoi sur le bucket
On va créer un dossier (ici dans le dossier utilisateur) qui accueillera le script de backups et les fichiers de backups.
mkdir backups
cd backups/
mkdir script
vim script/backuper.sh
Contenu du script adapté de tecadmin.net:
#!/usr/bin/env bash
#########################################################################
#########################################################################
###
#### Author: Rahul Kumar
##### Website: https://tecadmin.net
####
#########################################################################
#########################################################################
# Set the folder name formate with date (2022-05-28)
#DATE_FORMAT=$(date +"%Y-%m-%d")
DATE_FORMAT=$(date +"%d") #personnellement je ne garde que le numéro du jour dans le mois pour garder une archive par jour sur les 30 derniers jours.
# MySQL server credentials
MYSQL_HOST="localhost"
MYSQL_PORT="3306"
MYSQL_USER="user4backup"
MYSQL_PASSWORD="unSuperMotDePasse"
# Path to local backup directory
LOCAL_BACKUP_DIR="/home/username/backups"
# Set s3 bucket name and directory path
S3_BUCKET_NAME="bucketname"
S3_BUCKET_PATH="backups"
# Number of days to store local backup files
#en local on ne garde les backups que sur les 2 derniers jours
BACKUP_RETAIN_DAYS=2
# Use a single database or space separated database's names
DATABASES="db1 db2 db3 db4"
##### Do not change below this line
mkdir -p ${LOCAL_BACKUP_DIR}/${DATE_FORMAT}
LOCAL_DIR=${LOCAL_BACKUP_DIR}/${DATE_FORMAT}
REMOTE_DIR=s3://${S3_BUCKET_NAME}/${S3_BUCKET_PATH}
for db in $DATABASES; do
mysqldump \
-h ${MYSQL_HOST} \
-P ${MYSQL_PORT} \
-u ${MYSQL_USER} \
-p${MYSQL_PASSWORD} \
--single-transaction ${db} | gzip -9 > ${LOCAL_DIR}/${db}-${DATE_FORMAT}.sql.gz
s3cmd put file ${LOCAL_DIR}/${db}-${DATE_FORMAT}.sql.gz ${REMOTE_DIR}/${DATE_FORMAT}/
done
DBDELDATE=`date +"${DATE_FORMAT}" --date="${BACKUP_RETAIN_DAYS} days ago"`
if [ ! -z ${LOCAL_BACKUP_DIR} ]; then
cd ${LOCAL_BACKUP_DIR}
if [ ! -z ${DBDELDATE} ] && [ -d ${DBDELDATE} ]; then
rm -rf ${DBDELDATE}
fi
fi
## Script ends here
Puis on rendra le script exécutable :
chmod +x backuper.sh
Enfin on l'installe dans la crontab :
crontab -e
et on l'exécute une fois par jour, ici à 3h du matin (à adapter selon le serveur) :
# Run daily @ 2am
0 3 * * * /home/username/backups/script/backuper.sh > /dev/null 2>&1