首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用MySQL / Hibernate控制在DB级工作的主复制,而不是应用程序级

使用MySQL / Hibernate控制在DB级工作的主复制,而不是应用程序级
EN

Stack Overflow用户
提问于 2015-07-07 14:04:01
回答 2查看 247关注 0票数 0

我们正在使用MySQL和MASTER进行主复制。

当我们直接使用MySQL监视器(即表上的INSERT或DELETE )输入SQL语句时,它可以工作(即复制到其他DB)。这两种方法都进行了测试,即在每个DB上查看它们是否都复制到另一个数据库(而且它们确实复制了)。

然而,当我们使用我们的web应用程序使用Spring / Hibernate来持久化数据时,它被正确地保存到当前连接的DB中,但是它不会复制到另一个数据库!我没想到这是可能的!

我已经查找了我可以找到的日志文件: /var/ log /mysqld.log,但是看不到任何错误。

我怎么能进一步调查这件事?

我可以改进日志记录以使其更详细吗?这真的有可能绕过复制吗?我不这么认为,但我只是做了一系列的测试来证明这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-29 09:22:56

答案是我们有基于语句的复制,而不是基于行的复制!

下面的链接解释了基于语句的复制(默认值和我们使用的是什么)和基于行的复制replicate-do-db

代码语言:javascript
运行
复制
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
票数 0
EN

Stack Overflow用户

发布于 2015-07-24 11:00:12

结果是,通过在server.xml中为自由WebSphere应用服务器指定数据源标记中的数据库名称-它停止了复制!?

删除databaseName属性,这一切都很好!

代码语言:javascript
运行
复制
<dataSource id="athlete" jndiName="jdbc/myJNDIName">
    <jdbcDriver libraryRef="MySqlLib"/>
    **<properties databaseName="mydb"** 
    user="myuser" password="password" serverName="myserver" portNumber="3306"/>
</dataSource>

真正的原因是语句与基于行的二进制日志--我们使用的是基于语句的日志--已经切换到了基于行的日志记录,现在它工作得很好。

如果使用基于语句的复制(5.1.71的默认值),则如果为会话分配的数据库与要复制的数据库不同,则不会复制到其他数据库。

replicate-do-db

基于<<语句的复制.告诉从SQL线程将复制限制为默认数据库(即被使用的数据库)为db_name的语句。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31270812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档