この構成のDB に、以下のMySQL 用のJDBC Driver を指定してアクセスしていたのですが、Maria DB のJDBC Driver に変更し、Maria DB のJDBC Driver でしかできないFailover の機能を利用することにしました。
MySQL
jdbc:mysql://aurora-cluster.abc.ap-northeast-1.rds.amazonaws.com:3306/dbMaria DB
jdbc:mysql:aurora://aurora-cluster.abc.ap-northeast-1.rds.amazonaws.com:3306/db
コーディングは、DBCP を利用していたので、以下のようにDriver を選択して、上記のURL にアクセスするだけです。
org.apache.commons.dbcp2.BasicDataSource.setDriverClassName( "org.mariadb.jdbc.Driver" );この変更をしたら、以下のエラーが発生しました。
java.sql.SQLException: Cannot create PoolableConnectionFactory (Communications link failure with primary. No active connection found for master. ) at org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2294) at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2039) at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1533)どうやらmaster のdatabase が見つからないようです。
以下のサイトを参照。
https://dev.classmethod.jp/cloud/faster-failover-by-aurora-jdbc-driver/どうやら、アクセス先が間違っているようなので、以下のようClusterEndopoint の次に、カンマを入れて、ReaderEndpoint を指定したら、接続できました。
jdbc:mysql:aurora://aurora-cluster.abc.ap-northeast-1.rds.amazonaws.com:3306,jdbc:mysql:aurora://aurora-cluster.ro-abc.ap-northeast-1.rds.amazonaws.com:3306/dbちなみに、レプリカを立てない構成で上記のようにread only のDB を指定すると、先にでてきたエラーのmaster がreplica になってエラーがでます。
java.sql.SQLException: Cannot create PoolableConnectionFactory (Communications link failure with primary. No active connection found for replica. )あと、微妙にハマったのは、MySQL のユーザを新規で生成した後、権限を付与しないためにエラーが発生していた。
新規でユーザ生成時は、GRANT コマンドまで実施すること。
Sample
CREATE USER 'user'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON database.table to 'user'@'%' IDENTIFIED BY 'password';権限チェックしたい場合は以下のコマンドで。
SHOW GRANTS FOR 'user'@'%';