如何将mysql工作台连接到docker中运行mysql?

Paw*_*mar 36 mysql mysql-workbench docker

我在docker容器内使用mysql服务器,并且能够访问docker内部.如何在我的本地(主机)上运行的mysql工作台中创建连接.

Kri*_*hna 22

您必须在docker容器中进行一些配置.请按照以下步骤操作.

  1. 在docker-compose.yml中指定mysql配置块.我在docker-compose.yml文件中的services对象下面有以下mysql块.

    services:
        db:
            image: mysql
            volumes:
                - "./.data/db:/var/lib/mysql"
            environment:
                MYSQL_ROOT_PASSWORD: root
                MYSQL_DATABASE: mydb
                MYSQL_USER: user
                MYSQL_PASSWORD: pass
            ports:
                42333:3306
    
    Run Code Online (Sandbox Code Playgroud)
  2. 重新启动docker容器并运行以下命令以访问mysql容器中的bash shell

    docker ps
    docker exec -it <mysql container name> /bin/bash 
    
    Run Code Online (Sandbox Code Playgroud)

    在容器内部,要连接到mysql命令行类型,

    mysql -u root -p
    
    Run Code Online (Sandbox Code Playgroud)

    使用docker -compose.yml中指定的MYSQL_ROOT_PASSWORD.执行以下命令以创建新用户.

    create user 'user'@'%' identified by 'pass';
    grant all privileges on *.* to 'user'@'%' with grant option;
    flush privileges;
    
    Run Code Online (Sandbox Code Playgroud)

    百分号(%)表示所有ip.重新启动docker容器.

  3. 在MySQL Workbench中提供连接详细信息.使用docker -compose.yml文件中指定的MYSQL_PASSWORD.

    在此输入图像描述

您现在应该能够连接到您的mysql容器.

  • 您从何处获得此IP? (6认同)
  • IP通常存储在.env文件中,具体取决于您的设置。例如,“ DB_HOST = 127.0.0.1 DB_PORT = 33061” @Krishna,您关于在哪里获得IP的答案似乎很奇怪,因为人们经常使用AFAIK的Vagrant的Docker而不是Docker。另外,如果您要设置为root用户,或者由于已经存在而试图创建该用户时收到错误消息,则只需设置一个新用户,说“ workbench”即可。(例如,您也可以编辑用户的IP)。否则,这太棒了。谢谢! (2认同)

And*_*nko 20

默认情况下,部署后MySQL具有以下连接限制:

mysql> select host, user from mysql.user;
+-----------+---------------+
| host      | user          |
+-----------+---------------+
| localhost | healthchecker |
| localhost | mysql.session |
| localhost | mysql.sys     |
| localhost | root          |
+-----------+---------------+
4 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

显然,出于安全目的,您将无法在docker镜像之外连接到它.如果您需要更改它以允许root从任何主机连接(例如,出于开发目的),请执行以下操作:

  1. 使用所需的所有端口映射启动mysql映像:

    docker run -p 3306:3306 --name=mysql57 -d mysql/mysql-server:5.7

或者,如果需要完整的端口映射:

docker run -p 3306:3306 -p 33060:33060 --name=mysql57 -d mysql/mysql-server:5.7
Run Code Online (Sandbox Code Playgroud)
  1. 如果这是全新安装 - 获取默认密码:

    docker logs mysql57 2>&1 | grep GENERATED

  2. 使用mysql客户端直接连接到docker中的mysqld:

    docker exec -it mysql57 mysql -uroot -p

  3. 如果这是全新安装,则会要求您使用ALTER USER命令更改密码.做吧.

  4. 运行SQL:

    update mysql.user set host = '%' where user='root';

  5. 退出mysql客户端.

  6. 重启容器:

    docker restart mysql57

现在您将能够从MySQL Workbench连接到

host: `0.0.0.0` 
port: `3306`
Run Code Online (Sandbox Code Playgroud)

完成所有更改后,查询将显示:

select host, user from mysql.user;
+-----------+---------------+
| host      | user          |
+-----------+---------------+
| %         | root          |
| localhost | healthchecker |
| localhost | mysql.session |
| localhost | mysql.sys     |
+-----------+---------------+
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这个答案对我帮助很大。仅更改密码此处未记录,在这里找到答案:/sf/answers/2345780461/ (2认同)
  • 谢谢你安德烈,今天我遇到了这个问题,我已经尝试连接了大约 3 天,我只是使用了你的提示中的 ip 0.0.0.0 和端口 3306 并且它有效,但我使用 mysqlsh。 (2认同)
  • 以我经验丰富的无知,我从未想过“0.0.0.0”是正确的......但它是! (2认同)

