为什么不接受来自本地程序的连接?

当我的CentOS 7服务器上的某个程序尝试访问位于同一台机器上的MySQL / MariaDB数据库时,我收到了一个"Host 'mydomain.com' is not allowed to connect to this MariaDB server"错误。 当我inputhostname到terminal,它回复mydomain.com

完整的堆栈跟踪是:

 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 

该服务器已经运行了一段时间的本地数据库连接的应用程序。 使用本教程中的说明开始在服务器上安装OpenVPN之后发生错误。 我已经把本教程中几乎所有的命令都反转过来,除了反函数未知的某些脚本调用之外。 到目前为止,这个错误仍然存​​在。

我需要改变什么才能让MySQL连接再次被本地接受?

————————————————– —————————————

编辑#1

根据@ Dan的请求, /etc/hosts没有改变,因此仍然是:

 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 

此外,应用程序的连接string保持: "jdbc:mysql://localhost:3306/sometestdb?autoReconnect=true";

编辑#2

根据@ sufado的build议, I want to confirm that /etc/hosts应该如下:

 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 

它清楚地告诉你:

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

所以你需要做的是添加mydomain.com作为permited主机在users表mysql数据库。 例如:

 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 | +--------------------+--------------+-------------------------------------------+ 

你也可以添加'%',它可以用于任何主机,就像一个通配符。 如果您甚至无法进入数据库以进行上述更改,则应该将您的主机名从mydomain.com更改为localhost。 您允许的连接到数据库应该至less是本地主机IP 127.0.0.1

更新

 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. 

您得到mydomain.com错误的原因是因为操作系统正在parsingDNS主机名称查找127.0.0.1到mydomain.com。 这不是一个MySQL问题,而是一个networking问题。