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