기타
[Docker] MySQL Docker로 띄우기 및 접속
DevBee
2022. 1. 12. 10:01
로컬에서 도커 이미지로 MySQL을 실행하고 user 생성 및 데이터베이스 생성 후 권한을 부여하는 방법을 살펴보겠습니다.
일단, 먼저 도커 설치는 마무리가 된 것으로 생각하겠습니다.
1. docker-compose.yml 파일 생성
아래와 같이 docker-compose.yml 파일을 작성합니다.
version: "3"
services:
db:
image: mysql:latest
container_name: mysql-server
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root123
command: # 명령어 실행
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
volumes:
- ./data/:/var/lib/mysql # -v 옵션 (다렉토리 마운트 설정)
2. docker-compose 명령 실행
아래 명령을 통해 도커 이미지를 컨테이너로 띄웁니다.
$ docker-compose up -d
3. docker 컨테이너 내 bash 접속
아래 명령을 통해 현재 실행된 컨테이너의 bash에 접속합니다.
$ docker exec -it CONTAINER_NAME bash
4. mysql 접속
아래 명령어를 통해 root 사용자로 mysql에 접속합니다. 비밀번호는 docker-compose.yml 파일에 정의한 MYSQL_ROOT_PASSWORD를 입력하면 됩니다.
root@343gkj2g3:/# mysql -u root -p
5. database 확인 및 생성
아래 명령을 통해 데이터베이스를 확인하고 새로운 데이터베이스를 추가합니다.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
mysql> create database test_db;
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test_db |
+--------------------+
5 rows in set (0.00 sec)
6. user 확인 및 생성 후 데이터베이스에 대한 권한 부여
아래 명령들을 통해 새로운 testuser를 생성하고 위에서 생성한 test_db에 대한 모든 권한을 부여합니다.
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.00 sec)
mysql> create user 'testuser'@'%' identified by 'testuser123';
Query OK, 0 rows affected (0.02 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for testuser@'%';
+----------------------------------------+
| Grants for testuser@% |
+----------------------------------------+
| GRANT USAGE ON *.* TO `testuser`@`%` |
+----------------------------------------+
1 row in set (0.00 sec)
mysql> grant all privileges on test_db.* to testuser@'%';
Query OK, 0 rows affected (0.01 sec)
mysql> show grants for testuser@'%';
+--------------------------------------------------------+
| Grants for testuser@% |
+--------------------------------------------------------+
| GRANT USAGE ON *.* TO `testuser`@`%` |
| GRANT ALL PRIVILEGES ON `test_db`.* TO `testuser`@`%` |
+--------------------------------------------------------+
2 rows in set (0.01 sec)
이렇게 한 뒤, DataGrip이나 다른 DB Client 툴을 통해 새로 생성한 user와 database로 접속이 가능합니다. 이후 테이블 생성 등과 관련해서는 DataGrip을 사용할 예정입니다.