`
宇宙浪子
  • 浏览: 46429 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

MySQL增量备份异地备份

阅读更多
#!/bin/sh

#MySQL Info
sqluser=root
sqlpsw=root
#sqluser2=root
#sqlpsw2=root

POSITION=/home/backup/position
if test ! -e $POSITION
then
#echo "The first time daily backup, the file of position deesn't exist or it's content is null"
mysql  -u$sqluser -p$sqlpsw -e "show master status\G;" --default-character-set=gbk | awk '{print $2}' | sed -n '2,3p' > $POSITION
else
DATADIR=/data/mysql
BAKDIR=/home/backup/mysql/daily
TEMPDIR=/home/backup/mysql/temp
DATABASE1=a
DATABASE2=b

startbinlog=$(sed -n '1p' $POSITION)
startposition=$(sed -n '2p' $POSITION)
#echo "startbinlog: "$startbinlog
#echo "startposition: "$startposition

rm -rf $POSITION
mysql  -u$sqluser -p$sqlpsw -e "show master status\G;" --default-character-set=gbk | awk '{print $2}' | sed -n '2,3p' > $POSITION

stopbinlog=$(sed -n '1p' $POSITION)
stopposition=$(sed -n '2p' $POSITION)
#echo "stopbinlog: "$stopbinlog
#echo "stopposition: "$stopposition

/usr/bin/mysqladmin -u$sqluser -p$sqlpsw flush-logs --default-character-set=GBK
#/usr/bin/mysqladmin -u$sqluser2 -p$sqlpsw2 flush-logs --default-character-set=GBK


BINLOGNAME='mysql-bin'
cd $DATADIR
FILELIST=$(cat $BINLOGNAME.index | cut -c3-)


if test  "startbinlog" = "$stopbinlog"
then
#echo "startbinlog = stopbinlog"
mysqlbinlog --start-position=$startposition  --stop-position=$stopposition -d $DATABASE1 $startbinlog >> $TEMPDIR/$DATABASE1$(date +%y%m%d)1.sql
mysqlbinlog --start-position=$startposition  --stop-position=$stopposition -d $DATABASE2 $startbinlog >> $TEMPDIR/$DATABASE2$(date +%y%m%d)1.sql
else
startline=$(awk "/$startbinlog/{print NR}" $DATADIR/$BINLOGNAME.index)
stopline=$(wc -l $DATADIR/$BINLOGNAME.index | awk '{print $1}')
#echo "startline: "$startline
#echo "stopline: "$stopline

for i in $(seq $startline $stopline)
do
binlog=$(sed -n "$i"p $DATADIR/$BINLOGNAME.index | sed 's/.\///g')
#binlog=$(sed -n "$i"p $DATADIR/$BINLOGNAME.index | cut -c3-)
#echo "binlog: "$binlog
case "$binlog" in
	"$startbinlog")
		mysqlbinlog --start-position=$startposition -d $DATABASE1 $binlog >> $TEMPDIR/$DATABASE1$(date +%y%m%d)$i.sql
		mysqlbinlog --start-position=$startposition -d $DATABASE2 $binlog >> $TEMPDIR/$DATABASE2$(date +%y%m%d)$i.sql;;
	"$stopbinlog")
		mysqlbinlog --stop-position=$stopposition -d $DATABASE1 $binlog >> $TEMPDIR/$DATABASE1$(date +%y%m%d)$i.sql
		mysqlbinlog --stop-position=$stopposition -d $DATABASE2 $binlog >> $TEMPDIR/$DATABASE2$(date +%y%m%d)$i.sql;;
	*)
		mysqlbinlog -d $DATABASE1 $binlog >> $TEMPDIR/$DATABASE1$(date +%y%m%d)$i.sql
		mysqlbinlog -d $DATABASE2 $binlog >> $TEMPDIR/$DATABASE2$(date +%y%m%d)$i.sql;;
esac
done
#echo "backup mysql binlog ok"
fi

sleep 2s

cd $TEMPDIR

#delete last daily backup tar files
rm -rf daily$DATABASE1$(date -d "-1 day" +%y%m%d).tar.gz
rm -rf daily$DATABASE2$(date -d "-1 day" +%y%m%d).tar.gz

tarname1=daily$DATABASE1$(date +%y%m%d).tar.gz
tarname2=daily$DATABASE2$(date +%y%m%d).tar.gz
tar czf $tarname1 ./$DATABASE1*
tar czf $tarname2 ./$DATABASE2*
sleep 1s

#ftp Info
ftphost=11.11.11.11
ftpname=dal
ftppsw=psw
REMOTEDIR=dailybackup

ftp -i -n <<!
open $ftphost
user $ftpname $ftppsw
type binary
cd $REMOTEDIR
put $tarname1
put $tarname2
close
bye
!
sleep 10s

#echo "end upload"

#cd $TEMPDIR
rm -rf $DATABASE1*
rm -rf $DATABASE2*

#echo "end"

fi


  

说明:


 

show master status:该命令查看当前的binlog及position。


 

mysqladmin -u$sqluser -p$sqlpsw flush-logs:mysql自动把内存中的日志放到日志文件binlog的最后一个文件里,并生成一个空的新日志文件,之后只需要备份前面的几个即可,最后一个因为是刚生成的,并且是空的,所以不需备份。

关于binlog可参考http://cxhyrf-sina-com.iteye.com/blog/1680055


大概思路:

    在备份之前需先执行一次。第一次执行备份时,利用show master status获得startbinlog、startposition,并放到position文件中;之后每次执行,都获取当前的binlog、position作为stopbinlog、stopposition,并放到position文件中,之后flush-logs。利用startbinlog、startposition、stopbinlog、stopposition及binlog即可导出相应的sql,之后压缩、ftp,然后就ok了。

 

 

分享到:
评论

相关推荐

    Redmine在Windows下实现自动备份和异地备份

    Redmine在Windows下实现自动备份和异地备份 1.Redmine备份内容 Redmine在Windows下的自动备份实现,包括: 1)Redmine目录的全备份(1周或1个月备份1次,由windows计划来调度执行),将整个Redmine安装的文件夹全部...

    致远A6 备份重启脚本优化

    工具来源致远官方。1,启动服务器时,脚本将清除WORK中的缓存。2,服务关闭时自动杀死java进程。...另外关于异地备份问题可以提供点经验,我是用微软自己的文件夹同步工具,在服务关闭后启动前进行同步。

    多备份企业文件云备份软件 v2.2.12.0030.zip

    10、智能的增量备份恢复功能,能够恢复出与每次执行时源目录完全一样的目录结构和文件。 11、异地容灾备份功能:文件一旦备份,可以在任何一台电脑上进行文件恢复,数据永不丢失。 12、支持在任务执行后发送执行...

    多备份-企业级文件云备份软件 v2.2.12.0030.exe

    10、智能的增量备份恢复功能,能够恢复出与每次执行时源目录完全一样的目录结构和文件。 11、异地容灾备份功能:文件一旦备份,可以在任何一台电脑上进行文件恢复,数据永不丢失。 12、支持在任务执行后发送执行...

    睿备份 v4.2.5.zip

    跨平台支持本地/远程/FTP文件、MSSQL、ORACLE、MySQL、PostgreSQL、达梦等数据库完全、增量、事务日志备份与恢复。 只需一机安装,即可管理无限台计算机的数据库/文件备份;类Windows计划任务模式的备份任务设置,...

    睿备份(IBAK)V3.4.1

    跨平台支持本地/远程文件、MSSQL、ORACLE、MySQL、PostgreSQL、达梦等数据库完全、增量、事务日志备份。 类Windows计划任务模式的备份任务设置,可自由组合无限复合式备份任务;支持备份文件ZIP压缩后通过Lan/Ftp/...

    企业级文件云备份软件-多备份windows客户端

     10、智能的增量备份恢复功能,能够恢复出与每次执行时源目录完全一样的目录结构和文件。  11、异地容灾备份功能:文件一旦备份,可以在任何一台电脑上进行文件恢复,数据永不丢失。  12、支持在任务执行后发送...

    DBSync 1.0版本,通用型的同步软件,支持SQL、NoSQL各种数据库,用于系统对接、数据备份、异地传输等。

    既支持同构数据库之间的同步,如Access到Access,MySQL到MySQL,又支持异构数据库同步,如Access到SQLServer、SQLServer到MySQL、MySQL到Oracle等。 ● 支持增量同步 既支持简单的复制式同步(Copy),又支持增量...

    定时备份 Mysql并上传到七牛的方法

    我们可能不想每次都手动去备份,也不想每次都那么耗时间的去下载,也不想就放在服务器上丢了,因为我们需要异地备份。那我们可以尝试,写个脚本定时备份数据库,然后自动上传到指定服务器或云存储。 这里,我们说说 ...

    中标麒麟服务器操作系统介绍.pdf

    现计划任务、增量差分备份支持);基于web方式的备份 和恢复的配置管理,并能够对备份结果进行短信、邮件 通知 核心参数调整工具 提供图形化核心参数调整工具,提供对Xen和KVM的支 持,包括全虚拟化和半虚拟化,提供...

Global site tag (gtag.js) - Google Analytics