====== Aurora MariaDB ====== * [[database:mariadb:jdbc|MariaDB JDBC]] 참고. ===== MariaDB JDBC driver Aurora 지원 중단 ===== * 3.x 버전부터 Aurora 지원중단. * [[database:aurora|Aurora - AWS Database]] 의 Advanced JDBC Wrapper 등을 사용할 것. ===== useSSL=false ===== * [[https://mariadb.com/kb/en/secure-connections-overview/|Secure Connections Overview - MariaDB Knowledge Base]] * ''useSSL=false|false'' 로 항상 원하는 상태를 명시할것. ===== JDBC 드라이버 사용시 Aurora Cluster에서 read only (slave) DB로 접속되는 현상 ===== * Aurora Cluster 사용시 ''jdbc:mariadb:aurora'' JDBC URL을 사용하면 Cluster Failover가 지원되고 ''setReadOnly'' 설정에 따른 Master/Slave 분기가 지원된다. * **3.0** 부터는 더이상 ''jdbc:mariadb:aurora''를 지원하지 않는다. **''jdbc:mariadb:replcation''**을 사용해야 할 것으로 보임. * 2.2.5 이하 버전에서는 failover시에 write/read 커넥션이 바뀌는 현상이 발생할 수 있다. **2.x 최신버전 ** 사용 할 것. 버전별로 미묘한 버그가 있어서 ''2.2.5'' 이상에서도 문제 발생함. * [[https://jira.mariadb.org/browse/CONJ-503|[CONJ-503] MariaDB Driver Uses Read Replicas for non-Read-Only Connections - JIRA]] * 구 버전 드라이버에 Master/Slave를 잘 못 지정하는 버그가 있으므로 ''2.1'' 이상을 사용해야 한다. * [[https://github.com/MariaDB/mariadb-connector-j/blob/master/documentation/failover-and-high-availability-with-mariadb-connector-j.creole|mariadb-connector-j/failover-and-high-availability-with-mariadb-connector-j.creole at master · MariaDB/mariadb-connector-j]] * 최신 드라이버를 사용하더라도 Connection Pool에서 커넥션을 일정기간 사용하면 끊고 새로 접속하도록 설정해야 한다. 그렇지 않으면 어느 순간 read/write가 잘 못된 곳을 바라보게 된다.(''maxAge'' 같은 프라퍼티) # 에러 메시지 15:22:47.225 org.hibernate.engine.jdbc.spi.SqlExceptionHelper (conn:3568) The MySQL server is running with the --read-only option so it cannot execute this statement 15:22:47.225 org.mariadb.jdbc.MariaDbStatement error executing query java.sql.SQLException: (conn:3568) The MySQL server is running with the --read-only option so it cannot execute this statement ===== fractional second 반올림 현상 ===== * [[database:mysql:5.6|MySQL 5.6]] 에서 발생하는 현상이 마찬가지로 발생한다. * 제일 좋은 것은 ''datetime(6)''로 지정하는 것이며, 그럴 수 없을 때는 * MariaDB Connector/J 를 사용할 경우에는 ''useFractionalSeconds=false'' 옵션을 지정해야 한다. * MySQL Connector/J 를 사용할 경우에는 ''sendFractionalSeconds=false'' 옵션을 지정해야 한다.