有两个服务器,192.168.0.1 和192.168.0.2,采用nginix+双主模式互为双机热备,做高可用。
现在客户额外给了一台异地的服务器192.168.0.3,要求对两台服务器每天自动化的异地备份,要求不能停机,不能影响主业务流程。
思来想去,采用Mysql自身的mysqldump或者mysqlpump都不太可靠,这两种方式即使设置好参数不锁表,也容易造成服务器内存占用高,可能会影响主业务。
两台数据库服务器的数据文件约2T,要想快又稳,不影响用户操作,能找到的好的方案,只有采用xtrabackup了。
xtrabackup可以实现完整备份和增量备份,并且不会影响mysql本身的运行,也不会增加mysql的性能。这方面就不多说了,有兴趣的可以参考percona xtrabackup官网说明。
为了安全便于恢复,整体方案如下,在数据库服务器本机,每周一次完整备份,每天进行一次完整备份,每天都把备份拷到异地服务器。
本地服务器,每天都要滚动删除历史备份,只保留一周。异地备份服务器,每天也定期清除历史备份,保留完整的两周全备份和增量备份文件。
1:数据库服务器备份脚本,在两台双主服务器都添加该脚本
#!/bin/sh
year=`date +%Y`
month=`date +%m`
day=`date +%d`
week=`date +%w`
today=`date +%Y%m%d`
log=$today.log
CODE=$?
backup_dir=/PRODUCT_DB/data/backups
full_backup_dir=/PRODUCT_DB/data/backups/full
inc_backup_dir=/PRODUCT_DB/data/backups/inc
inc_full_backup_dir=$inc_backup_dir/$today
backup_program=/root/xtrabackup/bin/xtrabackup
config_file=/etc/my.cnf
dba_user=root
dba_password=yourDbPassword
backup_server=192.168.0.3
backup_server_user=root
#在主服务器1上是1,2上则是2
backup_server_fullbackupdir=/UNI/data/backups/1/full
backup_server_incbackupdir=/UNI/data/backups/1/inc
execute_full_backup=0
execute_inc_backup=0
echo "today is:$today"
echo "week day is:$week"
echo "full backup dir is:$backup_dir/full"
echo "incremental backup dir is:$backup_dir/inc/$today"
del_date=`date -d '8 days ago' +%Y%m%d`
echo 'del date is:' $del_date
endDate=`date -d "${del_date}" +%s`
echo 'endDate is:' $endDate
make_full_bak_dir(){
#创建完整备份的目录
if [ ! -d $backup_dir/full ];then
echo "full backup dir:$backup_dir/full is not exist,begin create the directory... "
mkdir -p $backup_dir/full
echo "full backup dir created succeed!"
fi
}
make_inc_bak_dir(){
#创建增量备份的目录
if [ ! -d $backup_dir/inc ];then
echo "incremental backup dir:$backup_dir/inc/$today is not exist,begin create the directory... "
mkdir -p $backup_dir/inc/$today
echo "incremental backup dir created succeed!"
fi
}
full_backup(){
#每当week=6时进行完整备份
echo "function full_backup"
if [ "$week" -eq "6" ];then
echo "begin full backup"
echo "full backup dir is:$full_backup_dir"
echo "it will take a lot of times,