Von*_*onC 14

2个与泊坞有关的条件:

(例如:docker run -d -p 3306:3306 tutum/mysql)

  • 第二,如果你在VM(docker-machine,boot2docker)中使用docker,你需要使用docker-machine ip <VMname>带有主机映射端口的ip .

    http://$(docker-machine ip <VMname>):hostPort
    
    Run Code Online (Sandbox Code Playgroud)

如果需要使用localhost,则需要在VirtualBox级别进行一些端口转发:

VBoxManage controlvm "boot2docker-vm" natpf1 "tcp-port3306,tcp,,3306,,3306"
VBoxManage controlvm "boot2docker-vm" natpf1 "udp-port3306,udp,,3306,,$3306"
Run Code Online (Sandbox Code Playgroud)

(controlvm如果VM正在运行,modifyvm则虚拟机已停止)(替换" boot2docker-vm"你的虚拟机的名称:见docker-machine ls)


2 mysql相关的条件:

  • 如图所示nkratzke/EasyMySQL/Dockerfile,您需要启用远程访问:

    # Enable remote access (default is localhost only, we change this
    # otherwise our database would not be reachable from outside the container)
    RUN sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnf
    
    Run Code Online (Sandbox Code Playgroud)
  • 您需要在docker镜像中启动数据库时创建用户.
    例如nkratzke/EasyMySQL/start-database.sh,参见Dockerfile CMD:

    /usr/sbin/mysqld &
    sleep 5
    echo "Creating user"
    echo "CREATE USER '$user' IDENTIFIED BY '$password'" | mysql --default-character-set=utf8
    echo "REVOKE ALL PRIVILEGES ON *.* FROM '$user'@'%'; FLUSH PRIVILEGES" | mysql --default-character-set=utf8
    echo "GRANT SELECT ON *.* TO '$user'@'%'; FLUSH PRIVILEGES" | mysql --default-character-set=utf8
    echo "finished"
    
    Run Code Online (Sandbox Code Playgroud)


Sha*_*yar 12

我试图连接,Mysql Workbench但它不允许我。结果我忘了提port。以下是运行然后从工作台连接的完整命令:

第 1 步 - 运行 docker 容器:

docker run --name mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=testdb -e MYSQL_USER=admin -e MYSQL_PASSWORD=root -d mysql:8.0.20
Run Code Online (Sandbox Code Playgroud)

上述命令的解释:

您可以通过以下方式查看容器的实时日志-f means follow

docker logs mysql8 -f
Run Code Online (Sandbox Code Playgroud)

第 2 步 - 从 Mysql Workbench 连接:

host: localhost
port: 3306
user: admin
password: root
Run Code Online (Sandbox Code Playgroud)


Dea*_*ool 8

假设您有docker-compose文件的下一个内容:

database: image: mysql:5.6 volumes: - dbdata:/var/lib/mysql environment: - "MYSQL_DATABASE=homestead" - "MYSQL_USER=homestead" - "MYSQL_PASSWORD=secret" - "MYSQL_ROOT_PASSWORD=secret" ports: - "33061:3306"

对于本地主机,只需使用主机127.0.0.1和33061端口 在此处输入图片说明

  • 最佳答案!!您必须查看 docker-compose.yml 文件中的 MySQL 设置。只需使用它们 (2认同)

pam*_*voy 5

我找到了一个视频,展示了另一种实现此功能的方法。您可以在传入端口号时指定 IP 地址。也就是说,类似的东西-p 127.0.0.1:3307:3306不仅仅是-p 3307:3306 我以前从未见过 https://www.youtube.com/watch?v=20om-9Gwuc0#t=7m

启动命令示例

docker run -d -e MYSQL_ROOT_PASSWORD=test --name mysql8 -p 127.0.0.1:3307:3306 mysql:8
Run Code Online (Sandbox Code Playgroud)

然后我就可以使用 MYSQL Workbench 连接到127.0.0.1port 3307在此输入图像描述


归档时间:

查看次数:

41576 次

最近记录:

6 年,4 月 前