如何在MySQL中从基于语句的转换为基于行的复制

我有一个生产系统,使用基于MySQL语句的复制进行热故障切换,如果主数据库死亡。 运行版本5.5 Percona。 出于这个问题的目的,我不得不使用基于语句的复制。

现在,我希望看到相同数据的基于行的复制stream,其目标是尝试将其适用于基于HBase的数据存储。

是否有可能使用基于语句的复制将MySQL服务器设置为从服务器(读),但同时使用基于行的复制复制主服务器(写入其他从服务器)? 如果是这样,我该如何设置? 我查看了文档,但没有find它。

我有很多系统正是以这种方式build立的,而且我认为这是一个相当普遍的做法……我原以为要把我的手指放在文档中引用来备份我张贴在这里,但结果比我预期的更困难。 这是我能find的最接近的东西:

每个MySQL服务器都可以设置自己的,只有自己的二进制日志格式(无论是使用全局还是会话范围设置binlog_format )。 这意味着更改复制主服务器上的日志格式不会导致从服务器更改其日志logging格式以匹配。

https://dev.mysql.com/doc/refman/5.6/en/binary-log-setting.html

要说明一些额外的含义,你想做什么“正常工作”,因为从站上的binlog_format的设置没有指定从站的期望。 它只设置从机将会产生什么。

使用binlog_format=ROWconfiguration从站,并在从站上的my.cnf启用log_slave_updates (导致传入事件被重写到从站的binlog)。

…你完成了。

尽pipemaster的binlog格式,slave也会将其所有DMLlogging为基于行的事件。 你并不需要做任何事情来使一个从服务器成为一个主服务器,因为每个启用二进制日志logging的MySQL服务器本质上已经是一个主服务器 – 它可能恰好是没有任何实际从服务器的主服务器。

master和slave binlog_format任意组合都是有效的, 除了 master被configuration成ROW而slave被configuration成STATEMENT (与你在这里做的事情相反),因为虽然语句可以被转换成行事件(它们影响从属行毕竟),反过来是不正确的 – 如果你唯一的知识是实际改变的数据,你不一定能确定改变行的特定语句。 但是对于你所要求的应用程序来说,上面应该完全按你的意思来做。

我还在dba.stackexchange.com上详细讨论了主备binlog格式的可能组合的相互作用。