og-bin=mysql-bin_Linux下如何增量增量传输MySQL binlog日志

在实际的工作中我们遇到了一个问题,MySQL 5.5 我们备份使用的mysqldump,然后每天传输的备份到备份机器,但是binlog却不好传输主要要考虑几个问题:

1、binlog 没法取时间,按照什么规则来传?

2、binlog的传输并不是每次都全部传输过去,而是需要增量的。

3、binlog的最后一个日志是在使用的是不能传输的。

4、为了更通用需要使用一个前缀,因为每个数据库的binlog前缀是可以自己指定的

如 mysqlbin.000001

那么有了上面的问题,如何解决?也许shell脚本能够完成,但是我选择使用C/C++ 和LINUX系统函数 opendir readdir lstat来完成

这是我最后挂载的脚本

#!/bin/shTIME_TAG=`date +%Y%m%d`/root/ftptool/tool  /dbdata/data/  /root/ftptool/ mysql-bin > tool_${TIME_TAG}.logif [ $? != 0  ]; thenecho "tool failed"exitelseecho "tool sucess!"ficat /root/ftptool/ftphead > /root/ftptool/ftp_${TIME_TAG}.sh

cat /root/ftptool/${TIME_TAG} >> /root/ftptool/ftp_${TIME_TAG}.sh

cat /root/ftptool/ftptail >> /root/ftptool/ftp_${TIME_TAG}.shchmod 755 /root/ftptool/ftp_${TIME_TAG}.shsh /root/ftptool/ftp_${TIME_TAG}.sh

实际上ftp_${TIME_TAG}.sh来自3个部分

1、ftphead --这个很简单自己写明白ip 用户名密码就好了,如下:

#!/bin/sh

ftp -i -v -n<< EOF

open 192.168.*.*

user mysql ****

cd /backup/mysql

bin

2、ftptail  这个更简单

quit

EOF

就这点

3、cat ${TIME_TAG}

这部分是我自己写的工具tool 生成的

工具使用如下:

Usage:./tool binlogdir ftpdir binlogprefix

需要一个binlog目录 一个ftp目录和binlong的前缀

binlog目录不用多说是binlog的所在目录,需要以/结尾比如 /mysql/data/不能是/mysql/data 否则抛错error 20 binlogdir Must End With /

ftp目录下存放两个东西一个tmp文件和生成的ftp脚本,ftp脚本生成和当前时间一致比如20160713

tmp文件用于存放当前取到的最大的binlog序号,如果不存在可以新建一个,如果不新建抛错error 15 tmp file not found

如果想再次全部传输删除tmp文件新建一个空的就可以比如touch tmp

这个ftp目录同样必须使用/结尾 否则抛错error 21 ftpdir Must End With /

binlogprefix 就是你的前缀比如mysql-bin

使用就是这么简单,有了这3部分就能够通过shell

cat ftphead > ftp_${TIME_TAG}.shcat ${TIME_TAG} >> ftp_${TIME_TAG}.shcat ftptail >> ftp_${TIME_TAG}.sh

生成一个全部的脚本。然后运行了。

另外tool工具会输出一些信息,当然可以关闭,这些输出信息我重定向到了tool_${TIME_TAG}.log

可以查看下面就是一份:

WARNING:Ftpdir Less Than 1000 Char!

PROCESS:Create Chain Now:

INFO:Current Binog Dir Is :/dbdata/

PROCESS:Checkbin Binlogprefix: mysql-bin

................. 这里省略很多

PROCESS:Print chain info

................. 这里省略很多

PROCESS:Now Acc Ftpdir:

INFO:Ftp_scirpt fun time:

Wed Jul 13 14:44:13 2016

20160713

INFO:Ftp_scirpt Fun Tmpfile :/root/ftptool/tmp

INFO:Tmpfile Write Mode Succ!

INFO:Ftp_Scirpt Fun Tmp_max_st:0 Max_st_1:2028:

INFO:Scan Put Counter :163

INFO:Current Max Binlog-1 is:2028

PROCESS:Free Node Is:164

可以清楚看到将会生成163个put脚本信息,最高的传输是2028,实际最大是2029,我在编码的时候做了-1操作,目的在于不要传输当前的binlog,

因为当前的binlog正在使用

最后释放了链表节点164个.同事你的tmp文件目录也会输出,binglog 的目录也会输出.

下面是全部分出错码:

error 10 open bindbr error

error 11 argv parameter error

eroor 12 not find binlog

error 14 fptdir open error

error 15 tmp file not found

error 16 lstat tmp file error

error 18 tmp file write error

error 20 binlogdir Must End With /

error 21 ftpdir Must End With /当然成功放回 0

编译好的我放到了百度云盘

http://pan.baidu.com/s/1i4WuBB3

下面是全部的源代码

编译使用 g++ main.cpp mybin.cpp -o tool 即可 注意本工具使用了Linux系统函数所以必须是Linux系统或者其他满足posix标准的系统不包含Windows

在Linux下编译没有问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值