这个问题在这里已有答案:
这是我的JDBC连接池配置:
<jdbc-connection-pool max-pool-size="300" steady-pool-size="3" datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" name="teDS" wrap-jdbc-objects="false" connection-validation-method="auto-commit" res-type="javax.sql.DataSource">
<property name="URL" value="jdbc:mysql://localhost:3306/db"></property>
<property name="port" value="3306"></property>
<property name="DatabaseName" value="db"></property>
<property name="serverName" value="localhost"></property>
<property name="password" value="XXX"></property>
<property name="url" value="jdbc:mysql://localhost:3306/db"></property>
<property name="user" value="user"></property>
</jdbc-connection-pool>
请帮我
但我PING连接有这个错误:
teDS发生错误Ping连接池失败 . 无法分配连接,因为:用户拒绝访问'user' @' 127.0.0.1 '(使用密码:是)请查看server.log以获取更多详细信息 .
1 回答
MySQL中的用户由用户名和主机标识 .
为了允许连接,我们需要在MySQL中创建一个具有匹配用户名和主机的用户 . 要创建完全匹配的用户:
要复制现有用户的权限,我们可以使用SHOW GRANTS语句为其他用户提取权限
我们可以复制该输出,并将其用作新用户的GRANT语句的基础,将'localhost'替换为'127.0.0.1' .
作为另一种选择,也可以为主机名创建一个带有'%'通配符的用户,而不是'127.0.0.1' . 这将允许来自任何IP地址的连接 .
如果用户存在,则密码可能错误 . 验证池配置使用的密码是否与mysql.user表中存储的密码相匹配 .
并比较哈希值 .
正在返回的错误消息看起来像是来自MySQL服务器:
这表明通过端口3306发生了成功的TCP握手,并且MySQL服务器正在尝试进行身份验证:user ='user',host ='127.0.0.1',password = PASSWORD('XXX') .
用户不存在于mysql.user表中,密码不正确,或者(可能)用户没有database ='db'的权限 .
(如果将DML更改应用于mysql数据库中的特权表,则发出FLUSH特权以使这些更改生效 . (如果使用GRANT和REVOKE语法应用更改,则不需要FLUSH PRIVILEGES,仅在使用INSERT应用更改时才需要FLUSH PRIVILEGES ,更新,删除 . )