개요
phpMyAdmin은 세계에서 가장 널리 사용되는 MySQL/MariaDB 웹 기반 관리 도구입니다. 1998년부터 개발되어 25년 이상의 역사를 가지고 있으며, PHP로 작성된 무료 오픈소스 소프트웨어입니다. 웹 브라우저만 있으면 데이터베이스를 직관적으로 관리할 수 있습니다.
| 항목 | 내용 |
|---|---|
| GitHub | https://github.com/phpmyadmin/phpmyadmin |
| 공식 사이트 | https://www.phpmyadmin.net |
| Docker Hub | https://hub.docker.com/_/phpmyadmin |
| 라이선스 | GPL-2.0 |
| 개발 언어 | PHP |
| 최신 버전 | 5.x |
phpMyAdmin이란?
phpMyAdmin은 1998년 Tobias Ratschiller가 시작한 프로젝트로, MySQL 데이터베이스를 웹 인터페이스로 관리할 수 있게 해주는 도구입니다. 현재 70개 이상의 언어로 번역되어 있으며, 대부분의 웹 호스팅 서비스에서 기본 제공됩니다.
핵심 특징
"웹 브라우저로 MySQL을 완벽하게 관리"
- 25년 이상의 안정적인 개발 역사
- 직관적인 웹 인터페이스
- SQL 쿼리 없이도 DB 관리 가능
- 모든 MySQL/MariaDB 작업 지원
주요 기능
데이터베이스 관리
| 기능 | 설명 |
|---|---|
| 데이터베이스 생성/삭제 | 새 DB 생성, 삭제, 복사 |
| 테이블 관리 | 테이블 생성, 수정, 삭제, 복사 |
| 컬럼 편집 | 필드 추가, 수정, 삭제, 타입 변경 |
| 인덱스 관리 | 인덱스 생성, 삭제, 최적화 |
| 관계 설정 | 외래키, 관계 시각화 |
데이터 조작
| 기능 | 설명 |
|---|---|
| 데이터 찾아보기 | 테이블 데이터 조회 |
| 인라인 편집 | 직접 데이터 수정 |
| 검색 | 조건 검색, 정규식 지원 |
| 정렬/필터 | 컬럼별 정렬, 필터링 |
| 대량 작업 | 다중 행 삭제, 수정 |
SQL 도구
| 기능 | 설명 |
|---|---|
| SQL 쿼리 실행 | 직접 SQL 입력 및 실행 |
| 쿼리 히스토리 | 이전 쿼리 기록 |
| 구문 강조 | SQL 문법 하이라이팅 |
| 북마크 | 자주 사용하는 쿼리 저장 |
| 프로파일링 | 쿼리 성능 분석 |
가져오기/내보내기
| 기능 | 설명 |
|---|---|
| 내보내기 형식 | SQL, CSV, XML, JSON, Excel 등 |
| 가져오기 형식 | SQL, CSV, XML 등 |
| 압축 지원 | gzip, bzip2, zip |
| 대용량 처리 | 청크 단위 처리 |
사용자 관리
| 기능 | 설명 |
|---|---|
| 사용자 생성 | 새 DB 사용자 생성 |
| 권한 관리 | 세밀한 권한 설정 |
| 호스트 제한 | 접속 호스트 제한 |
| 비밀번호 변경 | 사용자 비밀번호 관리 |
DB 관리 도구 비교
| 기능 | phpMyAdmin | Adminer | CloudBeaver | DbGate |
|---|---|---|---|---|
| 지원 DB | MySQL/MariaDB만 | 다중 DB | 다중 DB | 다중 DB |
| 설치 크기 | 중간 | 매우 작음 | 큼 | 중간 |
| 기능 수 | 매우 풍부 | 기본 | 풍부 | 풍부 |
| UI 디자인 | 클래식 | 심플 | 모던 | 모던 |
| 학습 곡선 | 낮음 | 매우 낮음 | 중간 | 중간 |
| 다중 서버 | 설정 필요 | 기본 지원 | 기본 지원 | 기본 지원 |
| 역사 | 25년+ | 15년+ | 5년+ | 5년+ |
| 커뮤니티 | 매우 큼 | 큼 | 성장 중 | 성장 중 |
선택 가이드
| 상황 | 추천 |
|---|---|
| MySQL/MariaDB만 사용 | phpMyAdmin |
| 가벼운 도구 필요 | Adminer |
| 다중 DB 타입 관리 | CloudBeaver, DbGate |
| 호스팅 환경 | phpMyAdmin (대부분 기본 제공) |
시스템 요구 사항
최소 사양
| 항목 | 최소 | 권장 |
|---|---|---|
| CPU | 1 Core | 1 Core |
| RAM | 128MB | 256MB |
| 저장소 | 100MB | 200MB |
| PHP | 7.2+ | 8.0+ |
지원 데이터베이스
| 데이터베이스 | 지원 버전 |
|---|---|
| MySQL | 5.5 ~ 8.x |
| MariaDB | 5.5 ~ 11.x |
| Percona | 지원 |
Docker 설치
방법 1: 단독 실행 (외부 DB 연결)
기존 MySQL/MariaDB 서버에 연결합니다.
# docker-compose.yml
services:
phpmyadmin:
image: phpmyadmin:latest
container_name: phpmyadmin
restart: unless-stopped
ports:
- "8080:80"
environment:
- PMA_HOST=your-mysql-server
- PMA_PORT=3306
- PMA_USER=root
- PMA_PASSWORD=your_password
방법 2: MariaDB와 함께 (권장)
새로운 MariaDB와 함께 설치합니다.
# docker-compose.yml
services:
db:
image: mariadb:11
container_name: mariadb
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_DATABASE=myapp
- MYSQL_USER=myuser
- MYSQL_PASSWORD=mypassword
volumes:
- mariadb_data:/var/lib/mysql
networks:
- db_network
phpmyadmin:
image: phpmyadmin:latest
container_name: phpmyadmin
restart: unless-stopped
ports:
- "8080:80"
environment:
- PMA_HOST=db
- PMA_PORT=3306
depends_on:
- db
networks:
- db_network
volumes:
mariadb_data:
networks:
db_network:
방법 3: 임의 서버 연결 모드
로그인 시 서버를 직접 지정할 수 있습니다.
# docker-compose.yml
services:
phpmyadmin:
image: phpmyadmin:latest
container_name: phpmyadmin
restart: unless-stopped
ports:
- "8080:80"
environment:
- PMA_ARBITRARY=1
접속 시 서버 주소, 사용자명, 비밀번호를 입력합니다.
방법 4: 다중 서버 연결
여러 MySQL 서버를 등록합니다.
# docker-compose.yml
services:
phpmyadmin:
image: phpmyadmin:latest
container_name: phpmyadmin
restart: unless-stopped
ports:
- "8080:80"
environment:
- PMA_HOSTS=db1,db2,db3
- PMA_VERBOSES=Production,Staging,Development
- PMA_PORTS=3306,3306,3306
방법 5: SSL 연결
# docker-compose.yml
services:
phpmyadmin:
image: phpmyadmin:latest
container_name: phpmyadmin
restart: unless-stopped
ports:
- "8080:80"
environment:
- PMA_HOST=secure-mysql-server
- PMA_SSL=1
- PMA_SSL_VERIFY=1
방법 6: Traefik 연동
# docker-compose.yml
services:
phpmyadmin:
image: phpmyadmin:latest
container_name: phpmyadmin
restart: unless-stopped
environment:
- PMA_HOST=db
- PMA_ABSOLUTE_URI=https://pma.example.com
networks:
- db_network
- traefik_network
labels:
- "traefik.enable=true"
- "traefik.http.routers.phpmyadmin.rule=Host(`pma.example.com`)"
- "traefik.http.routers.phpmyadmin.entrypoints=websecure"
- "traefik.http.routers.phpmyadmin.tls.certresolver=letsencrypt"
- "traefik.http.services.phpmyadmin.loadbalancer.server.port=80"
networks:
db_network:
traefik_network:
external: true
환경 변수
서버 연결
| 변수 | 설명 | 기본값 |
|---|---|---|
PMA_HOST | MySQL 서버 주소 | – |
PMA_HOSTS | 다중 서버 (쉼표 구분) | – |
PMA_PORT | MySQL 포트 | 3306 |
PMA_PORTS | 다중 포트 | – |
PMA_VERBOSE | 서버 표시 이름 | – |
PMA_VERBOSES | 다중 서버 이름 | – |
PMA_ARBITRARY | 임의 서버 연결 허용 | 0 |
인증
| 변수 | 설명 | 기본값 |
|---|---|---|
PMA_USER | 자동 로그인 사용자 | – |
PMA_PASSWORD | 자동 로그인 비밀번호 | – |
PMA_ABSOLUTE_URI | 리버스 프록시 URL | – |
SSL
| 변수 | 설명 | 기본값 |
|---|---|---|
PMA_SSL | SSL 사용 | 0 |
PMA_SSL_VERIFY | SSL 인증서 검증 | 0 |
PMA_SSL_CA | CA 인증서 | – |
고급 설정
| 변수 | 설명 | 기본값 |
|---|---|---|
UPLOAD_LIMIT | 업로드 제한 | 2048K |
MEMORY_LIMIT | PHP 메모리 제한 | 512M |
MAX_EXECUTION_TIME | 최대 실행 시간 | 600 |
초기 설정
1) 접속
URL: http://localhost:8080
2) 로그인
- 서버: 환경 변수로 설정됨 (또는 PMA_ARBITRARY=1일 때 직접 입력)
- 사용자명: root 또는 생성한 사용자
- 비밀번호: 설정한 비밀번호
3) 기본 설정 확인
로그인 후:
- 설정 탭에서 언어를 한국어로 변경
- 외관 설정에서 테마 선택
- 내보내기 기본 형식 확인
커스텀 설정
config.user.inc.php 마운트
고급 설정을 위해 설정 파일을 마운트합니다.
services:
phpmyadmin:
image: phpmyadmin:latest
volumes:
- ./config.user.inc.php:/etc/phpmyadmin/config.user.inc.php
config.user.inc.php 예시:
// config.user.inc.php
// 세션 유지 시간 (초)
$cfg['LoginCookieValidity'] = 3600;
// 메모리 제한
$cfg['MemoryLimit'] = '512M';
// 최대 행 표시
$cfg['MaxRows'] = 100;
// 쿼리 히스토리 저장
$cfg['QueryHistoryDB'] = true;
$cfg['QueryHistoryMax'] = 100;
// 테마
$cfg['ThemeDefault'] = 'pmahomme';
// 기본 언어
$cfg['DefaultLang'] = 'ko';
// 서버 설정
$cfg['Servers'][1]['hide_db'] = 'information_schema|performance_schema|mysql|sys';
주요 작업 가이드
데이터베이스 생성
- 좌측 새로 만들기 클릭
- 데이터베이스 이름 입력
- 문자셋 선택 (utf8mb4_unicode_ci 권장)
- 만들기 클릭
테이블 생성
- 데이터베이스 선택
- 구조 탭 → 새 테이블 만들기
- 테이블 이름, 컬럼 수 입력
- 각 컬럼 정의 (이름, 타입, 길이, NULL, 기본값 등)
- 저장 클릭
데이터 가져오기
- 데이터베이스 선택
- 가져오기 탭
- 파일 선택 (SQL, CSV 등)
- 옵션 설정
- 실행 클릭
데이터 내보내기
- 데이터베이스 또는 테이블 선택
- 내보내기 탭
- 형식 선택 (SQL 권장)
- 옵션 설정:
- 구조만 / 데이터만 / 둘 다
- 압축 여부
- 실행 클릭
사용자 생성
- 사용자 계정 탭
- 사용자 계정 추가
- 사용자명, 호스트, 비밀번호 입력
- 권한 설정
- 실행 클릭
보안 강화
접근 제한
# docker-compose.yml
services:
phpmyadmin:
image: phpmyadmin:latest
environment:
- PMA_HOST=db
# 로컬에서만 접근
ports:
- "127.0.0.1:8080:80"
Basic Auth 추가 (Traefik)
labels:
- "traefik.http.middlewares.phpmyadmin-auth.basicauth.users=admin:$$apr1$$xyz..."
- "traefik.http.routers.phpmyadmin.middlewares=phpmyadmin-auth"
IP 화이트리스트 (Traefik)
labels:
- "traefik.http.middlewares.phpmyadmin-whitelist.ipwhitelist.sourcerange=192.168.1.0/24,10.0.0.0/8"
- "traefik.http.routers.phpmyadmin.middlewares=phpmyadmin-whitelist"
자동 로그인 비활성화
PMA_USER와 PMA_PASSWORD 환경 변수를 설정하지 마세요.
트러블슈팅
일반적인 문제
“Access denied” 오류:
# MySQL 사용자 권한 확인
docker exec -it mariadb mysql -uroot -p
SHOW GRANTS FOR 'username'@'%';
# 외부 접속 허용
CREATE USER 'user'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%';
FLUSH PRIVILEGES;
업로드 크기 제한:
environment:
- UPLOAD_LIMIT=100M
세션 만료 빠름:
// config.user.inc.php
$cfg['LoginCookieValidity'] = 86400; // 24시간
한글 깨짐:
-- 데이터베이스 문자셋 확인
SHOW CREATE DATABASE mydb;
-- 문자셋 변경
ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
로그 확인
# 컨테이너 로그
docker logs phpmyadmin -f
# Apache 에러 로그
docker exec phpmyadmin cat /var/log/apache2/error.log
업데이트
cd ~/phpmyadmin
# 최신 이미지
docker compose pull
# 재시작
docker compose up -d
# 이전 이미지 정리
docker image prune -f
백업
데이터베이스 백업 (phpMyAdmin 사용)
- 데이터베이스 선택
- 내보내기 → 빠른 또는 사용자 정의
- SQL 형식 선택
- 실행 → 파일 다운로드
자동 백업 스크립트
#!/bin/bash
# mysql-backup.sh
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
docker exec mariadb mysqldump -uroot -p'password' --all-databases | gzip > $BACKUP_DIR/all-databases-$DATE.sql.gz
# 7일 이상 된 백업 삭제
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
사용 사례
1. 개발 환경
- 로컬 개발 DB 관리
- 테스트 데이터 생성/삭제
- 스키마 프로토타이핑
2. 웹 호스팅
- 대부분의 공유 호스팅에서 기본 제공
- 워드프레스, 라라벨 등 DB 관리
- 백업/복원
3. 소규모 프로덕션
- 데이터 조회 및 수정
- 사용자/권한 관리
- 쿼리 실행 및 디버깅
마무리
phpMyAdmin은 25년 이상의 역사를 가진 MySQL/MariaDB 관리의 표준 도구입니다. 직관적인 웹 인터페이스로 SQL을 모르는 사용자도 쉽게 데이터베이스를 관리할 수 있습니다. Docker로 몇 분 만에 설치하고 바로 사용할 수 있습니다.
핵심 장점
| 장점 | 설명 |
|---|---|
| 25년 역사 | 가장 안정적이고 검증된 도구 |
| 직관적 UI | SQL 없이도 DB 관리 가능 |
| 풍부한 기능 | 모든 MySQL 작업 지원 |
| 다국어 | 70개 이상 언어 지원 |
| 호스팅 표준 | 대부분의 호스팅에서 기본 제공 |
이런 분께 추천
MySQL/MariaDB만 사용하는 분
SQL에 익숙하지 않은 분
빠르고 쉬운 DB 관리가 필요한 분
웹 호스팅 환경 사용자