Home  >  Article  >  Database  >  一键搭建blackhole从库

一键搭建blackhole从库

WBOY
WBOYOriginal
2016-06-07 16:43:041082browse

之前我们搭建blackhole从库,都是先把线上主库或者备库的表结构dump出来,然后把主库的权限库、监控库等整个拷贝过来,再change

来自业务的驱动

前一段时间,微博的双向关注业务拆分,数据库实例增多了几倍,对应的,我们要为这些实例搭建很多blackhole从库,供后面的binlog分析程序分析binlog并最终导入到redis中。整个过程比较枯燥乏味,尤其blackhole从库的搭建,花费了我们较多的精力。所以我有了写个工具的想法。

按部就班的做法

之前我们搭建blackhole从库,都是先把线上主库或者备库的表结构dump出来,然后把主库的权限库、监控库等整个拷贝过来,再change master。这种方法在采用语句级格式复制的情况下,基本可以很好的工作。但是当换成行格式复制后,blackhole从库经常卡库。追查了一下原因,发现问题出现在拷贝权限库、监控库[都是MyISAM表]的过程中。如果拷贝过程中不加锁,拷贝完毕后再在主库通过show master status记录下binlog pos点,并以此作为change master的pos点,这种方法可能存在隐患,并最终导致从库出现卡库。
在了解需求和之前方法的缺点后,我发现要非常严谨的给正在运行的主库搭建一个blackhole从库并非易事。经过和同事的一番讨论,参考了下percona xtrabackup热备数据库的方法,于是实现了这个工具。代码有兴趣的可以直接看,文章后面也有比较详细的说明。欢迎拍砖。

MySQL管理之使用XtraBackup进行热备

MySQL开源备份工具Xtrabackup备份部署

MySQL Xtrabackup备份和恢复

用XtraBackup实现MySQL的主从复制快速部署【主不锁表】

安装和使用 Percona 推出的 Xtrabackup 备份 MySQL

源代码下载见 用法说明

这个工具需要用户输入两个参数:一个主库的ip地址,一个是主库的数据库端口,,这两个参数唯一的确定一个实例。

用法说明

Usage: example: blackhole_slave.py -f 10.66.10.10 -P 3307

Options:
  --version            show program's version number and exit
  -h, --help            show this help message and exit
  -f IP, --master-ip=IP
                        master ip address here
  -P PORT, --master-port=PORT
                        master port here

详细思路 BlackHole的用途
  • 用于binlog的备份
  • 线上MySQL的binlog一般会保留3-5天,但是对比较重要的业务,binlog可能需要保留一个月甚至半年。线上服务器可没有这么大的空间,最多保留10天就会被purge掉。此时blackhole就有了用武之地。blackhole从库+xtrabackup的定期热备+ @plinux的binlog flashback,可以让你的数据库恢复到任意时刻。

  • 充当binlog API,为其他程序提供数据源
  • 我们线上有很多业务,挂在blackhole从库的后面。我们自己开发的binlog分析程序会适时分析binlog,然后把对应的数据插入到redis中。这种情况下blackhole从库充当了天然的binlog API。

  • 跨IDC部署场景下,节省带宽
  • 如果一个主库拖着20个从库,主库可能不堪重负,此时可以考虑给主库增加一个blackhole从库作为中继,虽然这种方案有诸多不靠谱的地方,但是如果这个主库在北京,20个从库在广州,这种方案就有意义了:在广州增加一个blackhole,让blackhole下挂20个从库,此时就可节省大量北京到广州的带宽。省下的钱加强下blackhole的HA应该绰绰有余。

  • 测试binlog开启与否对服务器IO的影响

    用blackhole来测试开启binlog与否对服务器IO的冲击。MySQL官方数据说,开启binlog会使IO性能降低3-5%,这个数据是否有点“保守”?

  • 本文永久更新链接地址:

    linux

    Statement:
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn