#! /bin/bash # script de sauvegarde mysql # pour version 5.7, ne sauvegarde pas la base information_schema # sauvegarde également les privilèges rotate=15 defaultfile=/root/.my.cnf rdir=${1:-/root/backups/mysql} dir=${rdir}/$(date "+%Y.%m.%d") error=0 status_file=/var/run/zabbix/backup_mysql.status mkdir -p $dir cd $dir # check if we use binlog log_bin=$(mysql --defaults-file=${defaultfile} --batch -e "show variables like 'log_bin'" --skip-column-names| awk '{print $2}') if [ log_bin='OFF' ] ; then master_data_option='' ; else master_data_option='--master-data=2' ; fi bases=$(mysql --defaults-file=${defaultfile} --batch -e 'show databases' --skip-column-names) for b in $bases ; do if [ "$b" == "information_schema" ] ; then continue ; fi if [ "$b" == "performance_schema" ] ; then continue ; fi mysqldump --defaults-file=${defaultfile} --single-transaction $master_data_option --events --routines --databases $b --opt > ${b}.sql let "error=$error+$?" gzip --force ${b}.sql done mysql --defaults-file=${defaultfile} -BNe "select concat('\'',user,'\'@\'',host,'\'') from mysql.user where user != 'root'" | \ while read uh; do mysql --defaults-file=${defaultfile} -BNe "show grants for $uh" | sed 's/ $/;/; s/\\\\/\\/g'; done > grants.sql if [ $error -eq 0 ] ; then find $rdir -maxdepth 1 -type d -mtime +${rotate} -exec rm -fr {} \; fi test -d ${status_file%/*} && echo $error > $status_file exit $error