새소식

docker

[Docker] MySQL 컨테이너 띄우고 원격 접속 허용하기

  • -

MySQL 컨테이너 띄우고 원격 접속 허용하기

docker-compose 파일 작성

docker-compose 를 통해 MySQL 컨테이너를 띄우기 위한 파일을 작성한다.

version: '3.8'
volumes:
        [volume-name]:
                external: true
                name: [volume-name]
services:
        [service-name]:
                container_name: [container-name]
                image: mysql
                ports:
                        - "3306:3306"
                volumes:
                        - [volume-name]:/var/lib/mysql
                env_file: .env
                environment:
                        - TZ=Asia/Seoul
                restart: always
                command:
                        - --character-set-server=utf8mb4
                        - --collation-server=utf8mb4_unicode_ci
                        - --character-set-client-handshake=FALSE

환경변수 파일 작성

환경변수를 분리한 .env 파일을 작성한다.

MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=[root-password 입력]

MYSQL_USER=[생성할 유저명 입력]
MYSQL_PASSWORD=[생성할 유저 패스워드 입력]

컨테이너 띄우고 MySQL 접속

docker compose 명령어를 통해 MySQL 컨테이너를 띄운다.

$ docker compose up -d

아래 명령을 통해 컨테이너에 접속한다.

$ docker exec -it [container-name] bin/bash

아래 명령을 통해 MySQL에 접속한다.

$ mysql -u root -p

Database 생성

mysql> show databases;
+------------------------+
| Database               |
+------------------------+
| information_schema     |
| mysql                  |
| performance_schema     |
| sys                    |
+------------------------+
5 rows in set (0.01 sec)

mysql> create database testdb;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+------------------------+
| Database               |
+------------------------+
| testdb                 |
| information_schema     |
| mysql                  |
| performance_schema     |
| sys                    |
+------------------------+
5 rows in set (0.01 sec)

유저 생성 및 데이터베이스 권한 부여

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

mysql> select host, user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+
5 rows in set (0.01 sec)

mysql> create user 'test_user'@'%' identified by 'password1111';
Query OK, 0 rows affected (0.02 sec)

mysql> select host, user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | test_user        |
| %         | root             |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+
6 rows in set (0.00 sec)

mysql>  flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> show grants for 'test_user'@'%';
+----------------------------------------------+
| Grants for test_user@%                       |
+----------------------------------------------+
| GRANT USAGE ON *.* TO `test_user`@`%`        |
+----------------------------------------------+
1 row in set (0.01 sec)

mysql> grant all privileges on testdb.* to test_user@'%';
Query OK, 0 rows affected (0.03 sec)

mysql> show grants for 'test_user'@'%';
+------------------------------------------------------------------------------+
| Grants for test_user@%                                                       |
+------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `test_user`@`%`                                        |
| GRANT ALL PRIVILEGES ON `testdb`.* TO `test_user`@`%`                        |
+------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

이제 “test_user”로 “testdb” 데이터베이스에 원격 접속이 가능하다.

참고
DBeaver에 데이터베이스 연결을 생성할 때, Dirver properties에 다음과 같이 옵션을 선택해야 한다.
autoReconnect=true
useSSL=false
allowPublicKeyRetrieval=true

'docker' 카테고리의 다른 글

[Docker] Docker Volume  (0) 2022.12.10
[Docker] Docker-Compose  (0) 2022.12.09
[Docker] MySQL 컨테이너에 초기 데이터 삽입  (0) 2022.12.09
[Docker] MySQL 컨테이너 띄우고 원격 접속 허용하기

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.