我正在尝试从Java写入一个mysql数据库,但是我收到了这个错误:
java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
我正在连接到本地的mysql实例,说实话我不知道什么是172.17.0.1 ip。
我写的小代码:
public static void writeToDB(String value, String unit) throws ClassNotFoundException, SQLException, SQLException
{
// create a mysql database connection
String myDriver = "com.mysql.cj.jdbc.Driver";
String myUrl = "jdbc:mysql://localhost:3306/MyDB";
Class.forName(myDriver);
Connection conn = null;
conn = DriverManager.getConnection(myUrl, "root", "MyPass");
// the mysql insert statement
String query = " insert into data (unit, value)"
+ " values (?, ?)";
// create the mysql insert preparedstatement
PreparedStatement preparedStmt = null;
preparedStmt = conn.prepareStatement(query);
preparedStmt.setString (1, unit);
preparedStmt.setString (2, value);
// execute the preparedstatement
preparedStmt.execute();
conn.close();
}
我跑了
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'MyPass' WITH GRANT OPTION;
但没有改变。
我的my.cnf已全部注释掉了。 我的本地IP是192.168.1.46。我试图在myUrl变量上使用这个ip和127.0.0.1而不是localhost但没有改变。
我重启了mysql服务器,eclipse和pc没有成功。
编辑:其他信息 我停止了服务器并运行了代码。我得到完全相同的例外。我猜不知道我根本无法到达服务器。
我可以在我的Python脚本中使用“localhost”。它与java代码写在同一个表中。
答案 0 :(得分:1)
我一直面临着同样的问题。我找到了解决此问题的方法。
CREATE USER 'root'@'172.17.0.1' IDENTIFIED BY 'root';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.23.0.1' WITH GRANT OPTION;
docker exec -it a5572eb07b8fe8e216d9addc63c1b8f50473638393c39d79e44e2ca7ffd6781e mysql -uroot -p (to get the docker-mysql terminal)[![This picture is for docker-mysql CLI][1]][1]
flush privileges;
为您使用的 IP 地址创建用户,在 docker-mysql 终端上使用上述命令获取此错误。
答案 1 :(得分:0)
我通过关闭Docker服务器解决了这个问题。 我正在将它用于另一个项目,我完全忘了它。仍然不确定为什么我得到错误,我有一个运行的Mysql容器,但不是在localhost。
答案 2 :(得分:0)
如果Docker自身无法使用自己的云帐户连接(Feuerwall,登录问题等),则在本地Docker中与DB连接时也会出现相同的错误。
答案 3 :(得分:0)
想法:
因此要解决此问题: 1.给予root更多访问权限 2.使用其他用户进行访问(不是root) 3.重要:请使用最新的mysql jar驱动程序包。