mysql数据库备份

mysql数据库备份脚本

全备份,一天备份一次,备份三个包,每天覆盖一个包
0 1 2三个包
0 0->1 1->2 2-> null

-set-gtid-purged=OFF 

mysqldump加了 -set-gtid-purged=OFF 这个参数,会记录在binlog日志,如果不加,就不会记录在binlog日志,有主从数据库的备份,必须加这个参数,否则在主数据库上导入恢复了数据,主数据库上没有写入到binlog日志,从数据库就不会被同步。就会造成数据丢失

--single_transaction

–single-transaction参数的作用,设置事务的隔离级别为可重复读,即REPEATABLE READ,这样能保证在一个事务中所有相同的查询读取到同样的数据,也就大概保证了在dump期间,如果其他innodb引擎的线程修改了表的数据并提交,对该dump线程的数据并无影响,在这期间不会锁表。

#!/bin/bash
#
# Last updated: pzs
# ----------------------------------------------------------------------
# mysql backup scripts
# make by sunner 
# ----------------------------------------------------------------------
# your mysql login information
# db_user is mysql username
# db_passwd is mysql password
# db_host is mysql host
#
# keep times  is 3 [0 1 2]
# -----------------------------

db_user=user
db_passwd=password
db_host=localhost

# the directory for story your backup file.
backup_dir=/data/backup

# date format for backup file (yyyymmdd hhmiss)
time=`date +%Y-%m-%d%H%M%S`

# mysql, mysqldump and some other bin's path
MYSQL=/usr/local/mysql/bin/mysql
MYSQLDUMP=/usr/local/mysql/bin/mysqldump


# check the directory for store backup is writeable
test ! -w $backup_dir && echo "Error: $backup_dir is un-writeable." && exit 0

# the directory for story the newest backup

for jnt in 0 1 2 
do
test ! -d  $backup_dir/backup.$jnt && mkdir -p  $backup_dir/backup.$jnt
test ! -z  $backup_dir/backup.$jnt/flag && touch $backup_dir/backup.$jnt/flag
done




# delete the oldest backup
rm -rf "$backup_dir/backup.2"
mkdir -p "$backup_dir/backup.2"

# rotate backup directory
for int in  1 0
do
if(test -d "$backup_dir"/backup."$int")
then
next_int=`expr $int + 1`
mv   /$backup_dir/backup.$int/*  /$backup_dir/backup.$next_int/
fi
done




# get all databases
#all_db="$($MYSQL -u $db_user -h $db_host -p$db_passwd -Bse 'show databases')"
#for db in $all_db
#do
#$MYSQLDUMP -u $db_user -h $db_host -p$db_passwd $db | gzip -6 > "$backup_dir/backup.0/$db.$time.sql.gz"
#done

#specfy the database backup
base_db="$($MYSQL -u $db_user -h $db_host -p$db_passwd -S /data/mysql/mysql.sock -Bse 'show databases' | grep -v "information_schema" | grep -v "performance_schema")"
for db in $base_db
do
$MYSQLDUMP -u $db_user -h $db_host -p$db_passwd $db --set-gtid-purged=OFF --single_transaction -S /data/mysql/mysql.sock | gzip -8 > "$backup_dir/backup.0/$db.$time.sql.gz"
done


exit 0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值