2011-04-15 82 views
1

我們有一個主設備和兩個從設備,我們使用Spring 3.0連接到數據庫和mysql-connector-java-5.1.13.jar。 我們還使用commons dbcp 1.4進行連接池。主從複製jdbc url

我們用下面的JDBC URL字符串:

的jdbc:mysql的:複製:// [master_ip]:23306 [slave1_ip]:23306 [slave2_ip]:23306/wm_admin autoReconnectForPools =真& roundRobinLoadBalance =真& loadBalanceBlacklistTimeout = 5000 & loadBalanceStrategy =隨機

的問題是,應用程序將無法啓動,如果奴隸的人下來,或者如果它的運行和奴隸的人下來將停止。 url字符串是否有問題,它應該以不同的方式設置?

+0

爲什麼不在服務器級別設置複製,然後爲從屬和主數據庫創建單獨的連接? – FoneyOp 2011-04-15 19:22:20

+0

我爲什麼要這麼做? – talg 2011-04-15 19:46:30

+0

然後,您可以在您的應用中使用正常的jdbc連接,並在您的應用中使用1秒或2秒的超時時間和循環法來避免此問題。您可能也有興趣:http://bugs.mysql.com/bug.php?id=39611 – FoneyOp 2011-04-15 22:14:09

回答

0

當所有的奴隸都死了的時候,我發現了一個類似的問題。它可以通過mysql-connector-5.1.38來解決。

url中的下一個參數: jdbc:mysql:replication:// [master_ip]:23306,[slave1_ip]:23306,[slave2_ip]:23306?connectTimeout = 5000 &了socketTimeout = 5000 & retriesAllDown = 3 & allowMasterDownConnections =真& allowSlaveDownConnections =真& loadBalanceBlacklistTimeout = 10000 & readFromMasterWhenNoSlaves =真

另外,如果你在主做不怕只讀查詢 - 你可以添加主奴隸名單:jdbc:mysql:replication:// [master_ip]:23306,[master_ip]:23306,[slave1_ip]:23306,[slave2_ip]:23306

所以你不會遇到「所有奴隸死了」的情況。