利用xtrabackup和binlog恢复单表误删数据思路

昨晚,有个朋友说它的DB有张表,被研发误删了一部分数据,咨询我一些恢复的思路:

环境:全备、增备、日志、主从、binlog-format=mixed

由于binlog格式的限制,没法从binlog里面反向解析误删数据,因此,就有了下面的思路,有什么遗漏的或者不到位的地方,欢迎大家指正!!

1.必须有xtrabackup备份

这里包括全备和增备

2.在全备和增备上都执行–apply-log –redo-only操作

执行完此操作后,备份的数据目录里会包含以下几种数据类型文件:

*.frm / *.ibd / *.exp / *.cfg

3.将原来有数据丢失的表重命名为新表

alter table old_table rename old_table_bak

4.创建一个与原表结构一致的新表new_table

5.将新表丢弃表空间

alter table new_table discard tablespace;

6.拷贝备份目录中的 *.ibd/*.cfg/*.exp到mysql的数据目录

mysql> system cp *.{ibd,exp,cfg} /db/mysql5.6/data/test/

7.导入表空间:

alter table new_table import tablespace

注:此时你执行查询时,是可以正常查询,但数据肯定不是最新的

8.由于数据不是最新的,所以需要用到binlog,但是binlog针对单表需要使用脚本过滤,太麻烦,下面介绍一个简单办法

这是使用偷懒的方法,重新授予一个用户,仅对此表有select,insert,delete,update的权限

GRANT SELECT, INSERT, UPDATE, DELETE ON `test`.`t1` TO ‘test_user’@’localhost’ identified by ‘123456’;

9.执行binlog恢复,具体根据需要进行处理,这里简单说明

mysqlbinlog –no-defaults -vv –base64-output=decode-rows -d test mysql-bin.000001 | mysql -S /tmp/mysqld.sock -utest_user-p123456 -f

注:

这里的 -f 参数:恢复时,忽略后面的错误,强制导入

Kettle 在windows 7 下的部署

需要的包名如下:

tomcat,jdk,MySQL ODBC/JDBC,pdi-ce-6.1.0.1-196

kettle官网下载地址:

https://sourceforge.net/projects/pentaho/files/Data%20Integration/6.1/pdi-ce-6.1.0.1-196.zip/download

tomcat官网下载地址:

http://tomcat.apache.org/download-70.cgi

MySQL ODBC/JDBC下载地址:

http://www.mysql.com/products/connector/

1.首先,安装JDK:

windows下的安装,就不细讲了,一直点“下一步”,直到完成;

需要注意一下jdk的安装路径,需要记录一下,需要设置环境变量的,这里地址是:C:\Program Files (x86)\Java\jre7

2.安装kettle:

解压PDI包,将 data-integration 复制到 D盘 即可

3.安装tomcat:

忽略,安装好,记得测试 :127.0.0.1:8080,出现测试页面,即为安装成功

4.设置相关环境变量:

选择:“计算机”– 右击“属性”– “高级系统设置”– “环境变量” — “系统变量”

点击 “新增”– 输入名称为:PENTAHO_JAVA_HOME

地址为:C:\Program Files (x86)\Java\jre7 (jdk的安装位置)

5.进入 data-integration 目录(D:\data-integration),修改 spoon.bat脚本:

第94行,改为:if “%PENTAHO_DI_JAVA_OPTIONS%”==”” set PENTAHO_DI_JAVA_OPTIONS=”-Xms512m” “-

Xmx512m” “-XX:MaxPermSize=256m”

6.执行相关脚本:

set-pentaho-env.bat

运行 Spoon.bat 脚本后,会出现如下界面,证明启动成功:

2

7.配置JDBC:

将下载的 JDBC 复制到 kettle的lib 目录,重启kettle 即可

最终,配置界面如下:

1

自增表死锁问题分析及处理

今天,研发提交了一个死锁信息,涉及到自增表的死锁,测试,压测产生的死锁信息,并发500,信息如下:
1234

从上面死锁信息来看,lock mode AUTO-INC waiting,应该是表的自增列的问题,初步了解,这个死锁和 innodb_autoinc_lock_mode 的值有一定的关系,但也不因全归咎于mysql的问题。

从5.6的用户手册中查找到AUTO-INC的相关信息:

InnoDB uses a special lock called the table-level AUTO-INC lock for inserts into tables with AUTO_INCREMENT columns. This lock is normally held to the end of the statement (not to the end of the transaction), to ensure that auto-increment numbers are assigned in a predictable and repeatable order for a given sequence of INSERT statements

InnoDB在为自增列产生值的时候,使用一种叫做AUTO_INC的表级锁来做控制。这种锁是作用于语句的而不是事务(即语句执行完了锁就会被释放)。使用这种锁是为了确保自增列的值的可预见性和可重复性。可预见性是说当一条insert语句作用于多行时,这些行的自增列基于第一行来说是可预见的;可重复执行是指基于语句的复制在slave重放时自增列的值与master的一致。

innodb_autoinc_lock_mode:

默认值:1,可取值为:0,1,2

在 mysql5.1.22之前,没有这个选项,默认都是0,在并发数大于208以上可能出现很多死锁

下面解释一下innodb_autoinc_lock_mode 几种默认值的含义:

0:traditonal (每次都会产生表锁)

1:consecutive (默认,可预判行数时使用新方式,不可时使用表锁,对于simple insert会获得批量的锁,保证连续插入)

Simple inserts:

直接通过分析语句,获得要插入的数量,然后一次性分配足够的auto_increment id,只会将整个分配的过程锁住。(INSERT, INSERT … VALUES(),VALUES())

Bulk inserts:

因为不能确定插入的数量,因此使用和以前的模式相同的表级锁定。(INSERT … SELECT, REPLACE … SELECT, LOAD DATA)

其中 insert ….. select ….. ,是特殊的select加X锁的情况,原因是为保证数据的一致性(M-S环境)

Mixed-mode inserts:

直接分析语句,获得最坏情况下需要插入的数量,然后一次性分配足够的auto_increment id,只会将整个分配的过程锁住。

(INSERT INTO t1 (c1,c2) VALUES (1,’a’), (NULL,’b’), (5,’c’), (NULL,’d’);INSERT … ON DUPLICATE KEY UPDATE)

2:interleaved (不会锁表,来一个处理一个,并发最高)

这种模式是来一个分配一个,而不会锁表,只会锁住分配id的过程,和innodb_autoinc_lock_mode = 1的区别在于,不会预分配多个,这种方式并发性最高。

从上面来看,一般 innodb_autoinc_lock_mode = 1 默认值,基本上满足需要。

虽说 innodb_autoinc_lock_mode = 2 不安全,但是在 binlog_format=ROW,transaction-isolation=READ-COMMITTED , innodb_autoinc_lock_mode = 2 是非常安全的。

至于,针对高并发的表,主键列的设置建议如下:

1.采用DB的自增属性,此时,需要调整DB参数,尽可能提高并发:
binlog_format=ROW,transaction-isolation=READ-COMMITTED , innodb_autoinc_lock_mode = 2

2.采用程序生成全局自增ID,利用redis、memcache集合生成 ,这也是推荐的方式

MySQL多线程复制故障(slave_pending_jobs_size_max)

最近,经常遇到mysql多线程复制故障的问题,报错有以下几种:

第一种:

Last_Error: Cannot schedule event Rows_query, relay-log name ./db-s18-relay-bin.000448, position 419156572 to Worker thread because its size 18483519 exceeds 16777216 of slave_pending_jobs_size_max.

第二种:

[Note] Multi-threaded slave: Coordinator has waited 701 times hitting slave_pending_jobs_size_max; current event size = 8167.

BUG地址:https://bugs.mysql.com/bug.php?id=68462

以上两种报错,初步判断问题可能在 slave_pending_jobs_size_max 的大小上,此值,官方默认是 16M,此值可以动态调整
关于此值的一些说明:

# 在多线程复制时,在队列中Pending的事件所占用的最大内存,默认为16M,如果内存富余,或者延迟较大时,可以适当调大;注意这个值要比主库的max_allowed_packet大

此值有如下几种情况:

     1.- 如果event大小已经超过了等待任务大小的上限(配置slave-pending-jobs-size-max ),就报event太大的错,然后返回;
     2.- 如果event大小+已经在等待的任务大小超过了slave-pending-jobs-size-max,就等待,至到等待队列变小;
     3.- 如果当前的worker的队列满的话,也等待。

下面是官方关于此参数的一些说明:(图片看不了,可点击查看大图)

QQ图片20160524124437

 

 

Ansible Dynamic Inventory的使用案例,可以集合CMDB生成

ansible有个hosts文件,这个文件默认是静态的 使用是,我们需要编辑相关主机或者主机组变量什么的,官方的Inventory 是通过调用外部脚本生成指定格式的json串
这样做的好处是 可以直接从数据库拉取相关信息,可以结合cmdb使用
官网的 dynamic inventory 介绍:
http://docs.ansible.com/intro_dynamic_inventory.html

  1. #!/usr/bin/env python  
  2.   
  3. import MySQLdb  
  4. import sys  
  5.   
  6. try:  
  7.         import json  
  8. except ImportError:  
  9.         import simplejson as json   
  10.   
  11. def grouplist():  
  12.         test = MySQLdb.connect(db=’ince’,host=’172.16.10.54′,user=’python_dev’,passwd=’python_dev’,charset=’utf8′)  
  13.         inventory = {}  
  14.         inventory[‘local’] = [ ‘127.0.0.1’ ]  
  15.         cur = test.cursor()  
  16.         cur.execute(“select type,name from hosts”)  
  17.         for row in cur.fetchall():  
  18.                 group = row[0]  
  19.                 if group is None:  
  20.                         group = ‘ungrouped’  
  21.                 if not group in inventory:  
  22.                         inventory[group] = {  
  23.                                 ‘hosts’ : []  
  24.                         }  
  25.                 inventory[group][‘hosts’].append(row[1])  
  26.         cur.close()  
  27.         print json.dumps(inventory,indent=4)  
  28.   
  29.   
  30. if __name__==’__main__‘:  
  31.         grouplist()  
  32.   
  33. —–   
  34. 执行上面脚本,会生成如下结果的主机和组信息,是不是和我们想要的是一样的…..  
  35. {  
  36.     “ungrouped”: {  
  37.         “hosts”: [  
  38.             “172.16.10.251”  
  39.         ]  
  40.     },   
  41.     “db”: {  
  42.         “hosts”: [  
  43.             “172.16.10.54”  
  44.         ]  
  45.     },   
  46.     “app”: {  
  47.         “hosts”: [  
  48.             “172.16.10.55”  
  49.         ]  
  50.     },   
  51.     “local”: [  
  52.         “127.0.0.1”  
  53.     ]  
  54. }  

利用qrcode生成二维码

下面我们利用python脚本实现,实现之前,我们需要先装两个模块,一个是qrcode,一个是image


pip install qrcode
pip install image
-------
下面是python代码:
#!/usr/bin/env python
import qrcode
qr = qrcode.QRCode(
version = 5,
error_correction = qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data('http://www.xuchanggang.cn')
qr.make(fit=True)
img = qr.make_image()
#img.show()
img.save('/tmp/test.jpg')
-----
下面是相关解释:
version:值为1~40的整数,控制二维码的大小(最小值是1,是个12×12的矩阵)。 如果想让程序自动确定,将值设置为 None 并使用 fit 参数即可。
error_correction:控制二维码的错误纠正功能。可取值下列4个常量。
ERROR_CORRECT_L:大约7%或更少的错误能被纠正。
ERROR_CORRECT_M(默认):大约15%或更少的错误能被纠正。
ROR_CORRECT_H:大约30%或更少的错误能被纠正。
box_size:控制二维码中每个小格子包含的像素数。
border:控制边框(二维码与图片边界的距离)包含的格子数(默认为4,是相关标准规定的最小值)
img.save:是将生成二维码图片保存到哪里
-----
现在我们可以执行这个python脚本,然后到指定目录看看,是不是生成了~~

下面就是生成的图片:

test

阿里巴巴mysql数据库binlog的增量订阅&消费组件:canal/otter/RocketMQ

canal 是阿里巴巴mysql数据库binlog的增量订阅&消费组件。

名称:canal [kə’næl]

译意: 水道/管道/沟渠

语言: 纯java开发

定位: 基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql

早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量 变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,从此开 启了一段新纪元。ps. 目前内部使用的同步,已经支持mysql5.x和oracle部分版本的日志解析

基于日志增量订阅&消费支持的业务:

数据库镜像

数据库实时备份

多级索引 (卖家和买家各自分库索引)

search build

业务cache刷新

价格变化等重要业务消息

Canal 工作原理:
22085340_om1D

原理相对比较简单:

canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议

mysql master收到dump请求,开始推送binary log给slave(也就是canal)

canal解析binary log对象(原始为byte流)

相关项目地址:

canal项目地址:https://github.com/alibaba/canal

otter项目地址:https://github.com/alibaba/otter

RocketMQ项目地址:https://github.com/alibaba/RocketMQ

淘宝实时数据传输平台: TimeTunnel

项目地址:http://code.taobao.org/p/TimeTunnel/src/

MySQL管理工具:mysql_config_editor的使用

mysql_config_editor是MySQL自带的一款用于安全加密登录的工具,对于多实例的MySQL数据库来说,每次登陆需要指定host,port,password是非常烦人的,所以,可以使用 mysql_config_editor工具可以很容易管理多实例。对于有很多DB的DBA来说,当你在1台机器上设置了你所有DB的信息时候,就不需要再频繁登陆相应的服务器去处理了。

下面,我们对这个工具,做一些简单的介绍,大家可以自行练习

首先,对该工具进行一个简单的总体演练,大家看一眼,就应该知道怎么用了。

[root@slave1 home]# mysql_config_editor set –login-path=remote3306 –host=172.16.10.54 –user=root –password –port=3306

Enter password:

[root@slave1 home]# hexdump ~/.mylogin.cnf
0000000 0000 0000 0f1c 0605 0010 151d 1519 0e0f
0000010 060a 0903 0b19 0110 0010 0000 08c8 25a0
0000020 907b e28c 75d3 9d5d 6bbe 90b6 0010 0000
0000030 7698 6fad 169e bea9 7e58 4e0a 135e 7303
0000040 0010 0000 a0a3 8978 06af ef3c 5d7e fa82
0000050 32e3 dcf0 0020 0000 8455 18d8 3093 129b
0000060 0602 df2e 78e5 dc8a dd81 50ee 1b9d 0656
0000070 56dc 00a3 a7e4 2d4e 0010 0000 6ca8 f0ab
0000080 ed41 7eae d3c5 9a44 ec8d 6e6b 0010 0000
0000090 c2f6 d7ad d751 39e0 3077 9e20 afb5 5ca5
00000a0 0010 0000 7698 6fad 169e bea9 7e58 4e0a
00000b0 135e 7303 0020 0000 248d 3ca6 f169 6b50
00000c0 449c ee50 cbf9 55ac c820 ff96 26ad eb50
00000d0 6686 32f6 4e18 76eb 0020 0000 3538 f59b
00000e0 6723 a926 096a a351 9356 9017 f42f 62af
00000f0 43e3 30ee c5ee a15e 9a4a 346a 0010 0000
0000100 6ca8 f0ab ed41 7eae d3c5 9a44 ec8d 6e6b
0000110

[root@slave1 home]# mysql –login-path=remote3306
Welcome to the MySQL monitor. Commands end with ; or \g.
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

(root@172.16.10.54:(none) 01:23)>

 

相关选项说明:

mysql_config_editor:

* set 对login path进行登陆信息设置:

mysql_config_editor set –login-path=remote3306 –host=172.16.10.54 –user=root –password –port=3306

* print 显示指定的login path所有信息

[root@slave1 home]# mysql_config_editor print –login-path=remote3306

[remote3306]

user = root

password = *****

host = 172.16.10.54

port = 3306

* remove 从登陆文件中删除所有的login path

[root@slave1 home]# mysql_config_editor remove –login-path=remote3306

* reset 删除登陆日志的所有内容

[root@slave1 home]# mysql_config_editor reset

 

mysql_config_editor set

* -h,–host=name 添加host到登陆文件中

* -G,–login-path=name 在登录文件中为loginpath添加名字(默认为client)

* -p,–password 在登陆文件中添加密码(该密码会被mysql_config_editor自动加密)

* -u,–user 添加用户名到登陆文件中

* -S,–socket=name 添加sock文件路径到登陆文件中

* -P,–port=name 添加登陆端口到登陆文件中

 

mysql_config_editor print

* –all ,输出所有的login path的登陆信息

* –login-path, 指定login path,输出指定的login path登陆信息

 

mysql_config_editor remove

* -h,–host 删除login path中的host信息

* -G,–login-path 指定删除的loginpath(默认为client)

* -p,–password 删除login path中的password信息

* -u,–user 删除login path中的用户名信息

* -S,–socket 删除login path中的sock文件信息

* -P,–port 删除login path中的port信息

 

mysql_config_editor reset

多主写入集群套件(gelera cluster)的说明

目前,mysql 相关的集群套件,聊的比较多的,无非是多点写入、同步复制的问题。市面上,说的比较多的有以下几种:

第一种:percona 公司推出的 percona xtradb cluster 套件(网址:https://www.percona.com/software/mysql-database/percona-xtradb-cluster)

第二种:gelera 公司推出的 gelera cluster 套件(网址:http://galeracluster.com/products/)

目前,gelera 公司的gelera cluster 套件,mariadb 官方已经采用,并且官方提供相关的文档和下载包(mariadb 10 和 mariadb 5 都有)

而针对mysql的话,mysql 官方没有集成,所以,这个工作就是gelera公司在做,它针对mysql 最新的GA版本打上相关patch,然后,结合gelera cluster使用

这些集群套件,是否有在线上使用的案例?线上使用的性能如何?这个,我不是很了解,有在线上实施的,可以留言

下面主要,描述一下,实现的功能:

1).同步复制

2).多主服务器的拓扑结构

3).可以在任意节点上进行读写

4).自动剔除故障节点

5).自动加入新节点

6).真正行级别的并发复制

7).客户端连接跟操作单台MySQL数据库的体验一致

8).无单点故障,易扩展

下面是针对使用gelera cluster 的一些注意事项:

1、使用Galera必须要给MySQL-Server打wsrep补丁。可以直接使用官方提供的已经打好补丁的MySQL安装包;

如果服务器上已经安装了标准版MYSQL,需要先卸载再重新安装。卸载前注意备份数据。

2、MySQL/Galera集群只支持InnoDB存储引擎。如果你的数据表使用的MyISAM,需要转换为InnoDB,否则记录不会在多台复制。

可以在备份老数据时,为mysqldump命令添加–skip-create-options参数,这样会去掉表结构的声明信息,再导入集群时自动使用InnoDB引擎。

不过,这样会将AUTO_INCREMENT一并去掉,已有AUTO_INCREMENT列的表,必须在导入后重新定义。

3、MySQL 5.5及以下的InnoDB引擎不支持全文索引(FULLTEXT indexes),如果之前使用MyISAM并建了全文索引字段的话,只能安装MySQL 5.6 with wsrep patch。

4、所有数据表必须要有主键(PRIMARY),如果没有主键可以建一条AUTO_INCREMENT列。

5、MySQL/Galera集群不支持下面的查询:LOCK/UNLOCK TABLES,不支持下面的系统变量:character_set_server、utf16、utf32及ucs2。

6、数据库日志不支持保存到表,只能输出到文件(log_output = FILE),不能设置binlog-do-db、binlog-ignore-db。

7、跟其他集群一样,为了避免节点出现脑裂而破坏数据,建议Galera集群最低添加3个节点。

8、在高并发的情况下,多主同时写入时可能会发生事务冲突,此时只有一个事务请求会成功,其他的全部失败。可以在写入/更新失败时,自动重试一次,再返回结果。

9、节点中每个节点的地位是平等的,没有主次,向任何一个节点读写效果都是一样的。实际可以配合VIP/LVS或HA使用,实现高可用性。

10、如果集群中的机器全部重启,如机房断电,第一台启动的服务器必须以空地址启动:mysqld_safe –wsrep_cluster_address=gcomm:// >/dev/null &

配图如下:

复件 galera_replication1

MySQL V5.7 多源复制特性

前端时间,一直关注5.7有多源复制的特性,当时,5.7.5版本不支持,而且官方文档也没有说明,本以为,只能用mariadb的多源复制特性,没想到,最近在看官方文档时,已有了相关文档,于是,果断试了一下。下面做一下,简单的演示:

官方文档:
http://dev.mysql.com/doc/refman/5.7/en/replication-multi-source-tutorials.html

要求:

1.复制的相关信息需要存在 table ,不能存在 file:

–master-info-repository=TABLE

–relay-log-info-repository=TABLE

2.多源复制,可以基于GTID,也可以基于 position

3.部署时,所使用的命令如下:

# 基于GTID模式的:

CHANGE MASTER TO MASTER_HOST=’master1′, MASTER_USER=’blackhole’, MASTER_PORT=3306,MASTER_PASSWORD=’black@hole’ MASTER_AUTO_POSITION = 1 FOR CHANNEL ‘master-1′;

# 基于Position模式的:

CHANGE MASTER TO MASTER_HOST=’172.16.10.54′, MASTER_USER=’blackhole’, MASTER_PORT=3306, MASTER_PASSWORD=’black@hole’ ,MASTER_LOG_FILE=’mysql-bin.000047′, MASTER_LOG_POS=602 FOR CHANNEL ‘master-1′;

4.开启 / 关闭 相关channel的复制:

# 开启/关闭全部

START SLAVE thread_types;

STOP SLAVE thread_types;

# 开启/关闭指定channel

START SLAVE thread_types FOR CHANNEL channel;

STOP SLAVE thread_types FOR CHANNEL channel;

# 关于 stop/start slave的语法:

STOP/START SLAVE [thread_types] FOR CHANNEL channel

thread_type:

IO_THREAD | SQL_THREAD

# MySQL 5.7 目前还没有GA版本发布,暂时,不做详细测试,仅根据官方文档说明,留以备注
下面是一个简单的测试:

172.16.10.54:3306 master1 mysql-5.6.25 复制用户/密码:blackhole/black@hole 日志点:mysql-bin.000047、602

172.16.10.54:3307 master2 mariadb-10 复制用户/密码:blackhole/black@hole 日志点:mysql-bin.000015 、23736

172.16.10.55:3306 slave mysql-5.7.8

slave机器添加两个主从的方式如下:

# 添加master-1:

CHANGE MASTER TO MASTER_HOST=’172.16.10.54′, MASTER_USER=’blackhole’, MASTER_PORT=3306, MASTER_PASSWORD=’black@hole’ ,MASTER_LOG_FILE=’mysql-bin.000047′, MASTER_LOG_POS=602 FOR CHANNEL ‘master-1′;

# 添加master-2:

CHANGE MASTER TO MASTER_HOST=’172.16.10.54′, MASTER_USER=’blackhole’, MASTER_PORT=3307, MASTER_PASSWORD=’black@hole’ ,MASTER_LOG_FILE=’mysql-bin.000015′, MASTER_LOG_POS=23736 FOR CHANNEL ‘master-2’;

#启动主从:

start slave;

#启动指定主从:

start slave for channel ‘master-1’;

#查看主从状态:

show slave status\G;

#查看指定从机状态:

show slave status for channel ‘master-1’\G;

# 最终截图如下:
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.16.10.54
Master_User: blackhole
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000047
Read_Master_Log_Pos: 602
Relay_Log_File: slave3-relay-bin-master@002d1.000002
Relay_Log_Pos: 317
Relay_Master_Log_File: mysql-bin.000047
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Channel_Name: master-1
*************************** 2. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.16.10.54
Master_User: blackhole
Master_Port: 3307
Connect_Retry: 60
Master_Log_File: mysql-bin.000015
Read_Master_Log_Pos: 23736
Relay_Log_File: slave3-relay-bin-master@002d2.000002
Relay_Log_Pos: 445
Relay_Master_Log_File: mysql-bin.000015
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Channel_Name: master-2