wiliamps 6 de out. de 2012
Para conexão remota, você precisa:
entrar no Manager Security (é uma opção do MySQL Workbench);
selecionar o seu SGBD local e clicar em OK (deve se chamar mysqld@localhost);
você vai ver um lista de usuários, selecione o usuário utilizado pela sua aplicação web;
informa % no campo “Limit Connectivity to Hosts Matching”.
Esta alteração faz seu SGBD MySQL aceitar conexão do usuário quando estiver em outras máquinas.
A porta padrão do MySQL é 3306, por isso, você também deverá liberar esta porta em todos os firewall entre o servidor web e seu servidor de banco de dados.
wiliamps
BrunoFurtado 6 de out. de 2012
Segue exemplo de conexão.
package br.com.site.persistence.mysql ;
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.PreparedStatement ;
import java.sql.ResultSet ;
import java.sql.SQLException ;
import br.com.site.persistence.DaoFactory ;
public class MysqlDaoFactory extends DaoFactory {
public static final String MYSQL_DRIVER = "com.mysql.jdbc.Driver" ;
public static final String URL_CONNECTION = "jdbc:mysql://127.0.0.1:3307/MeuBanco" ;
public static final String USER = "usuario" ;
public static final String PASS = "senha" ;
public static Connection createConnection () throws ClassNotFoundException , SQLException {
Class . forName ( MYSQL_DRIVER );
return DriverManager . getConnection ( URL_CONNECTION , USER , PASS );
}
public static void close ( Connection conn , PreparedStatement ps , ResultSet rs ) {
try {
if ( rs != null )
rs . close ();
if ( ps != null )
ps . close ();
if ( conn != null )
conn . close ();
} catch ( SQLException e ) {
e . printStackTrace ();
}
}
}
amasarac 7 de out. de 2012
Continua dando erro
O código da classe ficou assim:
package mpe ;
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.PreparedStatement ;
import java.sql.ResultSet ;
import java.sql.SQLException ;
public class conexao {
public static String status = "" ;
public static final String MYSQL_DRIVER = "com.mysql.jdbc.Driver" ;
public static final String URL_CONNECTION = "jdbc:mysql://fdb3.awardspace.com:3306/1161200_mpe" ;
public static final String USER = "1161200_mpe" ;
public static final String PASS = "8or4ever" ;
public static void createConnection () throws ClassNotFoundException , SQLException {
Class . forName ( MYSQL_DRIVER );
DriverManager . getConnection ( URL_CONNECTION , USER , PASS );
status = "Connection opened" ;
}
public static void close ( Connection conn , PreparedStatement ps , ResultSet rs ) {
try {
if ( rs != null ) {
rs . close ();
}
if ( ps != null ) {
ps . close ();
}
if ( conn != null ) {
conn . close ();
}
} catch ( SQLException e ) {
}
}
}
A classe que testa a conexão:
import java.sql.DriverManager ;
import java.sql.SQLException ;
import java.util.logging.Level ;
import java.util.logging.Logger ;
import mpe.conexao ;
public class MPE {
public static void main ( String [] args ) {
try {
conexao . createConnection ();
} catch ( ClassNotFoundException | SQLException ex ) {
Logger . getLogger ( MPE . class . getName ()). log ( Level . SEVERE , null , ex );
}
System . out . println ( "testando..." );
System . out . println ( conexao . status );
}
}
e o LOG do erro:
SEVERE: null
com.mysql.jdbc.exceptions.jdbc4.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 sun .reflect .NativeConstructorAccessorImpl .newInstance0 ( Native Method )
at sun .reflect .NativeConstructorAccessorImpl .newInstance ( NativeConstructorAccessorImpl .java :57 )
at sun .reflect .DelegatingConstructorAccessorImpl .newInstance ( DelegatingConstructorAccessorImpl .java :45 )
at java .lang .reflect .Constructor .newInstance ( Constructor .java :525 )
at com .mysql .jdbc .Util .handleNewInstance ( Util .java :411 )
at com .mysql .jdbc .SQLError .createCommunicationsException ( SQLError .java :1117 )
at com .mysql .jdbc .MysqlIO .( MysqlIO .java :350 )
at com .mysql .jdbc .ConnectionImpl .coreConnect ( ConnectionImpl .java :2408 )
at com .mysql .jdbc .ConnectionImpl .connectOneTryOnly ( ConnectionImpl .java :2445 )
at com .mysql .jdbc .ConnectionImpl .createNewIO ( ConnectionImpl .java :2230 )
at com .mysql .jdbc .ConnectionImpl .( ConnectionImpl .java :813 )
at com .mysql .jdbc .JDBC4Connection .( JDBC4Connection .java :47 )
at sun .reflect .NativeConstructorAccessorImpl .newInstance0 ( Native Method )
at sun .reflect .NativeConstructorAccessorImpl .newInstance ( NativeConstructorAccessorImpl .java :57 )
at sun .reflect .DelegatingConstructorAccessorImpl .newInstance ( DelegatingConstructorAccessorImpl .java :45 )
at java .lang .reflect .Constructor .newInstance ( Constructor .java :525 )
at com .mysql .jdbc .Util .handleNewInstance ( Util .java :411 )
at com .mysql .jdbc .ConnectionImpl .getInstance ( ConnectionImpl .java :399 )
at com .mysql .jdbc .NonRegisteringDriver .connect ( NonRegisteringDriver .java :334 )
at java .sql .DriverManager .getConnection ( DriverManager .java :579 )
at java .sql .DriverManager .getConnection ( DriverManager .java :221 )
at mpe .conexao .createConnection ( conexao .java :21 )
at MPE .main ( MPE .java :11 )
Caused by : java .net .ConnectException : Connection refused : connect
at java .net .DualStackPlainSocketImpl .connect0 ( Native Method )
at java .net .DualStackPlainSocketImpl .socketConnect ( DualStackPlainSocketImpl .java :69 )
at java .net .AbstractPlainSocketImpl .doConnect ( AbstractPlainSocketImpl .java :339 )
at java .net .AbstractPlainSocketImpl .connectToAddress ( AbstractPlainSocketImpl .java :200 )
at java .net .AbstractPlainSocketImpl .connect ( AbstractPlainSocketImpl .java :182 )
at java .net .PlainSocketImpl .connect ( PlainSocketImpl .java :157 )
at java .net .SocksSocketImpl .connect ( SocksSocketImpl .java :391 )
at java .net .Socket .connect ( Socket .java :579 )
at java .net .Socket .connect ( Socket .java :528 )
at java .net .Socket .( Socket .java :425 )
at java .net .Socket .( Socket .java :241 )
at com .mysql .jdbc .StandardSocketFactory .connect ( StandardSocketFactory .java :259 )
at com .mysql .jdbc .MysqlIO .( MysqlIO .java :300 )
… 16 more
Começando a ficar desesperado
Gleidson_Henrique 8 de out. de 2012
Baixe o MySql Tools. Nele tem o MySQL Administrator.
Tente-se conectar por ele. Assim que conseguir conectar, quer dizer que não existe problemas entre o seu computador e o db remoto.
Tem duas coisas que pode estar acarretando nesse problema. Dentro do mysql, entre um db chamado ‘mysql’. Nele, existe algumas tabelas que contem os users. Veja se nessa tabela existe o usuario que voce está tentando usar e veja se no campo ‘host’ está escrito ‘localhost’ ou está ‘%’.
Outra coisa que prejudica a conexao é o firewall. Até mesmo o firewall do windows.
Abraços
edu_merckx 9 de out. de 2012
amasarac, só uma dica: não exponha os dados de acesso…