por que o mysql não aceita conexões de programas locais?

1

Estou recebendo um erro "Host 'mydomain.com' is not allowed to connect to this MariaDB server" sempre que um programa no meu servidor CentOS 7 tenta acessar o banco de dados MySQL / MariaDB localizado na mesma máquina. Quando digito hostname no terminal, ele responde com mydomain.com .

O rastreamento completo da pilha é:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
    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:526)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.Util.getInstance(Util.java:386)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
    at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2395)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2316)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:834)
    at com.mysql.jdbc.JDBC4Connection.<init>(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:526)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:416)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:347)
    at java.sql.DriverManager.getConnection(DriverManager.java:571)
    at java.sql.DriverManager.getConnection(DriverManager.java:215)
    at mainpackage.TestJDBC.main(TestJDBC.java:23)
Caused by: java.sql.SQLException: null,  message from server: "Host 'mydomain.com' is not allowed to connect to this MariaDB server"
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1114)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2493)
    at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2334)
... 13 more  

Este servidor tem executado aplicativos com conexões de banco de dados local há algum tempo. O erro ocorreu depois que eu comecei a instalar o OpenVPN no servidor usando as instruções neste tutorial. Desde então, revisei quase todos os comandos do tutorial, com exceção de certas chamadas de script cujas funções inversas não são conhecidas. O erro persiste após os passos dados até agora.

O que eu preciso mudar para que as conexões do MySQL sejam aceitas localmente de novo?

----------------------------------------------- ------------------------------------------

EDIT # 1

Conforme o pedido de Dan, /etc/hosts não mudou e, portanto, permanece:

127.0.0.1 localhost.localdomain localhost
# Auto-generated hostname. Please do not remove this comment.
192.96.215.22 mydomain.com mydomain
::1     ip6-localhost ip6-loopback  

Além disso, a string de conexão do aplicativo permanece: "jdbc:mysql://localhost:3306/sometestdb?autoReconnect=true";

EDIT # 2

Como sugere o @ sufado, I want to confirm that /etc/hosts deve ser o seguinte:

127.0.0.1 localhost.localdomain localhost mydomain.com
# Auto-generated hostname. Please do not remove this comment.
192.96.215.22 mydomain.com mydomain
::1     ip6-localhost ip6-loopback  
    
por CodeMed 13.02.2015 / 22:22

1 resposta

3

Diz claramente:

Host 'mydomain.com' is not allowed to connect to this MariaDB server

Então, o que você precisa fazer é adicionar mydomain.com como um host permitido na tabela users, no banco de dados mysql. Por exemplo:

mysql> select host,user,password from user;
+--------------------+--------------+-------------------------------------------+
| host               | user         | password                                  |
+--------------------+--------------+-------------------------------------------+
| localhost          | root         | *E99774447E62446243A1880831F8956BD8529ABF |
+--------------------+--------------+-------------------------------------------+

GRANT ALL PRIVILEGES ON *.* to root@"mydomain.com" IDENTIFIED BY 'XXXX' WITH GRANT OPTION;

mysql> select host,user,password from user;
+--------------------+--------------+-------------------------------------------+
| host               | user         | password                                  |
+--------------------+--------------+-------------------------------------------+
| localhost          | root         | *E99774447E62446243A1880831F8956BD8529ABF |
| mydomain.com       | root         | *E99774447E62446243A1880831F8956BD8529ABF |
+--------------------+--------------+-------------------------------------------+

Você também pode adicionar apenas '%' e funcionaria para qualquer host, é como um caractere curinga. Se você não pode nem entrar no banco de dados para fazer as mudanças acima, então você deve mudar seu hostname para localhost de mydomain.com. Suas conexões permitidas com o banco de dados devem ser no mínimo o localhost ip 127.0.0.1

UPDATE :

You can disable DNS host name lookups by starting mysqld with the --skip-name-resolve option. However, in this case, you can use only IP addresses in the MySQL grant tables.

O motivo pelo qual você está recebendo o erro mydomain.com é porque o sistema operacional está resolvendo a consulta de nome de host DNS 127.0.0.1 para mydomain.com. Isso não é um problema do mysql, mas um problema de rede.

    
por 13.02.2015 / 23:03