我们正在使用MySQL和MASTER进行主复制。
当我们直接使用MySQL监视器(即表上的INSERT或DELETE )输入SQL语句时,它可以工作(即复制到其他DB)。这两种方法都进行了测试,即在每个DB上查看它们是否都复制到另一个数据库(而且它们确实复制了)。
然而,当我们使用我们的web应用程序使用Spring / Hibernate来持久化数据时,它被正确地保存到当前连接的DB中,但是它不会复制到另一个数据库!我没想到这是可能的!
我已经查找了我可以找到的日志文件: /var/ log /mysqld.log,但是看不到任何错误。
我怎么能进一步调查这件事?
我可以改进日志记录以使其更详细吗?这真的有可能绕过复制吗?我不这么认为,但我只是做了一系列的测试来证明这一点。
发布于 2015-07-29 09:22:56
答案是我们有基于语句的复制,而不是基于行的复制!
下面的链接解释了基于语句的复制(默认值和我们使用的是什么)和基于行的复制replicate-do-db
mysql> show variables like 'binlog_format';
+---------------+-----------+
| Variable_name | Value |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+
mysql> SET GLOBAL binlog_format = 'ROW';
/etc/my.cnf
#Setup binary logging
log_bin=/var/log/mysql/mysql-bin.log
binlog_do_db=MY_DATABASE
binlog-format=ROW发布于 2015-07-24 11:00:12
结果是,通过在server.xml中为自由WebSphere应用服务器指定数据源标记中的数据库名称-它停止了复制!?
删除databaseName属性,这一切都很好!
<dataSource id="athlete" jndiName="jdbc/myJNDIName">
<jdbcDriver libraryRef="MySqlLib"/>
**<properties databaseName="mydb"**
user="myuser" password="password" serverName="myserver" portNumber="3306"/>
</dataSource>真正的原因是语句与基于行的二进制日志--我们使用的是基于语句的日志--已经切换到了基于行的日志记录,现在它工作得很好。
如果使用基于语句的复制(5.1.71的默认值),则如果为会话分配的数据库与要复制的数据库不同,则不会复制到其他数据库。
基于<<语句的复制.告诉从SQL线程将复制限制为默认数据库(即被使用的数据库)为db_name的语句。
https://stackoverflow.com/questions/31270812
复制相似问题