2012-04-16 24 views
0

所以,我想弄清楚如何记录将要运行的SQL语句,而实际上没有一个活动的mySQL服务器。如何在没有运行mySQL服务器的情况下从JDBC调用记录SQL语句?

我试图解决的问题是,我们现在正在将数据写入远程mySQL实例以及本地(归档数据)。我们正在登录到本地作为备份,以防远程无法访问/发生故障等。

因此,我们想要做的是在本地记录SQL语句(我们正在通过Spring JDBC模板进行变量替换),所以不像使用我们自己拼凑的SQL那样简单它到一个文件。

我确实发现log4jdbc看起来不错,但我们仍然需要本地mySQL实例处于活动状态,即使它只是使用黑洞引擎。我确实认为也许我们可以在远程服务器上使用log4jdbc,但是如果连接消失,JDBCTemplate甚至会在获取失败之前尝试并在底层JDBC驱动程序对象上运行查询?大多数池化机制会在返回之前验证连接,所以在查询有机会运行&获取日志之前,它仍然会失败。

那么,谁有什么好主意?

+0

您应该停止尝试重新创建数据库复制。看看http://dev.mysql.com/doc/refman/5.6/en/replication.html – GreyBeardedGeek 2012-04-16 23:48:45

+0

我们不是在复制之后。我们试图摆脱本地机器上的mysql实例,该实例仅用作归档数据的备份,以防主mysql服务器关闭,并且我们需要从各个服务器中取消数据并将它们合并到主服务器上MySQL服务器。 – Drizzt321 2012-04-16 23:51:31

+0

它仍然听起来像你试图重新发明复制。或备份。或两者。 – GreyBeardedGeek 2012-04-17 00:04:54

回答

0

马克奥康纳解决方案可能是最好的一般,但我们解决这个问题的方式是简单地将数据写成CSV格式的文件,以便通过加载数据infile语句进行导入。

0

bin logging enabled运行远程MySQL实例。

可以对binary logs进行备份,并根据需要使用mysqlbinlog命令将其转换为SQL,以便以后还原数据库。

+0

如果mysql实例关闭,会发生什么?或者一个开关中断?每台服务器都需要在本地记录数据。现在是一个本地mysql实例,但我们试图删除本地mysql服务器,只需简单地记录SQL,然后在主要的mysql实例重新启动后就可以在需要时返回。 – Drizzt321 2012-04-17 00:46:18

+0

根据文档“从MySQL 5.6.2开始,二进制日志是安全的,只有完整的事件或事务被记录或回读”。对我来说,你的用例需要运行MySQL的本地实例。这是我的理解,你想要一个单一的数据库实例,并记录足够的信息,使您可以稍后重建数据。因此,我会将您介绍给PITR doco:http://dev.mysql.com/doc/refman/5.6/en/point-in-time-recovery.html – 2012-04-17 23:25:21

相关问题