我正在尝试连接到mysql数据库,但遇到一个相同的错误:javax.servlet.ServletException:java.sql.SQLException:用户'user'@'localhost'的访问被拒绝(使用密码:YES )
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/employee","user1", "123");
GRANT ALL PRIVILEGES ON * . * TO 'user1'@'localhost';
FLUSH PRIVILEGES;
顺便说一句,当我尝试与'root'@'localhost'连接时,我遇到了同样的问题。
您有什么想法为什么它仍然无法使用? 答案 0 :(得分:0)
MySQL JDBC仅能通过TCP / IP(在Unix上或TCP / IP或Windows上的命名管道)进行连接。
MySQL JDBC驱动程序无法使用本地unix套接字建立连接。
对于Unix上的MySQL,localhost
具有我们可能期望的不同含义。它不是127.0.0.1 TCP / IP回送地址的主机名同义词。在Unix上,MySQL用户
'user1'@'localhost'
指定只能通过unix套接字文件连接的用户;无法通过TCP / IP连接到该用户。
上面解释了为什么MySQL拒绝来自JDBC的连接:连接尝试失败,因为不存在匹配的用户。
要创建一个从TCP / IP环回地址连接的MySQL用户(假设MySQL以--skip-name-resolve
开始且没有--skip-networking
的情况下,我们可以将用户指定为:
'user'@'127.0.0.1'
该用户将允许通过JDBC连接。
(如果启用了MySQL DNS名称解析,那么我们将需要使用解析为回送地址的主机名;或者我们可以考虑对用户的主机名部分使用通配符'%'。)
答案 1 :(得分:0)
尝试一下可能会有所帮助:
1)转到mysql终端。 2)mysql>使用mysql; 3)mysql>选择用户,从用户主机; 4)在您旁边,用户将主机设置为“%”,而不是localhost
。
现在在连接中,而不是在本地tryp中指定服务器的IP地址。
希望这对您有所帮助。 :)