MySQL异地增量备份
#!/bin/sh#MySQL Infosqluser=rootsqlpsw=root/usr/bin/mysqladmin -u$sqluser -p$sqlpsw flush-logs --default-character-set=GBKDATADIR=/data/mysqlBAKDIR=/home/backup/mysql/dailyTEMPDIR=/home/backup/mysql/tempBINLOGNAME='mysql-bin'cd $DATADIRFILELIST=$(cat $BINLOGNAME.index | cut -c3-)## COUNTER numberCOUNTER=0for file in $FILELISTdoCOUNTER=$(expr $COUNTER + 1)doneNextNum=0for file in $FILELISTdoNextNum=$(expr $NextNum + 1)if test "$NextNum" = "$COUNTER"thenecho "skip lastest"elsedest=$BAKDIR/$fileif test -e $destthenecho "skip exist $dest"elsecp $file $TEMPDIRfifidoneecho "backup mysql binlog ok"sleep 2scd $TEMPDIRtarname=binlog$(date +%y%m%d).tar.gztar czf $tarname ./mysql-bin*sleep 1s#ftp Infoftphost=111.111.11.11ftpname=xxxftppsw=pswcd $TEMPDIRftp -i -n <<!open $ftphostuser $ftpname $ftppswtype binaryput $tarnameclosebye!sleep 10secho "end upload"cd $TEMPDIRmv $BINLOGNAME* $BAKDIRrm -rf $tarnameecho "end"
??
说明:
mysqladmin -u$sqluser -p$sqlpsw flush-logs:mysql自动把内存中的日志放到日志文件binlog的最后一个文件里,并生成一个空的新日志文件,之后只需要备份前面的几个即可,最后一个因为是刚生成的,并且是空的,所以不需备份。
关于binlog可参考http://cxhyrf-sina-com.iteye.com/blog/1680055
?
大概思路:
????把datadir和bakdir目录中的binlog进行对比,如bakdir中没有,且该binlog不是最后一个,则把该binlog复制到tempdir中;这样tempdir中的binlog都是新增的binlog。之后把tempdir中的binlog进行打包压缩,ftp到另一个服务器上。
?
?