Полный дамп MySQL — mysql_full_backup.
#!/bin/bash sqldump_path=`which mysqldump` backup_dir='/backup/mysql/full' mkdir -p $backup_dir mysql_user="root" mysql_password="password" backupfile='mysql_full_backup'`date +%Y%m%d`'.sql' rm -f $backup_dir/* $sqldump_path -u $mysql_user --password=$mysql_password --events --flush-logs --single-transaction --master-data=2 --all-databases | gzip > $backup_dir/$backupfile.gz
Инкрементальный бекап bin-log’s — mysql_incr_backup.
#!/bin/bash backupdir="/backup/mysql/full" binlogdir="/var/log/mysql" binlogindex="mysql-bin.index" mysql_user="root" mysql_password="password" sql_adm_path=`which mysqladmin` #flush logs $sql_adm_path -u $mysql_user --password=$mysql_password flush-logs #Determine current log file cur_log_file=`tail -n 1 $binlogdir\/$binlogindex | sed 's/^.*\///g'` cp_file_list=`egrep -v $cur_log_file $binlogdir\/$binlogindex | sed 's/^.*\///g'` cur_dir=`pwd` cd $binlogdir cp $cp_file_list $backupdir echo "PURGE BINARY LOGS TO '$cur_log_file';" | mysql -u $mysql_user --password=$mysql_password cd $cur_dir
Дамп всех БД по отдельности — mysql_db_backup.
#!/bin/bash
## Main Environment
date=`date +%F_%R:%S`
host=`hostname -f`
## MySQL Environment
mysqldump=`which mysqldump`
mysql=`which mysql`
mysql_user="root"
mysql_password="password"
## DB backup Environment
databases=`$mysql --user=$mysql_user --password=$mysql_password -e 'show databases' -s --skip-column-names`
for database in $databases; do
backup_dir='/backup/mysql/'$host'/'$database''
backupfile=''$database'_'$date'.sql'
mkdir -p $backup_dir
$mysqldump -u $mysql_user --password=$mysql_password --events --flush-logs --single-transaction --master-data=2 --databases $database | gzip > $backup_dir/$backupfile.gz
find $backup_dir -type f -mtime +14 -exec rm {} \;
done
Crontab
# MySQL backup 0 20 * * 5 /usr/local/scripts/mysql_full_backup >/dev/zero 0 20 * * 1-4,6,7 /usr/local/scripts/mysql_incr_backup >/dev/zero 30 20 * * 3 /usr/local/scripts/mysql_db_backup >/dev/zero