I am trying to connect to MySQL from JDBC via localhost. But the connection fails. In the exception, I see that JDBC is trying to connect to 127.0.0.1
    String connectionString = "";
    try {
        loadProperties();
        Class.forName("com.mysql.jdbc.Driver");
        // Setup the connection with the DB
        connectionString = "jdbc:mysql://" + properties.getProperty("host") + "/" + properties.getProperty
                ("database") + "?user=" + properties.getProperty("user") + "&password=" + properties
                .getProperty
                        ("password");
        connect = DriverManager
                .getConnection(connectionString);
        logger.debug("Connected to " + properties.getProperty("host"));
    } catch (Exception e) {
        logger.error("Database Connection failed with connection string - " + connectionString,e);
    }
From the log:
Database Connection failed with connection string - jdbc:mysql://localhost/testdb?user=testuser&password=testpass
java.sql.SQLException: Access denied for user 'testuser'@'127.0.0.1' (using password: YES)
Why is it replacing localhost with 127.0.0.1? I have configured login only for localhost.
I stumbled across this question when encountering the same issue.
To answer the question "Why is it replacing localhost with 127.0.0.1?":
From the MySQL docs, using localhost in your connection URL implies that you want to connect to a socket.  Using 127.0.0.1 implies that you want to connect through TCP/IP.
On Unix, MySQL programs treat the host name localhost specially, in a way that is likely different from what you expect compared to other network-based programs. For connections to localhost, MySQL programs attempt to connect to the local server by using a Unix socket file. ... To ensure that the client makes a TCP/IP connection to the local server, use --host or -h to specify a host name value of 127.0.0.1
According to this answer, it appears that by default JDBC only supports TCP/IP connections, at least for some Java versions. Original source: http://lists.mysql.com/java/8749:
Java itself doesn't support unix domain sockets
So, I'd guess that since JDBC only connects through TCP/IP, it converts  localhost to 127.0.0.1 internally.
To solve the problem in my case:
[email protected]localhost to 127.0.0.1 in my connection URL.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With