phpMyAdmin Docker 설치 가이드: MySQL/MariaDB 웹 관리의 표준




개요

phpMyAdmin은 세계에서 가장 널리 사용되는 MySQL/MariaDB 웹 기반 관리 도구입니다. 1998년부터 개발되어 25년 이상의 역사를 가지고 있으며, PHP로 작성된 무료 오픈소스 소프트웨어입니다. 웹 브라우저만 있으면 데이터베이스를 직관적으로 관리할 수 있습니다.

항목내용
GitHubhttps://github.com/phpmyadmin/phpmyadmin
공식 사이트https://www.phpmyadmin.net
Docker Hubhttps://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 관리 도구 비교

기능phpMyAdminAdminerCloudBeaverDbGate
지원 DBMySQL/MariaDB만다중 DB다중 DB다중 DB
설치 크기중간매우 작음중간
기능 수매우 풍부기본풍부풍부
UI 디자인클래식심플모던모던
학습 곡선낮음매우 낮음중간중간
다중 서버설정 필요기본 지원기본 지원기본 지원
역사25년+15년+5년+5년+
커뮤니티매우 큼성장 중성장 중

선택 가이드

상황추천
MySQL/MariaDB만 사용phpMyAdmin
가벼운 도구 필요Adminer
다중 DB 타입 관리CloudBeaver, DbGate
호스팅 환경phpMyAdmin (대부분 기본 제공)

시스템 요구 사항

최소 사양

항목최소권장
CPU1 Core1 Core
RAM128MB256MB
저장소100MB200MB
PHP7.2+8.0+

지원 데이터베이스

데이터베이스지원 버전
MySQL5.5 ~ 8.x
MariaDB5.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_HOSTMySQL 서버 주소
PMA_HOSTS다중 서버 (쉼표 구분)
PMA_PORTMySQL 포트3306
PMA_PORTS다중 포트
PMA_VERBOSE서버 표시 이름
PMA_VERBOSES다중 서버 이름
PMA_ARBITRARY임의 서버 연결 허용0

인증

변수설명기본값
PMA_USER자동 로그인 사용자
PMA_PASSWORD자동 로그인 비밀번호
PMA_ABSOLUTE_URI리버스 프록시 URL

SSL

변수설명기본값
PMA_SSLSSL 사용0
PMA_SSL_VERIFYSSL 인증서 검증0
PMA_SSL_CACA 인증서

고급 설정

변수설명기본값
UPLOAD_LIMIT업로드 제한2048K
MEMORY_LIMITPHP 메모리 제한512M
MAX_EXECUTION_TIME최대 실행 시간600

초기 설정

1) 접속

URL: http://localhost:8080

2) 로그인

  • 서버: 환경 변수로 설정됨 (또는 PMA_ARBITRARY=1일 때 직접 입력)
  • 사용자명: root 또는 생성한 사용자
  • 비밀번호: 설정한 비밀번호

3) 기본 설정 확인

로그인 후:

  1. 설정 탭에서 언어를 한국어로 변경
  2. 외관 설정에서 테마 선택
  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';

주요 작업 가이드

데이터베이스 생성

  1. 좌측 새로 만들기 클릭
  2. 데이터베이스 이름 입력
  3. 문자셋 선택 (utf8mb4_unicode_ci 권장)
  4. 만들기 클릭

테이블 생성

  1. 데이터베이스 선택
  2. 구조 탭 → 새 테이블 만들기
  3. 테이블 이름, 컬럼 수 입력
  4. 각 컬럼 정의 (이름, 타입, 길이, NULL, 기본값 등)
  5. 저장 클릭

데이터 가져오기

  1. 데이터베이스 선택
  2. 가져오기
  3. 파일 선택 (SQL, CSV 등)
  4. 옵션 설정
  5. 실행 클릭

데이터 내보내기

  1. 데이터베이스 또는 테이블 선택
  2. 내보내기
  3. 형식 선택 (SQL 권장)
  4. 옵션 설정:
    • 구조만 / 데이터만 / 둘 다
    • 압축 여부
  5. 실행 클릭

사용자 생성

  1. 사용자 계정
  2. 사용자 계정 추가
  3. 사용자명, 호스트, 비밀번호 입력
  4. 권한 설정
  5. 실행 클릭

보안 강화

접근 제한

# 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_USERPMA_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 사용)

  1. 데이터베이스 선택
  2. 내보내기빠른 또는 사용자 정의
  3. SQL 형식 선택
  4. 실행 → 파일 다운로드

자동 백업 스크립트

#!/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년 역사가장 안정적이고 검증된 도구
직관적 UISQL 없이도 DB 관리 가능
풍부한 기능모든 MySQL 작업 지원
다국어70개 이상 언어 지원
호스팅 표준대부분의 호스팅에서 기본 제공

이런 분께 추천

MySQL/MariaDB만 사용하는 분
SQL에 익숙하지 않은 분
빠르고 쉬운 DB 관리가 필요한 분
웹 호스팅 환경 사용자



댓글 남기기