无法将docker上运行的Mysql 8与mysql工作台连接

问题描述 投票:0回答:2

我有一个运行 Mysql 8 的 docker 设置。

我可以在docker容器内访问Mysql,但是,我无法使用Mysql工作台进行连接。我有另一个 mysql 容器,但这个是 Mysql 版本 5.7,我与该容器的连接没有问题。

我尝试在 mysql.user 中使用 % 来允许 root 用户完全主机访问

| root             | %         |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |

我尝试使用主机名连接到容器:localhost、0.0.0.0、127.0.0.1 和端口 3306 但没有运气

我还创建了一个单独的用户并授予完全权限,但仍然没有运气

下面是我的 Docker 撰写文件

version: '3.5'

services:
  database:
    build:
      context: ./images/mysql
    restart: always
    command: ['--default-authentication-plugin=mysql_native_password']
    environment:
      - MYSQL_DATABASE=inim
      - MYSQL_USER=inimuser
      - MYSQL_PASSWORD=inimpass
      - MYSQL_ROOT_PASSWORD=docker
    ports:
      - "3306:3306"
    volumes:
      - ./database/data:/var/lib

volumes:
  my-datavolume:

我的 Dockerfile:

FROM mysql:8.0.20

CMD ["mysqld"]

EXPOSE 3306

下面是我的 Docker PS

b8832d9711b4        docker_inim_db_database   "docker-entrypoint.s…"   14 minutes ago      Up 14 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp          docker_inim_db_database_1

我对 Mysql 5.7 有类似的设置,并且连接良好。不知道我在这里做错了什么。

mysql docker mysql-workbench mysql-8.0
2个回答
0
投票

您可以通过进入容器来调试您的进程。 请运行:

$ docker exec docker_inim_db_database_1 /bin/bash

现在您应该处于容器的 bash 中。 然后使用以下命令登录 mysql bash:

$ mysql -uroot -p

然后输入您的密码,如果没有密码,则直接按 Enter。

该过程有两个步骤:

a) 授予权限。作为 root 用户,用当前的 root 密码替换“密码”来执行:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

b) 绑定到所有地址:

最简单的方法是注释掉 my.cnf 文件中的行:

#bind-address = 127.0.0.1 

并重新启动mysql

service mysql restart

默认情况下,它仅绑定到本地主机,但如果您注释该行,它会绑定到它找到的所有接口。注释掉该行相当于bind-address=*。

要检查 mysql 服务已绑定的位置,请以 root 身份执行:

netstat -tupan | grep mysql

Ubuntu 16 更新:

配置文件是(现在)

/etc/mysql/mysql.conf.d/mysqld.cnf 

以上大部分步骤均来自答案:https://stackoverflow.com/a/11225588/659077


0
投票

创建文件 docker-compose.yml

version: '3.3'
services:
  central_db_8.0.30:
    image: mysql:8.0.30
    container_name: local-central-db-container-8.0.30
    environment:
      MYSQL_ROOT_PASSWORD: Ro@t1234
    volumes:
      - ./dbdata:/var/lib/mysql
      - ./my.cnf:/etc/mysql/my.cnf:ro
    ports:
      - 3306:3306
    networks:
      - local_central_db_network
networks:
  local_central_db_network:
    external: true

创建文件 my.cnf

[mysqld]
pid-file=/var/lib/mysql/mysql.pid
default_authentication_plugin=mysql_native_password

网络

sudo docker network create local_central_db_network

命令:Docker:设置:已初始化

sudo docker-compose down
sudo docker-compose build && docker-compose up -d

奔跑

sudo chmod 777 -R *
docker start local-central-db-container-8.0.30
docker exec -it local-central-db-container-8.0.30 bash
chown 644 /etc/mysql/my.cnf
mysql -u root -p
Ro@t1234

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Ro@t1234';
SHOW DATABASES;
© www.soinside.com 2019 - 2024. All rights reserved.