title: MySQL Community 8 on macOS Catalina: can't connect to DB via JDBC
body: <p>I installed MySQL Community 8.0.20 on my macOS Catalina. I'm pretty sure to have installed it correctly, since I could execute some CRUD instructions via Workbench application.
  Then, I decided to write a simple Java application to access DB using JDBC. I prepared a Singleton class to get connection:</p>
  
  <pre><code>package connection;
  
  import java.sql.Connection;
  import java.sql.DriverManager;
  import java.sql.SQLException;
  
  public class ConnectionHandler 
  {
      private static ConnectionHandler handler = null;
      private static final String JDBC_URL = "jdbc:mysql://localhost:3306/";
      private static final String DATABASE = "javaTest";
      private static final String DATABASE_ID = "root";
      private static final String DATABASE_PW = "root_password";
  
      private ConnectionHandler() {}
  
      public synchronized static ConnectionHandler getInstance()
      {
          if(handler == null)
              handler = new ConnectionHandler();
  
          return handler;
  
      }
  
      public Connection getConnection() throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException
      {
          Class.forName("com.mysql.cj.jdbc.Driver").newInstance(); 
  //      Connection conn = DriverManager.getConnection(JDBC_URL + DATABASE, DATABASE_ID, DATABASE_PW);
          Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/javaTest", "root", "root_password");
  
          return conn;
      }
  }
  </code></pre>
  
  <p>If I execute application in debug mode, I can verify that it gets to penultimate instruction in method getConnection(), then after about 15 seconds the following exception is returned:</p>
  
  <pre><code>Exception in thread "main" com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
  
  The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
      at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)
      at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)
      at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836)
      at com.mysql.cj.jdbc.ConnectionImpl.&lt;init&gt;(ConnectionImpl.java:456)
      at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
      at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:197)
      at java.sql.DriverManager.getConnection(DriverManager.java:664)
      at java.sql.DriverManager.getConnection(DriverManager.java:247)
      at connection.ConnectionHandler.getConnection(ConnectionHandler.java:30)
      at dao.JDBCExampleDAOImpl.findCustomerById(JDBCExampleDAOImpl.java:16)
      at test.JDBCExampleTest.main(JDBCExampleTest.java:13)
  Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure
  
  The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
      at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
      at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
      at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
      at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)
      at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167)
      at com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:338)
      at com.mysql.cj.protocol.a.NativeAuthenticationProvider.negotiateSSLConnection(NativeAuthenticationProvider.java:777)
      at com.mysql.cj.protocol.a.NativeAuthenticationProvider.proceedHandshakeWithPluggableAuthentication(NativeAuthenticationProvider.java:486)
      at com.mysql.cj.protocol.a.NativeAuthenticationProvider.connect(NativeAuthenticationProvider.java:202)
      at com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1340)
      at com.mysql.cj.NativeSession.connect(NativeSession.java:157)
      at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:956)
      at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:826)
      ... 8 more
  Caused by: javax.net.ssl.SSLException: Unsupported record version Unknown-0.0
      at sun.security.ssl.InputRecord.checkRecordVersion(InputRecord.java:552)
      at sun.security.ssl.InputRecord.readV3Record(InputRecord.java:565)
      at sun.security.ssl.InputRecord.read(InputRecord.java:529)
      at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)
      at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
      at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
      at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)
      at com.mysql.cj.protocol.ExportControlled.performTlsHandshake(ExportControlled.java:336)
      at com.mysql.cj.protocol.StandardSocketFactory.performTlsHandshake(StandardSocketFactory.java:188)
      at com.mysql.cj.protocol.a.NativeSocketConnection.performTlsHandshake(NativeSocketConnection.java:99)
      at com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:329)
      ... 15 more
  </code></pre>
  
  <p>On the other hand, executing without debug I get the following:</p>
  
  <pre><code>Exception in thread "main" java.sql.SQLException: The server time zone value 'CEST' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specifc time zone value if you want to utilize time zone support.
      at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
      at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
      at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
      at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
      at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
      at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:76)
      at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836)
      at com.mysql.cj.jdbc.ConnectionImpl.&lt;init&gt;(ConnectionImpl.java:456)
      at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
      at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:197)
      at java.sql.DriverManager.getConnection(DriverManager.java:664)
      at java.sql.DriverManager.getConnection(DriverManager.java:247)
      at connection.ConnectionHandler.getConnection(ConnectionHandler.java:30)
      at dao.JDBCExampleDAOImpl.findCustomerById(JDBCExampleDAOImpl.java:16)
      at test.JDBCExampleTest.main(JDBCExampleTest.java:13)
  Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value 'CEST' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specifc time zone value if you want to utilize time zone support.
      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
      at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
      at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
      at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:85)
      at com.mysql.cj.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:132)
      at com.mysql.cj.protocol.a.NativeProtocol.configureTimezone(NativeProtocol.java:2118)
      at com.mysql.cj.protocol.a.NativeProtocol.initServerSession(NativeProtocol.java:2142)
      at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:1310)
      at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:967)
      at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:826)
      ... 8 more
  </code></pre>
  
  <p>MySQL is on and I closed Workbench, in case it could create conflicts.
  Can you spot the problem? </p>
  
  <p>Thanks for support.</p>