728x90
반응형
루트 접속 없이 DB와 계정까지 자동 생성하는 방법
🐌 기존 방식: 루트 계정으로 수동 설정
Docker로 MySQL 컨테이너를 생성한 뒤,
다음과 같이 루트 계정으로 직접 접속해서 수동으로 설정했습니다:
# MySQL 컨테이너 실행
docker run --name my-mysql \
-e MYSQL_ROOT_PASSWORD=root1234 \
-p 3306:3306 \
-d mysql:8.4
컨테이너가 실행되면 루트 계정으로 접속합니다:
docker exec -it my-mysql mysql -u root -p Enter password: root1234
접속 후에는 직접 SQL 명령어를 입력해야 했습니다:
-- 1. example_db 라는 이름의 데이터베이스 생성
CREATE DATABASE example_db;
-- 2. example_user 계정 생성, 비밀번호는 example1234
-- @'%'는 어디서든 접속 허용(IP 제한 없음)을 의미
CREATE USER 'example_user'@'%' IDENTIFIED BY 'example1234';
-- 3. 권한 부여: example_user에게 example_db 전체 권한 부여
-- (읽기, 쓰기, 삭제 등 모든 작업 가능)
GRANT ALL PRIVILEGES ON example_db.* TO 'example_user'@'%';
❌ 단점
- 루트 계정으로 접속해야 하므로 보안상 위험
- 명령어를 매번 기억하거나 복사해야 함
- 반복 작업 시 비효율적이고 실수 가능성 높음
🚀 새 방식: 명령어 한 줄로 자동 설정
Docker는 환경변수 설정만으로 DB와 사용자 계정을 자동 생성할 수 있습니다.
아래와 같이 단 한 줄로 모든 초기 설정을 마칠 수 있습니다:
docker run --name my-mysql \
-e MYSQL_ROOT_PASSWORD=root1234 \
-e MYSQL_DATABASE=example_db \
-e MYSQL_USER=example_user \
-e MYSQL_PASSWORD=example1234 \
-p 3306:3306 \
-d mysql:8.4
✅ 명령어 설명
| 항목 | 값 | 설명 |
| MYSQL_ROOT_PASSWORD | root1234 | 루트 비밀번호 설정 |
| MYSQL_DATABASE | example_db | 자동 생성할 DB 이름 |
| MYSQL_USER | example_user | 새로 만들 사용자 계정 |
| MYSQL_PASSWORD | example1234 | 해당 계정의 비밀번호 |
위 명령을 실행하면 다음이 자동으로 이루어집니다:
- example_db 데이터베이스 생성
- example_user 사용자 생성
- example_user에게 example_db에 대한 모든 권한 부여
🔄 기존 방식 vs 자동 설정 방식 비교
| 항목 | 기존 방식 (수동) | 새 방식 (자동) |
| 루트 접속 | 필요 | 불필요 ✅ |
| DB 생성 | SQL 명령 입력 | 환경변수로 자동 |
| 사용자 생성 | SQL 명령 입력 | 환경변수로 자동 |
| 권한 부여 | 수동 입력 | 자동 처리 |
| 보안 측면 | 루트 사용 위험 | 일반 계정으로 안전 ✅ |
| 실수 가능성 | 있음 | 거의 없음 ✅ |
| 반복 작업 | 비효율적 | 재사용 가능 ✅ |
MySQL 초기 설정은 꼭 루트 계정으로 들어가야만 가능한 작업이 아니었습니다.
Docker의 환경변수 옵션을 잘 활용하면,
보안은 높이고 실수는 줄이며 반복 작업까지 간편하게 해결할 수 있습니다.
728x90
반응형
'내맘대로 개발 일기 > DevOps' 카테고리의 다른 글
| [AWS] MySQL Workbench로 Lightsail DB에 접속하기 (2) | 2025.08.07 |
|---|---|
| [AWS] Lightsail에서 MySQL DB 인스턴스 생성하기 (3) | 2025.08.05 |
| [AWS] 무료 플랜에서 유료 플랜으로 업그레이드하는 방법 (2) | 2025.07.31 |
| [AWS] AWS Billing Budget 설정하기 (1) | 2025.07.30 |
| [인프라 구축] Let’s Encrypt, SSL/TLS 인증서 발급하기 (0) | 2024.06.16 |