无法从Intellij连接到docker容器中运行的mySql-“指定的数据库用户/密码组合被拒绝”

amrnrhlw  于 2023-06-04  发布在  Mysql
关注(0)|答案(4)|浏览(373)

目前无法从Intellij连接到在Ubuntu上的Docker容器上本地运行的mySql。

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| tasklogs           |
+--------------------+

+----------+-----------+------+
| DATABASE | HOST      | USER |
+----------+-----------+------+
| tasklogs | localhost | dev  |
| tasklogs | localhost | root |
+----------+-----------+------+

+-----------------------------------------------------------+
| Grants for dev@localhost                                  |
+-----------------------------------------------------------+
| GRANT USAGE ON *.* TO `dev`@`localhost`                   |
| GRANT ALL PRIVILEGES ON `tasklogs`.* TO `dev`@`localhost` |
+-----------------------------------------------------------+

docker ps -a:

当我通过intellij连接时:

即**“拒绝指定的数据库用户/密码组合:[28000][1045]用户“dev '@”localhost“访问被拒绝(使用密码:是)"**
我输入了正确的密码。
任何帮助真的很感激。
谢谢

mm5n2pyu

mm5n2pyu1#

正如@danblack提到的,我需要通过tcp连接。
1)获取容器的IP:
docker inspect mysql1
2)我更改了mysql用户以允许从所有位置访问(如提到的here):
'dev'@'%'之前是'dev'@'localhost'
这一招奏效了:

slhcrj9b

slhcrj9b2#

解决方案
您没有将端口Map到localhost,因此无法使用localhost,这就是无法使用的原因

ports:
  - "3306:3306"
vshtjzan

vshtjzan3#

如果上面的答案都不适合您:

在我的例子中,我忘记了公开端口,但除此之外,我还在本地运行了mySQL。
所以为了调试这个,我做了以下事情:

mysql -h localhost -P 3306 --protocol=tcp -u root --password=password

上面的操作成功了,我成功地通过终端登录了。

**重要提示:**容器完成后,同样的命令允许我登录本地(非容器化)mySQL。因此,我试图确定两者之间的潜在冲突,因为两者都有相同的端口。
解决方案:我将容器中的数据库暴露在另一个端口309,成功连接。

ports:
  - "3309:3306"
  • 另外,检查以下内容可能也有帮助:*
  • 在“高级”选项卡中,将以下值添加到enabledTLSProtocols设置(参考here):enabledTLSProtocols: TLSv1,TLSv1.1,TLSv1.2,TLSv1.3
  • 驱动程序文件:MySQL Connector/J版本8.0.15
xuo3flqw

xuo3flqw4#

作为对@Hurricane回复的补充,我附上了
docker inspect yourContainerID命令
我的IP是:172.17.0.2

如果您使用的是Linux(MacOS),则还可以运行docker inspect yourContainerID | grep "IPAddress"来直接检索IPAddress
我的问题是卷,所以我创建了一个docker-compose.yml文件并运行docker compose up

version: '3.1'

services:
  world_x:
    image: mysql
    environment:
      MYSQL_DATABASE: 'world_x'
      MYSQL_USER: testuser
      MYSQL_PASSWORD: testpass
      MYSQL_ROOT_PASSWORD: testsuperpass
    ports:
      - "3306:3306"
    expose:
      - '3306'
    volumes:
      - mysql-volume:/var/lib/mysql
    restart: unless-stopped
volumes:
  mysql-volume:

相关问题