source

mysql 워크벤치를 도커 내 실행 중인 mysql에 연결하려면 어떻게 해야 합니까?

factcode 2022. 9. 11. 17:07
반응형

mysql 워크벤치를 도커 내 실행 중인 mysql에 연결하려면 어떻게 해야 합니까?

도커 컨테이너 안에서 mysql 서버를 사용하고 있으며 도커 안에서 접속할 수 있습니다.로컬(호스트 머신)에서 실행되는 mysql 워크벤치에서 연결을 만드는 방법.

배포 후 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)

보안상의 이유로 도커 이미지 이외에는 접속할 수 없는 것 같습니다.루트를 임의의 호스트에서 접속할 수 있도록 하려면(예를 들어 개발 목적으로) 다음을 수행합니다.

  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
  1. 새로 설치하는 경우 기본 비밀번호를 가져옵니다.

    docker logs mysql57 2>&1 | grep GENERATED

  2. 접속 방법mysql클라이언트는 도커의 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`

모든 변경 후 쿼리에 다음과 같이 표시됩니다.

select host, user from mysql.user;
+-----------+---------------+
| host      | user          |
+-----------+---------------+
| %         | root          |
| localhost | healthchecker |
| localhost | mysql.session |
| localhost | mysql.sys     |
+-----------+---------------+

도커 컨테이너에서는 설정을 거의 할 필요가 없습니다.다음의 순서에 따라 주세요.

  1. docker-compose.yml에서 mysql 구성 블록을 지정합니다.docker-compose.yml 파일의 services object 아래에 다음 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
    
  2. 도커 컨테이너를 재시작하고 다음 명령을 실행하여 mysql 컨테이너의 bash 쉘로 이동합니다.

    docker ps
    docker exec -it <mysql container name> /bin/bash 
    

    컨테이너 내에서 mysql 명령줄 유형에 연결하려면

    mysql -u root -p
    

    docker-compose.yml에 지정된 대로 MYSQL_ROOT_PASSWORD를 사용합니다.다음 명령을 실행하여 새 사용자를 만듭니다.

    create user 'user'@'%' identified by 'pass';
    grant all privileges on *.* to 'user'@'%' with grant option;
    flush privileges;
    

    퍼센트 기호(%)는 모든 IP를 의미합니다.도커 컨테이너를 재기동합니다.

  3. MySQL Workbench에서 연결 세부 정보를 제공합니다.docker-compose.yml 파일에 지정된 대로 MYSQL_PASSWORD를 사용합니다.

    여기에 이미지 설명 입력

이것으로 mysql 컨테이너에 접속할 수 있게 됩니다.

다음 컨텐츠가 있다고 가정해 보겠습니다.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"

localhost의 경우 호스트 127.0.0.1 및 33061 포트를 사용합니다.

2 도커 관련 조건:

  • 먼저 도커를 실행하여 mysql 포트를 호스트 포트에 매핑해야 합니다.

    docker run -p host:container
    

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

  • 둘째, VM(도커 머신, boot2docker 포함)에서 도커를 사용하는 경우 다음 IP를 사용해야 합니다.docker-machine ip <VMname>(호스트 맵포트 포함).

    http://$(docker-machine ip <VMname>):hostPort
    

「 」를 사용할 수 .localhostVirtual Box 수준에서 포트 전송을 수행해야 합니다.

VBoxManage controlvm "boot2docker-vm" natpf1 "tcp-port3306,tcp,,3306,,3306"
VBoxManage controlvm "boot2docker-vm" natpf1 "udp-port3306,udp,,3306,,$3306"

)controlvm 중일 VM은modifyvm되어 있는 VM」을치환해 주세요)(「VM」을 치환해 주세요).boot2docker-vm: " VM " 을 참조하십시오.docker-machine ls


2 mysql 관련 조건:

  • 에 나타나듯이 리모트액세스를 유효하게 할 필요가 있습니다.

    # 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
    
  • 도커 이미지에서 데이터베이스를 시작할 때 사용자를 작성해야 합니다.
    에 의해서 호출되는 예를 참조해 주세요.

    /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"
    

Mysql Workbench알고 그 말을 하지 port다음은 워크벤치에서 실행한 후 연결하기 위한 전체 명령어입니다.

순서 1 - 도커 컨테이너 실행:

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

위의 명령어 설명:

  • Mysql v8.0.20

    mysql:8.0.20
    
  • 분리된 컨테이너로 실행(ctrl + c는 컨테이너를 정지하지 않음)

    -d
    
  • 컨테이너명

    --name mysql8
    
  • 노출 " " "(external port on host machine : internal port of the container)

    -p 3306:3306
    
  • 환경 변수 설정

     -e MYSQL_ROOT_PASSWORD=root
     -e MYSQL_DATABASE=testdb
     -e MYSQL_USER=admin
     -e MYSQL_PASSWORD=root
    

볼 수 .-f means follow:

docker logs mysql8 -f

스텝 2 - Mysql Workbench에서 연결:

host: localhost
port: 3306
user: admin
password: root
  1. 합니다.docker-compose.yml자세한 것은 이쪽.예:

    version: '3.1'
    
    services:
      mysql:
        image: mysql:5.6
        container_name: test-mysql
        ports:
          - 3306:3306
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: password
    
  2. 를 실행합니다.docker-compose up 이 운행됩니다.docker ps컨테이너를 확인합니다.
  3. :docker exec -it test-mysql bash
  4. 하려면 mysql을 합니다.mysql -u root -p.
  5. 새 사용자 생성
  6. 마지막으로 MySQL Workbench 구성

여기에 이미지 설명 입력

@Krishna의 답변은 성공했지만 약간의 변경으로 다음과 같이 사용자가 추가되었습니다.

create user 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pass';

참조: 인증 플러그인 'caching_sha2_password'를 로드할 수 없습니다.

에, 할 수 .포트 번호를 전달할 때 IP 주소를 지정할 수 있습니다. ,, 까, 까 같은 입니다.-p 127.0.0.1:3307:3306한 것이 -p 3307:3306https://www.youtube.com/watch?v=20om-9Gwuc0#t=7m에서 본 적이 없습니다.

start 명령어 예시

docker run -d -e MYSQL_ROOT_PASSWORD=test --name mysql8 -p 127.0.0.1:3307:3306 mysql:8

후 하여 "MYSQL Workbench"에 할 수 있었습니다.127.0.0.1 '''로3307를 클릭합니다.

Hostname: 127.0.0.1(Localhost) 필드 값을 설정하여 이 솔루션을 얻었으며, 기본적으로는 포트에는 사용자의 credentials가 설정되어 있습니다.

mysql docker hub에 나와 있는 지시에 따라 docker-compose.yml을 작성했습니다.

version: '3.1'

services:
  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: example
    ports:
      - 3306:3306

mysql mysql password ((((((((((((((((((((((((((((((((((((((((((((( 경우는 패스워드)example)

Workbench의 MySQL 를 사용했습니다.0.0.0.0 " " " 를 사용하여3306.

.Settings -> Network -> Port Forwarding 설정 syslog:

Host/Guest IP로로 합니다.0.0.0.0
Host/Guest Port로로 합니다.3306

언급URL : https://stackoverflow.com/questions/33827342/how-to-connect-mysql-workbench-to-running-mysql-inside-docker

반응형