MySQL 관리 · 4 min read · Jan 29, 2026
하나의 phpMyAdmin 설치로 여러 MySQL 서버 관리하기 (SSL 암호화 사용) - 페이지 2
3 phpMyAdmin 구성
local.example.com:
phpMyAdmin을 구성하기에 앞서, local.example.com에서 remote.example.com의 MySQL 서버에 SSL 연결을 통해 실제로 연결할 수 있는지 먼저 확인해 봅시다:
mysql --ssl-ca=/etc/mysql/newcerts/ca-cert.pem --ssl-cert=/etc/mysql/newcerts/client-cert.pem --ssl-key=/etc/mysql/newcerts/client-key.pem -h remote.example.com -u root -p비밀번호를 입력하라는 메시지가 표시되며, 모든 것이 잘 진행되면 접근이 허용됩니다:
root@local:/etc/mysql/newcerts# mysql –ssl-ca=/etc/mysql/newcerts/ca-cert.pem –ssl-cert=/etc/mysql/newcerts/client-cert.pem –ssl-key=/etc/mysql/newcerts/client-key.pem -h remote.example.com -u root -p
비밀번호 입력:
MySQL 모니터에 오신 것을 환영합니다. 명령은 ; 또는 \g로 끝납니다.
당신의 MySQL 연결 ID는 101입니다.
서버 버전: 5.5.24-8-log (Debian)
Copyright (c) 2000, 2011, Oracle 및/또는 그 계열사. 모든 권리 보유.Oracle은 Oracle Corporation 및/또는 그 계열사의 등록 상표입니다. 다른 이름은 해당 소유자의 상표일 수 있습니다.
'help;' 또는 '\h'를 입력하여 도움을 받으세요. 현재 입력 문을 지우려면 '\c'를 입력하세요.mysql>종료하려면
quit;를 입력하세요.
이제 phpMyAdmin을 구성하는 부분으로 넘어갑니다 - 이미 phpMyAdmin을 사용하여 로컬 MySQL 서버에 연결할 수 있다고 가정하고, 이제 SSL을 사용하여 remote.example.com에도 연결할 수 있도록 구성하고자 합니다 (phpMyAdmin 로그인 화면에서 연결할 서버를 선택할 수 있는 드롭다운 메뉴가 표시됩니다).
phpMyAdmin이 SSL을 사용하여 원격 MySQL 서버와 통신하기 위해서는 소스를 약간 수정해야 합니다 - mysqli.dbi.lib.php를 열어보세요 (Debian 및 Ubuntu에서는 apt를 통해 phpMyAdmin을 설치한 경우 /usr/share/phpmyadmin/libraries/dbi/mysqli.dbi.lib.php에 있습니다):
vi /usr/share/phpmyadmin/libraries/dbi/mysqli.dbi.lib.php다음 섹션을 찾으세요…
| | [...] /* 선택적으로 SSL 활성화 */ if ($GLOBALS['cfg']['Server']['ssl'] && defined('MYSQLI_CLIENT_SSL')) { $client_flags |= MYSQLI_CLIENT_SSL; } [...] | |
… 그리고 다음과 같이 수정하세요:
| | [...] /* 선택적으로 SSL 활성화 */ if ($GLOBALS['cfg']['Server']['ssl'] && defined('MYSQLI_CLIENT_SSL')) { mysqli_ssl_set($link, $GLOBALS['cfg']['Server']['key'], $GLOBALS['cfg']['Server']['cert'], $GLOBALS['cfg']['Server']['ca'], $GLOBALS['cfg']['Server']['capath'], $GLOBALS['cfg']['Server']['cipher']); $client_flags |= MYSQLI_CLIENT_SSL; } [...] | |
다음으로 config.inc.php를 엽니다 - Debian/Ubuntu에서 apt를 통해 phpMyAdmin을 설치한 경우 /etc/phpmyadmin/config.inc.php에 있습니다:
vi /etc/phpmyadmin/config.inc.php 다음 섹션을 찾으세요:
| | [...] /* dbconfig-common에 따라 구성 (활성화된 경우) */ if (!empty($dbname)) { /* 인증 유형 */ $cfg['Servers'][$i]['auth_type'] = 'cookie'; /* 서버 매개변수 */ if (empty($dbserver)) $dbserver = 'localhost'; $cfg['Servers'][$i]['host'] = $dbserver; if (!empty($dbport) || $dbserver != 'localhost') { $cfg['Servers'][$i]['connect_type'] = 'tcp'; $cfg['Servers'][$i]['port'] = $dbport; } //$cfg['Servers'][$i]['compress'] = false; /* 서버에 mysqli가 있는 경우 선택 */ $cfg['Servers'][$i]['extension'] = 'mysqli'; /* 선택적: 고급 기능을 위한 사용자 */ $cfg['Servers'][$i]['controluser'] = $dbuser; $cfg['Servers'][$i]['controlpass'] = $dbpass; /* 선택적: 고급 phpMyAdmin 기능 */ $cfg['Servers'][$i]['pmadb'] = $dbname; $cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark'; $cfg['Servers'][$i]['relation'] = 'pma_relation'; $cfg['Servers'][$i]['table_info'] = 'pma_table_info'; $cfg['Servers'][$i]['table_coords'] = 'pma_table_coords'; $cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages'; $cfg['Servers'][$i]['column_info'] = 'pma_column_info'; $cfg['Servers'][$i]['history'] = 'pma_history'; $cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords'; $cfg['Servers'][$i]['tracking'] = 'pma_tracking'; $cfg['Servers'][$i]['userconfig'] = 'pma_userconfig'; /* 다음을 주석 해제하여 비밀번호 없는 계정으로 로그인 활성화, * 관련 보안 위험을 유의하세요. */ // $cfg['Servers'][$i]['AllowNoPassword'] = TRUE; /* 나머지 구성을 위해 다음 서버로 진행 */ $i++; } [...] | |
그 아래에 localhost (= local.example.com)를 위한 다음 섹션을 추가하세요:
| | [...] /* localhost.example.com */ /* 인증 유형 */ $cfg['Servers'][$i]['auth_type'] = 'cookie'; /* 서버 매개변수 */ $cfg['Servers'][$i]['host'] = 'localhost'; $cfg['Servers'][$i]['connect_type'] = 'tcp'; $cfg['Servers'][$i]['compress'] = false; /* 서버에 mysqli가 있는 경우 선택 */ $cfg['Servers'][$i]['extension'] = 'mysqli'; $cfg['Servers'][$i]['hide_db'] = '(information_schema|performance_schema|test)'; $i++; [...] | |
($cfg[‘Servers’][$i][‘hide_db’] 줄에서 phpMyAdmin에 표시하고 싶지 않은 모든 데이터베이스를 지정할 수 있습니다 - 예: information_schema, performance_schema, test.)
그리고 remote.example.com에 대해서는 다음 섹션을 추가하세요:
| | [...] /* remote.example.com */ /* 인증 유형 */ $cfg['Servers'][$i]['auth_type'] = 'cookie'; /* 서버 매개변수 */ $cfg['Servers'][$i]['host'] = 'remote.example.com'; $cfg['Servers'][$i]['connect_type'] = 'tcp'; $cfg['Servers'][$i]['compress'] = false; $cfg['Servers'][$i]['ssl'] = true; $cfg['Servers'][$i]['key'] = '/etc/mysql/newcerts/client-key.pem'; $cfg['Servers'][$i]['cert'] = '/etc/mysql/newcerts/client-cert.pem'; $cfg['Servers'][$i]['ca'] = '/etc/mysql/newcerts/ca-cert.pem'; $cfg['Servers'][$i]['capath'] = NULL; $cfg['Servers'][$i]['cipher'] = NULL; /* 서버에 mysqli가 있는 경우 선택 */ $cfg['Servers'][$i]['extension'] = 'mysqli'; $cfg['Servers'][$i]['hide_db'] = '(information_schema|performance_schema|test)'; $i++; [...] | |
$cfg[‘Servers’][$i][‘extension’]에서 mysqli를 사용하고, $cfg[‘Servers’][$i][‘ssl’]를 true로 설정하고, SSL 파일을 위와 같이 지정해야 합니다. 제 전체 서버 섹션은 다음과 같습니다:
| | [...] /* dbconfig-common에 따라 구성 (활성화된 경우) */ if (!empty($dbname)) { /* 인증 유형 */ $cfg['Servers'][$i]['auth_type'] = 'cookie'; /* 서버 매개변수 */ if (empty($dbserver)) $dbserver = 'localhost'; $cfg['Servers'][$i]['host'] = $dbserver; if (!empty($dbport) || $dbserver != 'localhost') { $cfg['Servers'][$i]['connect_type'] = 'tcp'; $cfg['Servers'][$i]['port'] = $dbport; } //$cfg['Servers'][$i]['compress'] = false; /* 서버에 mysqli가 있는 경우 선택 */ $cfg['Servers'][$i]['extension'] = 'mysqli'; /* 선택적: 고급 기능을 위한 사용자 */ $cfg['Servers'][$i]['controluser'] = $dbuser; $cfg['Servers'][$i]['controlpass'] = $dbpass; /* 선택적: 고급 phpMyAdmin 기능 */ $cfg['Servers'][$i]['pmadb'] = $dbname; $cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark'; $cfg['Servers'][$i]['relation'] = 'pma_relation'; $cfg['Servers'][$i]['table_info'] = 'pma_table_info'; $cfg['Servers'][$i]['table_coords'] = 'pma_table_coords'; $cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages'; $cfg['Servers'][$i]['column_info'] = 'pma_column_info'; $cfg['Servers'][$i]['history'] = 'pma_history'; $cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords'; $cfg['Servers'][$i]['tracking'] = 'pma_tracking'; $cfg['Servers'][$i]['userconfig'] = 'pma_userconfig'; /* 다음을 주석 해제하여 비밀번호 없는 계정으로 로그인 활성화, * 관련 보안 위험을 유의하세요. */ // $cfg['Servers'][$i]['AllowNoPassword'] = TRUE; /* 나머지 구성을 위해 다음 서버로 진행 */ $i++; } /* localhost.example.com */ /* 인증 유형 */ $cfg['Servers'][$i]['auth_type'] = 'cookie'; /* 서버 매개변수 */ $cfg['Servers'][$i]['host'] = 'localhost'; $cfg['Servers'][$i]['connect_type'] = 'tcp'; $cfg['Servers'][$i]['compress'] = false; /* 서버에 mysqli가 있는 경우 선택 */ $cfg['Servers'][$i]['extension'] = 'mysqli'; $cfg['Servers'][$i]['hide_db'] = '(information_schema|performance_schema|test)'; $i++; /* remote.example.com */ /* 인증 유형 */ $cfg['Servers'][$i]['auth_type'] = 'cookie'; /* 서버 매개변수 */ $cfg['Servers'][$i]['host'] = 'remote.example.com'; $cfg['Servers'][$i]['connect_type'] = 'tcp'; $cfg['Servers'][$i]['compress'] = false; $cfg['Servers'][$i]['ssl'] = true; $cfg['Servers'][$i]['key'] = '/etc/mysql/newcerts/client-key.pem'; $cfg['Servers'][$i]['cert'] = '/etc/mysql/newcerts/client-cert.pem'; $cfg['Servers'][$i]['ca'] = '/etc/mysql/newcerts/ca-cert.pem'; $cfg['Servers'][$i]['capath'] = NULL; $cfg['Servers'][$i]['cipher'] = NULL; /* 서버에 mysqli가 있는 경우 선택 */ $cfg['Servers'][$i]['extension'] = 'mysqli'; $cfg['Servers'][$i]['hide_db'] = '(information_schema|performance_schema|test)'; $i++; /* 서버 구성 종료 */ [...] | |
그게 전부입니다 - phpMyAdmin 로그인 화면에서 이제 연결할 MySQL 서버를 선택할 수 있는 드롭다운 메뉴가 있어야 하며 (localhost 또는 remote.example.com), 원격 MySQL 서버 (예: remote.example.com)를 선택하면 phpMyAdmin이 SSL 연결을 통해 연결됩니다.
4 링크
phpMyAdmin: http://www.phpmyadmin.net/
MySQL: http://www.mysql.com/
저자 소개
Falko Timme는 Timme Hosting (초고속 nginx 웹 호스팅)의 소유자입니다. 그는 HowtoForge의 주 유지 관리자 (2005년부터)이며 ISPConfig의 핵심 개발자 중 한 명입니다 (2000년부터). 그는 또한 O’Reilly의 “Linux System Administration” 책에 기여했습니다.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.