1. 程式人生 > >Mysql Connector 5.1 好用的新特性

Mysql Connector 5.1 好用的新特性

Mysql connector 5.1對於叢集部署的情況,給予了負載均衡、故障遷移、主從複製讀寫分離的支援。

故障遷移

使用mysql connector提供的故障遷移服務,首先需要配置相應的jdbc url:

jdbc:mysql://[primary host][:port],[secondary host 1][:port][,[secondary host 2][:port]]…[/[database]]

[?propertyName1=propertyValue1[&propertyName2=propertyValue2]…]

這個mysql伺服器連線表包含了兩種型別的mysql伺服器,主機和從機。當建立一個mysql連線的時候,驅動總是先去連線主機,但是如果發生了通訊問題,就會故障遷移到列表中的從機。

故障遷移可以配置以下連線屬性:failOverReadOnly、secondsBeforeRetryMaster、queriesBeforeRetryMaster、retriesAllDown、autoReconnect、autoReconnectForPools。

負載均衡

在mysql connector5.1.3以後,對於mysql伺服器叢集或者主-主複製部署的情況,可以動態地配置負載均衡連線。

使用mysql connector提供的負載均衡服務,首先需要配置相應的jdbc url:

jdbc:mysql:loadbalance://[host1][:port],[host2][:port

][,[host3][:port]]…[/[database]] »

[?propertyName1=propertyValue1[&propertyName2=propertyValue2]…]

這個功能有兩個配置屬性loadBalanceConnectionGroup、loadBalanceEnableJMX。

通過配置loadBalanceEnableJMX,你可以通過jmx client例如jconsole來監控和執行遠端操作。

com.mysql.jdbc.jmx.LoadBalanceConnectionGroupManagerMBean 有以下的方法:

int getActiveHostCount(String group);

int getTotalHostCount(String group);

long getTotalLogicalConnectionCount(String group);

long getActiveLogicalConnectionCount(String group);

long getActivePhysicalConnectionCount(String group);

long getTotalPhysicalConnectionCount(String group);

long getTotalTransactionCount(String group);

void removeHost(String group, String host) throws SQLException;

void stopNewConnectionsToHost(String group, String host) throws SQLException;

void addHost(String group, String host, boolean forExisting);

String getActiveHostsList(String group);

String getRegisteredConnectionGroups();

主/從複製

使用mysql connector提供的主從複製服務,首先需要配置相應的jdbc url:

jdbc:mysql:replication://[master host][:port],[slave host 1][:port][,[slave host 2][:port]]…[/[database]] »

[?propertyName1=propertyValue1[&propertyName2=propertyValue2]…]

同時還支援主從讀寫分離:

使用com.mysql.jdbc.ReplicationDriver驅動可以實現主從讀寫分離,主機是讀寫模式,從機是讀模式。對於一個只讀的連線Connection.setReadOnly(true),驅動會自動把查詢交給從機。

當設定了readFromMasterWhenNoSlaves=true,如果沒有從機的話,就會把只讀的連線交給主機。

由於在mysql中主從複製是非同步的,所以當對實時性要求比較高的時候,應該Connection.setReadOnly(false)來保證從主機讀取資料。

通過設定replicationEnableJMX=true,可以使用com.mysql.jdbc.jmx.ReplicationGroupManagerMBean來進行監控和遠端操作。ReplicationGroupManagerMBean提供以下方法。

public abstract void addSlaveHost(String groupFilter, String host) throws SQLException;

public abstract void removeSlaveHost(String groupFilter, String host) throws SQLException;

public abstract void promoteSlaveToMaster(String groupFilter, String host) throws SQLException;

public abstract void removeMasterHost(String groupFilter, String host) throws SQLException;

public abstract String getMasterHostsList(String group);

public abstract String getSlaveHostsList(String group);

public abstract String getRegisteredConnectionGroups();

public abstract int getActiveMasterHostCount(String group);

public abstract int getActiveSlaveHostCount(String group);

public abstract int getSlavePromotionCount(String group);

public abstract long getTotalLogicalConnectionCount(String group);

public abstract long getActiveLogicalConnectionCount(String group);