Piwik Stratégie Backup

De EjnTricks
Révision de 15 mai 2018 à 11:45 par Etienne (discussion | contributions)

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

L'application Piwik utilise une base de données et des espaces de stockage, dont une sauvegarde est nécessaire. Cet article présente la mise en place d'une stratégie de backup, sous Ubuntu, permettant de réaliser:

  • 1 sauvegarde quotidienne de la base de données.
  • Export des sauvegardes vers un serveur "externe" via FTP.
  • Conservation des trois dernières sauvegardes complètes, et des incrémentales.

La synchronisation des sauvegardes s'effectue à l'aide de l'outil de backup Duplicity. Le fait d'externaliser les sauvegardes apporte une garantie supplémentaire. En effet, si le serveur venait à être en panne, les sauvegardes de Piwik resteront disponibles.

La base de données MySQL est sauvegardée à l'aide de l'outil AutoMySQLBackup. Pour cela, un compte de sauvegarde est utilisé pour accéder à la base de données en lecture seule.


Hand-icon.png Votre avis

Current user rating: 99/100 (2 votes)

 You need to enable JavaScript to vote


Viewer icon.png Objectif

L'installation faite sous Ubuntu met en place différents répertoires / fichiers:

  • Répertoire /var/opt/piwik: Contient les instances installées, et le lien vers l'instance utilisée.
  • Répertoire /var/datas/piwik: Contient les extensions de Piwik, voir les plugins.
  • Fichier /etc/apache2/sites-available/default.conf: Contient la déclaration de la publication sous Apache.
  • Lien /etc/apache2/sites-enabled/000-default.conf: Lien pour la prise en compte des configurations Apache.


Sous Ubuntu, il existe le répertoire /var/backups, utilisé par aptitude, dpkg, OpenLDAP ... Cependant, il ne sera pas utilisé dans le cadre de cet article, pour ne pas engendrer d'éventuels effets de bord. Tous les scripts et données seront stockés dans un nouveau répertoire /var/opt/backups (pour l'ensemble des stratégies) et plus particulièrement dans le répertoire /var/opt/backups/piwik pour Piwik. Concernant les logs, elles seront toutes placées dans le répertoire /var/log/backups.

#sudo mkdir -p /var/opt/backups/piwik
#sudo chmod 740 /var/opt/backups/piwik
#sudo chown root:root /var/opt/backups/piwik
#sudo mkdir /var/log/backups


Icon-database-process.png Sauvegardes

La base de données est sauvegardées à l'aide de AutoMySQLBackup. Cette dernière application permet d'exécuter des exécutions après export, ce qui est utilisé pour déclencher la sauvegarde des exports, des installations, à l'aide de l'outil Duplicity.

Command-icon.png Source

La configuration piwik_automysqlbackup.conf est mise en place, avec des sécurités autorisant uniquement le compte root à le modifier, dans le répertoire /var/opt/backups/piwik avec le code suivant:

Le fichier est créé avec un droit de modification et exécution uniquement pour le compte root:

#sudo chmod 640 /var/opt/backups/piwik/piwik_automysqlbackup.conf
#sudo chown root:root /var/opt/backups/piwik/piwik_automysqlbackup.conf

Les paramètres mis en place sont:

Paramètre Valeur
CONFIG_mysql_dump_username backup
CONFIG_mysql_dump_password Mot de passe du compte backup.
CONFIG_mysql_dump_host localhost

L'utilitaire est installé sur la même machine que MySQL.

CONFIG_backup_dir /var/opt/backups/piwik/db

Ce répertoire est à créer.

CONFIG_multicore yes
CONFIG_multicore_threads 2

La machine est un bi-processeur avec deux coeurs.

CONFIG_db_names ( 'piwik' )

Seule la base piwik est gérée dans cette configuration.

CONFIG_do_monthly 0

Les sauvegardes mensuelles ne sont pas souhaitées dans le cadre de cette utilisation.

CONFIG_do_weekly 0

Les sauvegardes hebdomadaires ne sont pas souhaitées dans le cadre de cette utilisation.

CONFIG_rotation_daily 1

Seule la sauvegarde du jour est conservée. En effet, l'installation faite n'est pas critique et comme les différentiels peuvent être gérés par Duplicity, il sera possible de restaurer des anciennes sauvegardes.

CONFIG_mysql_dump_port 3306
CONFIG_mysql_dump_usessl no

Par défaut la valeur est yes, mais cela entraîne une erreur suite à une mise à jour.

CONFIG_mysql_dump_full_schema no
CONFIG_mysql_dump_dbstatus yes
CONFIG_mysql_dump_create_database yes

Ce qui permet d'avoir les scripts de création de la abse.

CONFIG_mysql_dump_use_separate_dirs yes
CONFIG_mysql_dump_compression gzip

Les sauvegardes seront compressées ainsi.

CONFIG_mysql_dump_differential no

Les sauvegardes sont complêtes à chaque fois.

CONFIG_postbackup /var/opt/backups/piwik/piwik_backup.sh

Ce script sera déclenché à la fin de la sauvegarde, permettant de planifier la synchronisation à partir de Duplicity.

umask 0077

Seul le compte root aura accès aux sauvegardes.

Le répertoire /var/opt/backups/piwik/db doit être créé.

