DEV/Docker-Debian

3. Docker MySQL 환경 설정 및 DB, 사용자 계정 생성 (MySQL 8.0)

서버엔지니어 2023. 3. 2.
728x90

1) MySQL 환경 설정 방법

MySQL 컨테이너 내의 data 디렉토리와 my.cnf 설정 파일을 호스트 서버로 복사해오면 데이터 및 설정 관리가 수월해 집니다.
컨테이너가 구동중인 상태에서 아래와 같이 파일을 복사 합니다.

mysql 컨테이너의 /var/lib/mysql 디렉토리를 /home/93it/mysql/data 디렉토리로 복사

mkdir /home/93it/mysql
docker cp mysql:/var/lib/mysql/ /home/93it/mysql/
mv /home/93it/mysql/mysql /home/93it/mysql/data

mysql 컨테이너의 my.cnf 파일을 /home/93it/mysql/conf/my.cnf 로 복사
mkdir /home/93it/mysql/conf
docker cp mysql:/etc/my.cnf /home/93it/mysql/conf/my.cnf

호스트 서버에서 변경사항을 적용할 수 있도록 docker-compose.yml 파일을 수정합니다.
vi docker-compose.yml

=================================================================

    mysql:
        image: mysql:8.0.31
        container_name: mysql
        restart: unless-stopped
        tty: true
        ports:
            - "3306:3306"
        environment:
            MYSQL_HOST: localhost
            MYSQL_ROOT_PASSWORD: 12345678 # 초기 mysql root 비밀번호
            SERVICE_TAGS: dev
            SERVICE_NAME: mysql
            TZ: Asia/Seoul
        volumes:
            - /home/93it/mysql/data/:/var/lib/mysql/
            - /home/93it/mysql/conf/my.cnf:/etc/my.cnf

=================================================================

 

변경된 yml를 MySQL 컨테이너를 적용합니다.

docker compose stop mysql
docker rm -v mysql
docker compose up -d mysql

 

my.cnf 변경사항이 잘 적용되는지 확인해 봅니다.

vi /home/93it/mysql/conf/my.cnf
=================================================================

[mysqld]
max_connections = 10000

bind-address = 0.0.0.0

=================================================================

 

MySQL 에 접근하여 변경된 값을 확인합니다.

docker exec -it mysql /bin/bash

=================================================================

bash-4.4# mysql -u root -p
Enter password: (docker-compose.yml 에서 설정한 root 비밀번호 입력)
=================================================================

mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 10000 |
+-----------------+-------+
1 row in set (0.00 sec)

 

 

2) DB, 사용자 계정 생성

MySQL 에 접근하여 DB, 사용자 계정 생성 및 권한을 할당 합니다.
(암호화 방식은 기본값인 caching_sha2_password 로 정함)

docker exec -it mysql /bin/bash

bash-4.4# mysql -u root -p
Enter password: (docker-compose.yml 에서 설정한 root 비밀번호 입력)
=================================================================

mysql> create database 93itdb;
mysql> create user '93it'@'localhost' identified with caching_sha2_password by '12345678';
mysql> grant all privileges on 93itdb.* to '93it'@'localhost';
mysql> grant grant option on 93itdb.* to '93it'@'localhost';
mysql> flush privileges;
=================================================================

컨테이너 밖에서 접근을 하면 (호스트 서버 또는 다른 컨테이너) 외부 IP 에서 접근한 것으로 간주하기 때문에
접근 호스트명만 바꿔서 동일한 계정으로 추가 생성 해줍니다.

 

=================================================================

mysql> create user '93it'@'%' identified with caching_sha2_password by '12345678';
mysql> grant all privileges on 93itdb.* to '93it'@'%';
mysql> grant grant option on 93itdb.* to '93it'@'%';
mysql> flush privileges;

=================================================================


3) MySQL root 패스워드 변경

추후 MySQL root 패스워드를 변경하고자 할 경우 mysql 로그인 후 아래와 같이 쿼리를 실행하면 됩니다.

=================================================================

mysql> use mysql;
mysql> alter user 'root'@'localhost' identified by '새로운비밀번호';
mysql> alter user 'root'@'%' identified by '새로운비밀번호';
mysql> alter user '93it'@'localhost' identified by '새로운비밀번호';
mysql> alter user '93it'@'%' identified by '새로운비밀번호';
mysql> flush privileges;
=================================================================

--> 이렇게 'root'@'localhost' 비밀번호를 변경했을때 꼭 잊지말고 /root/docker-compose.yml 에서 root 비밀번호 설정부분 변경합니다.


4) data dump 방법

DB 를 운영하면서 백업은 필수 진행해야 합니다.
호스트 서버의 data 디렉토리를 압축해도 되지만, mysqldump 명령으로 백업하고자 할때는
아래와 같이 실행하여 간단히 백업을 할 수 있습니다.

docker exec mysql /usr/bin/mysqldump -u root -p12345678 93itdb > 93itdb.sql

 

 

댓글