XtraBackup是Percona公司的开源项目,用以实现类似Innodb官方的热备份工具InnoDB Hot Backup的功能,它支持在线热备份(备份时不影响数据读写)。到目前为止,最新的版本为Percona XtraBackup 2.4.7.
XtraBackup有很多功能和优点:例如支持全备、增量备份、部分备份;支持压缩备份;备份不影响数据读写、事务等,但是也有缺陷不足:例如不支持脱机备份、不支持直接备份到磁带设备、不支持Cloud Back,MyISAM的备份也会阻塞。不过这些小瑕疵不影响XtraBackup成为一款流行的MySQL备份工具。另外,请注意XtraBackup只支持Linux平台,不支持Windows平台。
参考链接:http://www.cnblogs.com/kerrycode/p/6933024.html
#下载对应软件包 cd /usr/local/src/ wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/tarball/percona-xtrabackup-2.4.9-Linux-x86_64.tar.gz
#解压并重命名 tar -zxvf percona-xtrabackup-2.4.9-Linux-x86_64.tar.gz -C /usr/local cd .. && mv percona-xtrabackup-2.4.9-Linux-x86_64/ xtrabackup
#设置环境变量并生效 echo "export PATH=\$PATH:/usr/local/xtrabackup/bin" >> /etc/profile source /etc/profile
|
参考链接:https://www.cnblogs.com/zhoujinyi/p/5893333.html
#!/bin/bash #innobackupex 增量备份脚本 ##################################################################################
BACKUP_DATE=$(date +%Y-%m-%d_%H_%M_%S) BACKUP_DIR=/data/mysql/backup FULLBACKUP_PATH=$BACKUP_DIR/full INCRBACKUP_PATH=$BACKUP_DIR/incr BACKUP_LOG_PATH=$BACKUP_DIR/logs BACKUP_KEEP_DAY=7 MYSQL_CONF=/etc/my.cnf INNOBACKUPEX=/usr/local/xtrabackup/bin/innobackupex MYSQL_CMD=/usr/bin/mysql MYSQL_CONNECT="--host=****--user=**** --password=**** --port=3306" MAIL_FROM="root@`hostname`" MAIL_TO="[email protected]" MAIL_TO_ERROR="[email protected]"
error() { echo "$1" 1>&2 exit 1 }
#before the backup, check the system enviroment setting and mysql status and so on mysql_backup_check() {
if [ ! -d $FULLBACKUP_PATH ];then mkdir -p $FULLBACKUP_PATH fi
if [ ! -d $INCRBACKUP_PATH ];then mkdir -p $INCRBACKUP_PATH fi
if [ ! -d $BACKUP_LOG_PATH ];then mkdir -p $BACKUP_LOG_PATH fi
if [ ! -x $INNOBACKUPEX ];then error "$INNOBACKUPEX did not exists" fi
if [ ! -x $MYSQL_CMD ];then error "mysql client did not exists!" fi
mysql_status=`netstat -nl | awk 'NR>2{if ($4 ~ /.*:3306/) {print "Yes";exit 0}}'`
if [ "$mysql_status" != "Yes" ];then error "MySQL did not start. please check it" fi
if ! `echo 'exit' | $MYSQL_CMD -s $MYSQL_CONNECT` ; then error "please check the user and password is correct!" fi }
xtra_backup() { if [ $# = 2 ];then $INNOBACKUPEX --defaults-file=$MYSQL_CONF $MYSQL_CONNECT --compress --compress-threads=8 --databases="yjk yjk_mall_2_0" --no-timestamp $1/full_$BACKUP_DATE>$2 2>&1 elif [ $# = 3 ];then $INNOBACKUPEX --defaults-file=$MYSQL_CONF $MYSQL_CONNECT --compress --compress-threads=8 --databases="yjk yjk_mall_2_0" --no-timestamp --incremental $1/incr_$BACKUP_DATE --incremental-basedir $2 >$3 2>&1 else error "the parameter is not correct" fi }
lastest_fullback_dir() { if [ -d $1 ]; then path=`ls -t $1 |head -n 1` if [ $path ]; then echo $path else error "lastest_fullback_dir(): 目录为空,没有最新目录" fi else error "lastest_fullback_dir(): 目录不存在或者不是目录" fi }
mysql_full_backup() { xtra_backup $FULLBACKUP_PATH $BACKUP_LOG_PATH/full_$BACKUP_DATE.log
if [ "${PIPESTATUS[0]}" -ne 0 ]; then (echo "Subject: MySQL Backup Failed: MySQL Backup failed on `hostname`"; cat ${BACKUP_LOG_PATH}/full_${BACKUP_DATE}.log; ) | /usr/sbin/sendmail -O NoRecipientAction=add-to -f${MAIL_FROM} ${MAIL_TO} else (echo "Subject: MySQL Backup Success: MySQL Backup Succeed on `hostname`"; cat ${BACKUP_LOG_PATH}/full_${BACKUP_DATE}.log; ) | /usr/sbin/sendmail -O NoRecipientAction=add-to -f${MAIL_FROM} ${MAIL_TO} fi
#cd $FULLBACKUP_PATH
#ls -t | tail -n +$BACKUP_KEEP_DAY | xargs rm -rf find ${FULLBACKUP_PATH} -mtime +$BACKUP_KEEP_DAY -name "*" -exec rm -rf {} \; }
mysql_incr_backup() {
LATEST_FULL_BACKUP=`find $FULLBACKUP_PATH -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -1`
LATEST_FULL_BACKUP_TIME=`stat -c %Y $FULLBACKUP_PATH/$LATEST_FULL_BACKUP`
if [ $LATEST_FULL_BACKUP ];then #不是第一次增量备份,以最新的增量备份目录为base_dir xtra_backup $INCRBACKUP_PATH $FULLBACKUP_PATH/`lastest_fullback_dir $FULLBACKUP_PATH` $BACKUP_LOG_PATH/incr_$BACKUP_DATE.log else # the first incremental backup need do full backup first xtra_backup $FULLBACKUP_PATH $BACKUP_LOG_PATH/full_$BACKUP_DATE.log
if [ "${PIPESTATUS[0]}" -ne 0 ]; then (echo "Subject: MySQL Backup Failed: MySQL Backup failed on `hostname`"; cat ${BACKUP_LOG_PATH}/incr_${BACKUP_DATE}.log; ) | /usr/sbin/sendmail -O NoRecipientAction=add-to -f${MAIL_FROM} ${MAIL_TO} fi fi
#cd ${INCRBACKUP_PATH} #ls -t | tail -n +$BACKUP_KEEP_DAY | xargs rm -rf find ${INCRBACKUP_PATH} -mtime +$BACKUP_KEEP_DAY -name "*" -exec rm -rf {} \;
}
case $1 in
full) mysql_backup_check mysql_full_backup ;;
incr) mysql_backup_check mysql_incr_backup ;;
*) echo "full backup" echo "incr backup" ;; esac |