#sudo mkdir /var/opt/backups/piwik/db
#sudo chown root:root /var/opt/backups/piwik/db
#sudo chmod 750 /var/opt/backups/piwik/db

Le script piwik_backup.sh est mis en place, avec des sécurités autorisant uniquement le compte root à le modifier, dans le répertoire /var/opt/backups/piwik avec le code suivant:

Attention à l'utilisation de l'instruction export, surtout pour la PASSPHRASE. En effet, si celle-ci contient des espaces, il est impératif de la placer entre le caractère ".

Il n'est pas nécessaire de positionner le droit d'exécution sur ce fichier.

#sudo chmod 640 /var/opt/backups/piwik/piwik_backup.sh
#sudo chown root:root /var/opt/backups/piwik/piwik_backup.sh

Le fonctionnement de ce script est assez simple. Deux variables d'environnement sont mises en place:

  • PASSPHRASE: Phrase pour le cryptage des données par duplicity.
  • FTP_PASSWORD: Le mot de passe FTP utilisé pour se connecté via duplicity.

La première instruction, avec l'argument remove-all-but-n-full 3, va conserver les trois dernières sauvegardes complètes. Puis la seconde instruction, avec l'argument --full-if-older-than 7D effectue une sauvegarde incrémentale uniquement si la précédente complète est plus ancienne de sept jours.

Le résultat de l'export est ensuite envoyé sur un serveur FTP, configuré par la value HOST, en utilisant le login FTP_LOGIN et le mot de passe USER_PASSWORD placé dans la variable FTP_PASSWORD. Les sauvegardes sont stockées à l'emplacement backup/piwik à la racine du compte après connexion sur FTP.

Enfin, les exécutions sont tracées dans la log /var/log/backups/piwik_backup.log.

Afin de faciliter le déploiement de cette exécution sous Crontab, un deuxième script est mis en place afin d'exécuter AutoMySQLBackup avec le fichier de configuration. Le script piwik_automysqlbackup.sh est mis en place, avec des sécurités autorisant uniquement le compte root à le modifier, dans le répertoire /var/opt/backups/piwik avec le code suivant:

Le script est créé avec un droit de modification et exécution uniquement pour le compte root:

#sudo chmod 750 /var/opt/backups/piwik/piwik_automysqlbackup.sh
#sudo chown root:root /var/opt/backups/piwik/piwik_automysqlbackup.sh

Les messages d'exécution de AutoMySQLBackup sont redirigés vers la log /var/log/backups/piwik_backup_db.log.

Examples-icon.png Exemples

Le script n'accepte aucun argument. L'exécution s'effectue simplement par la ligne suivante:

#./piwik_automysqlbackup.sh

Scheduled-Tasks-icon.png Planification

Une fois que le script de sauvegarde est mis en place, il est possible de l'exécuter manuellement. Mais l'objectif est de l'exécuter automatiquement et régulièrement sans s'en préoccuper. Dans le cadre de cette implémentation, la planification est réalisée à l'aide de l'outil Crontab disponible sur les systèmes Linux. L'outil Anacron n'a pas été utilisé car les planifications souhaitées doivent se faire à des heures et des jours particuliers.

La mise en place s'effectue en modifiant le fichier /etc/crontab pour y ajouter une ligne.

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
5 0    * * *   root    cd / && /var/opt/backups/piwik/piwik_automysqlbackup.sh
#

Les sauvegardes sont planifiées à 0h05 AM, tous les jours de la semaine, par l'exécution de la commande cd / && /var/opt/backups/piwik/piwik_automysqlbackup.sh.


Icon-log.png Gestions des logs

Des fichiers de log sont créés par le script mis en place. Comme pour l'ensemble des produits, une rotation de ces logs est mise en place, à l'aide de l'outil Logrotate. L'ensemble des logs se trouvent donc dans le répertoire /var/log/backups avec les noms piwik_backup_db.log et piwik_backup.log. La configuration permet une rotation hebdomadaire, en conservant 3 rotations. Les rotations sont compressées, en asynchrone, et créées avec un accès en modification au compte root.

Cette configuration est mise en place dans le fichier piwik_backup, sous le répertoire /etc/logrotate.d

/var/log/backups/piwik*.log {
        weekly
        missingok
        rotate 3
        compress
        delaycompress
        notifempty
        create 640 root root
}


Update icon.png Update

Suite à la montée de version de Ubuntu 16.04, le serveur MySql a été mis à jour. La configuration de AutoMySQLBackup mise en place provoquait alors une erreur, mentionnée dans la trace d'exécution.

mysqldump: Got error: 2026: SSL connection error: SSL is required but the server doesn't support it when trying to connect

Et la base de données n'était pas exportée par la commande mysqldump.

Par défaut, AutoMySQLBackup est configuré pour exécuter la commande mysqldup en SSL, paramètre CONFIG_mysql_dump_usessl. Jusqu'à cette mise à jour, cela ne semblait pas être problématique. Dans le cadre de cette installation, il est donc nécessaire de désactiver l'utilisation de SSL en spécifiant la valeur no pour le paramètre.

# Use ssl encryption with mysqldump?
#CONFIG_mysql_dump_usessl='yes'
CONFIG_mysql_dump_usessl='no'