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