[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: mysqldump en ignorant mysql



Le 22/04/10 à 00:06, Xavier Maillard <xavier@maillard.im> a écrit :

> > Voila un petit script que j'utilise pour sauvegarder mes bases:
> > 
> > #!/bin/sh
> > 
> > for i in `echo show databases | mysql | egrep -v '(mysql)'` ; do
> >          echo $i
> >          mysqldump -e $i | gzip > ~/$i.sql.gz
> > done
> 
> J'espere que l'integrite et la coherence de tes donnees ne sont
> pas des choses importantes parce que c'est pas terrible tout ca;
> quid pour tes tables innodb par exemple ?

Il vaut mieux améliorer un peu avec du lock (et virer la 1re ligne de la sortie du show databases qui est le titre "Database")

OPTS="" # mettre ici les options qui vont bien pour avoir accès à toutes les bases, ex '--defaults-file=/etc/mysql/debian.cnf'
BASEDUMP='~' # le répertoire des backups
mysql $OPTS -e 'show databases' | sed -e '1d; /^mysql$/d;' | while read db
do
  dbf="$BASEDUMP/$db.sql" # on peut ajouter un suffixe en fonction du jour
  # par exemple date '+%A' pour tourner sur les 7 derniers jours
  echo "[$(date '+%T')] début du backup de $db"
  mysql -e "FLUSH TABLES WITH READ LOCK;"
  mysqldump -e $i > "$dbf"
  mysql -e "UNLOCK TABLES;"
  bzip2 "$dbf"
  echo "[$(date '+%T')] fin du backup de $db"
done

Attention :
- script écrit sans aucun test, à vous de vérifier avant de lancer
- le flush with read lock bloque toutes les bases en écriture, sur un serveur en prod ça peut vite faire exploser le load (les
thread qui veulent écrire sont mis en attente, ça dépend donc de leur nombre /s et de la durée du dump, d'où la compression
après le unlock).

-- 
Daniel

Quand on est trop bonne pâte, on risque de finir
dans le pétrin.
Pierre Dac


Reply to: