Docker Compose를 사용하여 MySQL을 설치하고 실행하는 방법을 간단히 설명하겠습니다. 아래는 MySQL 컨테이너를 설정하는 기본적인 docker-compose.yml 파일 예제와 설정 방법입니다.
1. docker-compose.yml 파일 생성
프로젝트 디렉토리에 docker-compose.yml 파일을 생성하고 아래 내용을 추가하세요:
version: '3.8'
services:
mysql:
image: mysql:latest
container_name: mysql_container
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: mydatabase
MYSQL_USER: user
MYSQL_PASSWORD: userpassword
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
restart: unless-stopped
volumes:
mysql_data:
설명
- version: Docker Compose 파일의 버전을 지정 (3.8은 최신 버전 중 하나).
- services: 실행할 컨테이너 정의.
- mysql: MySQL 서비스 이름.
- image: 사용할 도커 이미지 (mysql:latest는 최신 MySQL 이미지).
- container_name: 컨테이너 이름 설정.
- environment: MySQL 환경 변수 설정.
- MYSQL_ROOT_PASSWORD: 루트 사용자 비밀번호.
- MYSQL_DATABASE: 초기 데이터베이스 이름.
- MYSQL_USER, MYSQL_PASSWORD: 일반 사용자 계정과 비밀번호.
- ports: 호스트와 컨테이너의 포트 매핑 (3306은 MySQL 기본 포트).
- volumes: 데이터 영속성을 위해 볼륨 설정. mysql_data는 데이터를 호스트에 저장.
- restart: 컨테이너가 종료될 때 재시작 정책 (unless-stopped는 명시적 종료 시에만 멈춤).
2. Docker Compose 실행
- 터미널에서 docker-compose.yml 파일이 있는 디렉토리로 이동:
bash
cd /path/to/your/project
- Docker Compose로 MySQL 컨테이너 실행:
bash
docker-compose up -d
- -d: 백그라운드에서 실행.
3. MySQL 접속 확인
- MySQL 클라이언트(예: MySQL Workbench)나 터미널로 접속:
bash
docker exec -it mysql_container mysql -u root -p
- 비밀번호로 rootpassword 입력.
- 또는 로컬 MySQL 클라이언트로 접속:
bash
mysql -h 127.0.0.1 -u user -p
- 비밀번호로 userpassword 입력.
4. 추가 설정 (선택)
- 커스텀 설정: MySQL 설정을 커스터마이징하려면 my.cnf 파일을 추가하고 볼륨으로 마운트:
yaml
volumes: - ./my.cnf:/etc/mysql/my.cnf - mysql_data:/var/lib/mysql
- 네트워크: 여러 서비스와 연결하려면 네트워크를 추가:
yaml
networks: my_network: driver: bridge
5. 컨테이너 관리
- 컨테이너 중지:
bash
docker-compose stop
- 컨테이너 삭제 (데이터는 볼륨에 유지됨):
bash
docker-compose down
- 데이터까지 삭제하려면:
bash
docker-compose down -v
참고
- Docker와 Docker Compose가 설치되어 있어야 합니다.
- 비밀번호는 안전한 값으로 변경하세요.
- 공식 MySQL Docker 이미지 문서: hub.docker.com/_/mysql
궁금한 점이 있으면 추가로 질문해주세요!
MySQL에서 데이터베이스(DB)를 생성하고, 해당 DB에 접근할 수 있는 유저를 생성한 후, 권한을 부여하는 기본적인 쿼리는 다음과 같습니다.
여기서 부턴 chatGPT
✅ MySQL DB 및 사용자 생성 쿼리
-- 1. 데이터베이스 생성
CREATE DATABASE my_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 2. 사용자 생성 (비밀번호는 'mypassword'로 설정)
CREATE USER 'my_user'@'localhost' IDENTIFIED BY 'mypassword';
-- 3. 해당 사용자에게 데이터베이스에 대한 모든 권한 부여
GRANT ALL PRIVILEGES ON my_database.* TO 'my_user'@'localhost';
-- 4. 권한 적용
FLUSH PRIVILEGES;
⚙️ 옵션 설명
- my_database: 생성할 데이터베이스 이름
- my_user: 생성할 사용자 이름
- 'localhost': 해당 유저가 접속 가능한 호스트. 원격에서 접속하려면 % 또는 특정 IP로 변경.
- 'mypassword': 해당 유저의 비밀번호
- utf8mb4: 이모지 등도 지원하는 UTF-8의 상위 호환 문자셋
🌐 원격 접속 허용하려면?
CREATE USER 'my_user'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON my_database.* TO 'my_user'@'%';
FLUSH PRIVILEGES;
%는 모든 IP에서 접속을 허용합니다. 보안상 필요한 IP만 지정하는 것이 좋습니다.
필요한 경우 root 권한으로 로그인해서 실행해야 할 수도 있습니다:
내가 사용할 테이블 생성 쿼리.
-- 데이터베이스 생성 (선택 사항, 이미 존재한다면 생략)
CREATE DATABASE IF NOT EXISTS mydatabase;
USE mydatabase;
-- tests 테이블: 테스트 정보 저장
CREATE TABLE tests (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL UNIQUE COMMENT '예: empathy-level-test',
title VARCHAR(255) NOT NULL COMMENT '예: 나의 공감 수준 테스트',
description TEXT COMMENT '예: 재미있는 공감 수준 테스트로 당신의 성향을 알아보세요!',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_name (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- questions 테이블: 테스트 질문 저장
CREATE TABLE questions (
id INT AUTO_INCREMENT PRIMARY KEY,
test_id INT NOT NULL,
question_text TEXT NOT NULL,
`order` INT NOT NULL COMMENT '질문 순서',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (test_id) REFERENCES tests(id) ON DELETE CASCADE,
INDEX idx_test_id (`test_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- result_types 테이블: 테스트 결과 유형 저장
CREATE TABLE result_types (
id INT AUTO_INCREMENT PRIMARY KEY,
test_id INT NOT NULL,
type_name VARCHAR(255) NOT NULL COMMENT '예: HIGH_EMPATHY',
title VARCHAR(255) NOT NULL,
emoji VARCHAR(255),
description TEXT,
color VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (test_id) REFERENCES tests(id) ON DELETE CASCADE,
INDEX idx_test_id (`test_id`),
INDEX idx_type_name (type_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- answers 테이블: 질문에 대한 답변 저장
CREATE TABLE answers (
id INT AUTO_INCREMENT PRIMARY KEY,
question_id INT NOT NULL,
answer_text TEXT NOT NULL,
result_type_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (question_id) REFERENCES questions(id) ON DELETE CASCADE,
FOREIGN KEY (result_type_id) REFERENCES result_types(id) ON DELETE CASCADE,
INDEX idx_question_id (question_id),
INDEX idx_result_type_id (result_type_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;