软件:Xtrabackup 2.4.7 Mysql 5.7.25(需要先安装,并且要开启log-bin) 操作系统:Centos 7.4 设置打开文件数 (如果你的数据库文件比较多,有可能在备份的时候会提示文件打开数问题) echo '* soft nofile 65535 ' >> /etc/security/limits.conf echo '* hard nofile 65535 ' >> /etc/security/limits.conf 需要退出当前shell 再登录,生效。 安装依赖 yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL perl-Digest-MD5 cd /opt wget http://www.xchinagroup.top/softdown/centos7/03_mysql/percona-xtrabackup-2.4.7-Linux-x86_64.tar.gz tar zxvf percona-xtrabackup-2.4.7-Linux-x86_64.tar.gz mv percona-xtrabackup-2.4.7-Linux-x86_64 xtrabackup-2.4.7 ln -s /root/xtrabackup-2.4.7/bin/xtrabackup /usr/bin/xtrabackup ln -s /root/xtrabackup-2.4.7/bin/innobackupex /usr/bin/innobackupex 编写脚本: mkdir -p /script && cd /script vim xtr.sh #!/bin/bash #全备的总目录 BAK_FULL_DIR="/home/backup/xtrabackup/full" #增备的总目录 BAK_INC_DIR="/home/backup/xtrabackup/inc" XTR_PATH="/usr/bin/innobackupex" MYSQL_CNF="/etc/my.cnf" MYSQL_HOST="localhost" MYSQL_UNAME="root" MYSQL_PASS="windows@123" MYSQLCMD="--user=${MYSQL_UNAME} --password=${MYSQL_PASS} --host=${MYSQL_HOST} " #提示信息 print_help(){ echo "------------------------------------------" echo "Usage: $0 full | inc | help " echo "------------------------------------------" exit 1 } #判断输入的参数个数,或者$1不是full inc 就执行 print_help函数,打印提示信息 if [ $# -ne 1 ];then clear echo "输入的参数不对,参数有且只有一个。" print_help fi if [ "$1" != "full" ];then if [ "$1" != "inc" ];then clear echo "输入的参数不对" print_help fi fi #判断全备总目录是否存在,不存在就创建。 if [ ! -d ${BAK_FULL_DIR} ];then mkdir -p ${BAK_FULL_DIR} fi #判断增备总目录是否存在,不存在就创建。 if [ ! -d ${BAK_INC_DIR} ]; then mkdir -p ${BAK_INC_DIR} fi #全备函数 FullBackup(){ #执行全备的命令 ${XTR_PATH} --defaults-file=${MYSQL_CNF} $MYSQLCMD ${BAK_FULL_DIR} --parallel="3" >/tmp/full.log 2>&1 #判断全备命令是否执行成功,执行不成功,就退出。 if [ $? -ne 0 ]; then echo "Backup error. Please check..." exit else echo "Backup completed...." fi } #增备函数 IncBackup(){ #在开始增备前,从全备总目录(/home/backup/xtrabackup/full)下查找,最新一次的备份(日期时间)目录 NEW_FULL_DIR=`find ${BAK_FULL_DIR} -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -1` #如果在全备总目录下什么也没有找到,就表示没有执行全备,在开始增备前,先执行一次全备。 if [ -z ${NEW_FULL_DIR} ];then #执行全备 FullBackup else #如果有在全备总目录(/home/backup/xtrabackup/full)下找到最新备份(日期时间)目录 #取出它的(日期时间)值,赋值给增备总目录下的新目录变量,全备和增备的日期时间都是同一天,容易区分 NEW_INC_DIR=${BAK_INC_DIR}/${NEW_FULL_DIR} #创建新的 增备(日期时间)目录 mkdir -p ${NEW_INC_DIR} #在新的增备(日期时间)目录下,查找最新的增备(日期时间)目录,赋值给一个变量 NEW_INC_BACKUP=`find ${NEW_INC_DIR} -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -1` #如果这个变量值为空,也就是说,没有执行过增备 if [ -z ${NEW_INC_BACKUP} ];then #这时,增备的基础目录就是 全备总目录(/home/backup/xtrabackup/full)下的 全备最新(日期时间)目录 BASE_DIR=${BAK_FULL_DIR}/${NEW_FULL_DIR} else #否则,增备的基础目录就是,增备总目录(/home/backup/xtrabackup/inc)/最新一次全备的 #日期时间目录/的最新增备(日期时间时间)目录 BASE_DIR=${NEW_INC_DIR}/${NEW_INC_BACKUP} fi #执行增备命令 ${XTR_PATH} --defaults-file=${MYSQL_CNF} --use-memory=64M $MYSQLCMD --incremental-basedir=${BASE_DIR} --incremental ${NEW_INC_DIR} >/tmp/inc.log 2>&1 #判断 增备命令是否执行成功,如果执行不成功,退出程序。 if [ $? -ne 0 ];then echo 'Incremental Backup Complete. ' else exit fi fi } ## 全量备份 if [ "$1" == "full" ];then FullBackup fi ## 增量备份 if [ "$1" == "inc" ];then IncBackup fi ## 删除7天前的备份 find $BAK_FULL_DIR -name "$(date -d '7 days ago' +'%F')_*" | xargs rm -rf find $BAK_INC_DIR -name "$(date -d '7 days ago' +'%F')_*" | xargs rm -rf 保存,退出。 chmod +x xtr.sh 添加到计划任务: crontab -e 30 1 * * * /bin/bash /script/xtr.sh full &>/tmp/xtra_full.log */60 * * * * /bin/bash /script/xtr.sh inc &>/tmp/xtra_inc.log 每天凌晨 1点半,做一次全备 每天每一小时做一次增备