2 votes

Atomicité de la sauvegarde du système de fichiers Linux

Sur ma machine Linux, j'utilise un script de sauvegarde maison qui est en fait quelques appels rsync. J'ai testé mes restaurations et tout semble fonctionner, mais y a-t-il des problèmes possibles avec cette configuration ?

Ma principale préoccupation est l'atomicité de cette sauvegarde. Pour autant que je sache, les fichiers sous Linux ne sont pas verrouillés. Les fichiers peuvent-ils être copiés s'ils ne sont que partiellement écrits ? Est-il possible que des bases de données, des fichiers xml ou tout autre fichier fréquemment écrit ayant une structure ou une syntaxe soient cassés ou inutilisables à l'emplacement de la sauvegarde ?

3voto

David Spillett Points 23094

Pour une sauvegarde atomique, vous devez idéalement arrêter tout accès en écriture à la zone en cours de sauvegarde, ce qui signifie arrêter tous les services qui pourraient y écrire.

Si vous utilisez LVM, la fonction d'instantané rend cette opération beaucoup moins onéreuse, car vous ne devez arrêter les services que le temps de créer l'instantané en lecture seule, ce qui est presque instantané. Vous effectuez la sauvegarde à partir de l'instantané et le supprimez ensuite jusqu'à ce qu'un nouvel instantané soit nécessaire pour la prochaine sauvegarde. Voir http://tldp.org/HOWTO/LVM-HOWTO/snapshots_backup.html pour plus de détails.

Ne laissez pas le(s) snapshot(s) actif(s) plus longtemps que nécessaire, car cela a des conséquences sur les performances (bien que cela soit généralement beaucoup moins problématique que d'avoir une période d'arrêt complète pendant l'exécution des sauvegardes).

2voto

jassuncao Points 121

En ce qui concerne les bases de données, il est parfois plus sûr de vider les données et de les sauvegarder. Par exemple, MySql est livré avec l'outil mysqldump qui peut accomplir cette tâche.

J'utilise Bacula pour faire mes sauvegardes, et je l'ai configuré pour exécuter mysqldump pour vider les bases de données dans un répertoire pour les vidages et ensuite bacula sauvegarde ce répertoire. Je fais quelque chose de similaire pour SVN.

Je n'ai pas automatisé la procédure de restauration, mais au moins j'ai les données dans un format facile à importer dans MySql et probablement dans d'autres bases de données puisque le fichier de vidage est juste du SQL.

1voto

user26528 Points 282

Oui, ils peuvent toujours être copiés. Comme suggéré ci-dessus, je viderais les bases de données dans un fichier, je les compresserais pour une bonne compression et je les enverrais par rsync à l'endroit où vous le souhaitez.

# mysqldump --all-databases -u user -p | bzip2 -c > mysqlbackup.sql.bz2
# <rsync stuff here>

Ensuite, pour le charger dans la nouvelle base de données

# bzip2 -d mysqlbackup.sql.bz2
# mysql -u user -p < mysqlbackup.sql

Pour atténuer encore plus la paranoïa, j'ai parfois recours à lsof -F | grep <keyword> pour voir si le fichier que je veux transférer est effectivement utilisé, ou ouvert. Si lsof renvoie null, je sais que je peux continuer. Vous pourriez l'utiliser pour rechercher une table MySQL ouverte pendant que MySQL y écrit. Une fois que lsof renvoie null, vous pouvez continuer à transférer des fichiers.

0voto

Iain Points 4621

Selon cette page vous devez sauvegarder la base de données dans un fichier et l'arrêter avant le rsync. Ce n'est pas idéal car vous devez sauvegarder toute la base de données à chaque fois. Une procédure spécialisée de sauvegarde de la base de données est préférable.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X