Dumpmysql.sh : Différence entre versions
De wikiGite
(16 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 2 : | Ligne 2 : | ||
#!/bin/bash | #!/bin/bash | ||
# FSo 2010 | # FSo 2010 | ||
− | # V1. | + | # V1.3 |
# The script and its config file must be placed in /opt/systools directory | # The script and its config file must be placed in /opt/systools directory | ||
# or change line bellow | # or change line bellow | ||
− | |||
+ | if [ -f $(dirname $0)/dumpmysql.conf ] | ||
+ | then | ||
+ | . $(dirname $0)/dumpmysql.conf | ||
+ | else | ||
+ | echo "$(dirname $0)/dumpmysql.conf introuvable !" | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | ERROR="" | ||
if [ ! -d $BACKUP_DIR ] | if [ ! -d $BACKUP_DIR ] | ||
then | then | ||
Ligne 12 : | Ligne 20 : | ||
fi | fi | ||
cd $BACKUP_DIR | cd $BACKUP_DIR | ||
+ | date > $LOG/dumpmysql.log | ||
+ | IFS=$'\n' | ||
for DB in $BASE | for DB in $BASE | ||
do | do | ||
− | mysqldump $DB $DUMP_OPTS --password=$PASSWORD > ${HOST}_${DB}_${JOUR}.sql | + | echo "dump $DB" >> $LOG/dumpmysql.log |
− | + | mysqldump "$DB" $DUMP_OPTS --password=$PASSWORD > my_${HOST}_"${DB}"_${JOUR}.sql 2>> $LOG/dumpmysql.log | |
− | + | if [ $? -ne 0 ] | |
+ | then | ||
+ | if [ "$ERROR" == "" ] | ||
+ | then | ||
+ | ERROR=$DB | ||
+ | else | ||
+ | ERROR=${ERROR},$DB | ||
+ | fi | ||
+ | else | ||
+ | rm -f my_${HOST}_"${DB}"_${JOUR}.sql.gz 2>> $LOG/dumpmysql.log | ||
+ | gzip my_${HOST}_"${DB}"_${JOUR}.sql 2>> $LOG/dumpmysql.log | ||
+ | fi | ||
done | done | ||
+ | if [ "$ERROR" != "" ] | ||
+ | then | ||
+ | ( | ||
+ | echo "Subject: Mysqldump $(hostname) : $ERROR dump failed" | ||
+ | cat $LOG/dumpmysql.log | ||
+ | ) | /usr/sbin/sendmail $REPORT_EMAIL | ||
+ | fi | ||
+ | date >>/opt/systools/dumpmysql.log | ||
+ | |||
Puis créer un fichier de config dumpmysql.conf | Puis créer un fichier de config dumpmysql.conf | ||
− | |||
# FSo 2010 | # FSo 2010 | ||
# dumpmysql.sh config file | # dumpmysql.sh config file | ||
− | + | # v1.1 | |
− | + | REPORT_EMAIL=<mail de l'admin> | |
− | PASSWORD=<mot de passe | + | HOST=$(hostname) |
+ | PASSWORD=<mot de passe mysql> | ||
BACKUP_DIR=/home/backup | BACKUP_DIR=/home/backup | ||
+ | LOG=dumpmysql.log | ||
JOUR=$(date +%w) | JOUR=$(date +%w) | ||
− | # One or some bases separated by | + | # One base |
− | #BASE= | + | #BASE=<une base> |
+ | # or some bases, separated by newline | ||
+ | #BASE="plusieurs | ||
+ | #bases | ||
+ | #une | ||
+ | #par | ||
+ | #ligne" | ||
# OR all databases except mysql | # OR all databases except mysql | ||
− | BASE=$(mysql --execute "show databases\G" --password=$PASSWORD | grep -v row | sed -e 's/Database: //g' | grep -v mysql) | + | BASE=$(mysql --execute "show databases\G" --password=$PASSWORD | grep -v row | sed -e 's/Database: //g' | grep -v mysql | grep -v information_schema | grep -v performance_schema) |
# Some options required | # Some options required | ||
− | #DUMP_OPTS=" | + | #DUMP_OPTS="" |
− | DUMP_OPTS="" | + | DUMP_OPTS="--routines" |
+ | |||
Modifier le host, le mot de passe, et commenter/décommenter selon qu'on veut une sauvegarde de une ou quelques bases, ou toutes les bases, et si on veut ajouter des options à mysqldump (notamment, "--routines" est nécessaire en v5 pour sauvegarder aussi les procédures et fonctions, mais n'est pas reconnue en v4). | Modifier le host, le mot de passe, et commenter/décommenter selon qu'on veut une sauvegarde de une ou quelques bases, ou toutes les bases, et si on veut ajouter des options à mysqldump (notamment, "--routines" est nécessaire en v5 pour sauvegarder aussi les procédures et fonctions, mais n'est pas reconnue en v4). | ||
Ne pas oublier un minimum de protection | Ne pas oublier un minimum de protection | ||
chmod 600 dumpmysql.conf | chmod 600 dumpmysql.conf | ||
− | Si ça n'a pas déjà été fait, planifier la sauvegarde par un lien dans | + | Si ça n'a pas déjà été fait (par maj_script.sh par exemple), planifier la sauvegarde par un lien dans /etc/cron.daily |
− | + | ln -s /opt/systools/dumpmysql.sh /etc/cron.daily/dumpmysql | |
− | ln -s /opt/systools/dumpmysql.sh dumpmysql | ||
et la lancer une première fois manuellement | et la lancer une première fois manuellement | ||
− | ./dumpmysql | + | /etc/cron.daily/dumpmysql |
ls -l /home/backup | ls -l /home/backup |
Version actuelle datée du 5 juin 2012 à 17:46
Voir Mise_à_jour_automatique_des_scripts pour la création automatique du script /opt/systools/dumpmysql.sh :
#!/bin/bash # FSo 2010 # V1.3 # The script and its config file must be placed in /opt/systools directory # or change line bellow if [ -f $(dirname $0)/dumpmysql.conf ] then . $(dirname $0)/dumpmysql.conf else echo "$(dirname $0)/dumpmysql.conf introuvable !" exit 1 fi ERROR="" if [ ! -d $BACKUP_DIR ] then mkdir -p $BACKUP_DIR fi cd $BACKUP_DIR date > $LOG/dumpmysql.log IFS=$'\n' for DB in $BASE do echo "dump $DB" >> $LOG/dumpmysql.log mysqldump "$DB" $DUMP_OPTS --password=$PASSWORD > my_${HOST}_"${DB}"_${JOUR}.sql 2>> $LOG/dumpmysql.log if [ $? -ne 0 ] then if [ "$ERROR" == "" ] then ERROR=$DB else ERROR=${ERROR},$DB fi else rm -f my_${HOST}_"${DB}"_${JOUR}.sql.gz 2>> $LOG/dumpmysql.log gzip my_${HOST}_"${DB}"_${JOUR}.sql 2>> $LOG/dumpmysql.log fi done if [ "$ERROR" != "" ] then ( echo "Subject: Mysqldump $(hostname) : $ERROR dump failed" cat $LOG/dumpmysql.log ) | /usr/sbin/sendmail $REPORT_EMAIL fi date >>/opt/systools/dumpmysql.log
Puis créer un fichier de config dumpmysql.conf
# FSo 2010 # dumpmysql.sh config file # v1.1 REPORT_EMAIL=<mail de l'admin> HOST=$(hostname) PASSWORD=<mot de passe mysql> BACKUP_DIR=/home/backup LOG=dumpmysql.log JOUR=$(date +%w) # One base #BASE=<une base> # or some bases, separated by newline #BASE="plusieurs #bases #une #par #ligne" # OR all databases except mysql BASE=$(mysql --execute "show databases\G" --password=$PASSWORD | grep -v row | sed -e 's/Database: //g' | grep -v mysql | grep -v information_schema | grep -v performance_schema) # Some options required #DUMP_OPTS="" DUMP_OPTS="--routines"
Modifier le host, le mot de passe, et commenter/décommenter selon qu'on veut une sauvegarde de une ou quelques bases, ou toutes les bases, et si on veut ajouter des options à mysqldump (notamment, "--routines" est nécessaire en v5 pour sauvegarder aussi les procédures et fonctions, mais n'est pas reconnue en v4).
Ne pas oublier un minimum de protection
chmod 600 dumpmysql.conf
Si ça n'a pas déjà été fait (par maj_script.sh par exemple), planifier la sauvegarde par un lien dans /etc/cron.daily
ln -s /opt/systools/dumpmysql.sh /etc/cron.daily/dumpmysql
et la lancer une première fois manuellement
/etc/cron.daily/dumpmysql ls -l /home/backup