2017-05-03 8 views
0

Ich habe Probleme, eine Verbindung zu meiner Datenbank von Eclipse mit meiner Instanz eine Google Cloud SQL-Datenbank. Ich habe den Zugriff auf die Datenbank über die mysql-Befehlszeile, aber nicht in eclise.Keine Verbindung zu Google Cloud SQL über Java Eclipse

Mein Code:

String instanceConnectionName = "****"; 
String databaseName = "****"; 
String username = "***"; 
String password = "***"; 

String jdbcUrl = String.format(
      "jdbc:mysql://google/%s?cloudSqlInstance=%s&" 
     + "socketFactory=com.google.cloud.sql.mysql.SocketFactory", 
      databaseName, 
      instanceConnectionName);   
Connection connection = DriverManager.getConnection(jdbcUrl, username, password); 

Der Fehler erhalte ich:

jdbc:mysql://google/****?cloudSqlInstance=****e&socketFactory=com.google.cloud.sql.mysql.SocketFactory 

May 03, 2017 10:53:07 AM com.google.cloud.sql.mysql.SocketFactory connect 
INFO: Connecting to Cloud SQL instance [****]. 
May 03, 2017 10:53:07 AM com.google.cloud.sql.mysql.SslSocketFactory getInstance 
INFO: First Cloud SQL connection, generating RSA key pair. 
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
at java.lang.reflect.Constructor.newInstance(Unknown Source) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:404) 
at com.mysql.jdbc.Util.getInstance(Util.java:387) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:917) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:885) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860) 
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2332) 
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2085) 
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:795) 
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:44) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
at java.lang.reflect.Constructor.newInstance(Unknown Source) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:404) 
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:400) 
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:327) 
at java.sql.DriverManager.getConnection(Unknown Source) 
at java.sql.DriverManager.getConnection(Unknown Source) 
at neviTracker.program.ProgramConnections.main(ProgramConnections.java:27) 
Caused by: java.lang.RuntimeException: Unable to obtain credentials to communicate with the Cloud SQL API 
at com.google.cloud.sql.mysql.SslSocketFactory$ApplicationDefaultCredentialFactory.create(SslSocketFactory.java:545) 
at com.google.cloud.sql.mysql.SslSocketFactory.getInstance(SslSocketFactory.java:138) 
at com.google.cloud.sql.mysql.SocketFactory.connect(SocketFactory.java:47) 
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:298) 
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2253) 
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2286) 
... 13 more 

Caused by: java.io.IOException: The Application Default Credentials are not available. They are available if running on Google App Engine, Google Compute Engine, or Google Cloud Shell. Otherwise, the environment variable GOOGLE_APPLICATION_CREDENTIALS must be defined pointing to a file defining the credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information. 
at com.google.api.client.googleapis.auth.oauth2.DefaultCredentialProvider.getDefaultCredential(DefaultCredentialProvider.java:98) 
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.getApplicationDefault(GoogleCredential.java:213) 
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.getApplicationDefault(GoogleCredential.java:191) 
at com.google.cloud.sql.mysql.SslSocketFactory$ApplicationDefaultCredentialFactory.create(SslSocketFactory.java:543) 
... 18 more 
+0

Haben Sie sichergestellt, dass Ihr MySQL-Dienst betriebsbereit ist? – patateskafa

+0

Ja @patateskafa –

Antwort

1

Die Anwendung Standardanmeldeinformationen sind nicht verfügbar. Sie sind verfügbar, wenn sie auf Google App Engine, Google Compute Engine oder Google Cloud Shell ausgeführt werden. Andernfalls muss die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS definiert werden, die auf eine Datei verweist, die die Anmeldeinformationen definiert. Weitere Informationen finden Sie unter https://developers.google.com/accounts/docs/application-default-credentials.

Sie benötigen Anmeldeinformationen für den Zugriff auf Google Cloud Sql. Sie können von here

erstellen.

Erstellen Sie nach dem Erstellen Ihrer Anmeldeinformationen Ihre Schlüsseldatei und zeigen Sie sie in Ihr bash_profile (lesen Sie das Blockangebot für weitere Informationen). dann sollte es funktionieren

Alternativ können Sie verwenden CLOUD SQL PROXY nicht mit Umgebungsvariablen arbeiten, folgen Sie den Schritten in diesem Link, wenn etwas verschwommen ist bitte fragen Sie. https://cloud.google.com/sql/docs/mysql/connect-admin-proxy

hoffe das hilft.

Verwandte Themen