phpMyAdmin 설치방법 (DB 관리용 웹 프로그램을 리눅스 우분투 서버에 설치하기)

16

phpMyAdmin(피에치피 마이 어드민)은 웹페이지에서 곧바로 자신의 리눅스 서버에있는 DB(데이터베이스) 내용을 보고, 편집, DB생성등 DB에 관한 모든걸 할 수 있는 웹애플리케이션입니다. 서버에 데이터베이스 프로그램과 PHP, 웹서버가 모두 설치되어있으면 사용할 수 있습니다.

저는 지난 연재작에서 준비한 우분투 LEMP 스택 서버에 phpMyAdmin을 설치할 예정인데요.  MariaDB뿐만아니라 mySQL이 설치된 서버에도 사용가능합니다. 이 글을 읽어보면 설치할 위치까지 자기 자신이 정하므로 꼭 LEMP스택에 설치할 필요는 없다는걸 아시게 될겁니다. 심지어 이미 워드프레스가 설치된 서버에도 phpMyAdmin을 설치는 가능한데요. 자신의 DB 프로그램의 root 사용자 비밀번호를 미리 알고 계셔야겠죠.

DB관리 툴, phpMyAdmin 의 장단점

DB관리 툴(SQL Tool )

보통은 CLI에서 SQL문을 입력해 DB현황을 보고 명령어를 입력하고 하긴하는데요.  DB 제어를 클릭으로 콘트롤 할 수 있는 GUI 일 뿐만아니라 SQL문을 직접 넣어서 실행시킬 수도 있습니다. 클릭해서 어떤 테이블의 데이터 검색등을 했을때도 그 동작에 해당하는 SQL문을 보여주기도 하니 SQL문을 공부하는 저같은 DB 초보에게도 여러가지 도움이 되죠.

 이런 프로그램은 이 것만 있는 것은 아니고 개인 컴퓨터에 설치할 수 있는 여러 클라이언트 프로그램도 여럿 있는데 윈도우용은 잘 모르겠네요.

phpMyAdmin 장점

phpMyAdmin의 장점은 웹페이지로 접속가능하니 어디서나 사용가능하다는 것과 공짜(무료)라는 것입니다. 그리고 여러 언어 중 한글도 지원합니다.

그리고 초기사용이 편리합니다.  서버입장에서는 로컬접속이기때문에 DB 외부접속 설정이나 포트 방화벽설정같은 추가 설정을 해줄필요없이 곧바로 웹에서 로그인해 사용하면 됩니다.

phpMyAdmin 단점 

아무래도 웹상에서 사용하는 툴이라 한계가 있고 보안상 불안함을 완전히 지울 수는 없습니다. (누군가 웹페이지로 로그인하면 내 DB를 주무를 수 있음) . 또 UI가 지저분한 느낌을 떨칠 수 없습니다. 

웹서버에 설치할 phpMyAdmin 최신판 설치 준비

phpMyAdmin 또한 apt로 설치를 할 수 있긴한데요. 우분투 16.04의 apt 에 등록된 레파지토리 리스트가 최신판이 아니기도 하고, 이 레파지토리를 최신판으로 업데이트 하는 방법을 찾지 못했네요.(누가좀 알려줘…)

그래서 wget을 통해 직접 다운로드 받는 방식으로 최신판을 설치하겠습니다. 여러분들에게도 이방법이 훨씬 직관적일거고 설치위치도 내맘대로 지정하기 쉽습니다. 사실 wget을 안쓰더라도 일단 내컴퓨터에 다운 받은다음 업로드 해도 방법은 같아요.

 

일단 phpMyAdmin 공식웹페이지에서 다운로드 주소를 찾아봅시다. 다운로드 페이지는 아래링크를 방문해보면 버전별로 나옵니다.

 

phpMyAdmin 공식 다운로드 페이지

해당 웹페이지에는 최신판과 옛버전, 개발버전(Development Versions)의 호환성(PHP5.5 to 7.2 와 MySQL 5.5 이상 등등)정보가 각각 나옵니다.   저는 최신판인 phpMyAdmin 4.8.2버전을 설치할건데요.  all-languages가 이름에 들어가있는데 이걸 설치하면 한글,영어등 바꿔가면서 사용가능합니다.

 

위 그림에 보면 4.8.2 버전의 압축파일이 여러종류예요. 저는 .zip 파일의 URL(링크주소)을 복사하겠습니다.

phpMyAdmin 4.8.2 버전 zip파일 링크 복사하기

zip 파일 링크를 마우스 우클릭해보면 나오는 메뉴에서 링크를 복사할 수 있습니다. 저는 아이맥 컴퓨터(macOS)라서 ‘링크 복사하기’라고 나오네요. 그렇게 복사한 링크는 한 쪽에 잘 적어둡시다. 아래처럼 말이죠. 그러면  최신버전 다운로드 받을 준비가 되었네요.

  • https://files.phpmyadmin.net/phpMyAdmin/4.8.2/phpMyAdmin-4.8.2-all-languages.zip

phpMyAdmin 최신판 다운로드 및 설치하기

CLI 프로그램 중 하나인 wget을 이용해서 서버에 위 zip파일을 다운로드할건데요.  wget 명령어를 아래형태로 하면 자신이 지정하는 서버 폴더에 다운로드 받습니다.

wget -P 로컬(서버)폴더경로 다운로드할파일의_웹주소

아래와 같은 형태로 명령어를 입력하면 자신이 지정하는 곳에 이름바꿔서 다른이름으로 저장하게 됩니다. 전 이걸 쓰겠습니다. 

wget -O 폴더경로/저장할파일명.zip 다운로드할파일의_웹주소

wget -O /var/www/phpmyadmin4.8.zip https://files.phpmyadmin.net/phpMyAdmin/4.8.2/phpMyAdmin-4.8.2-all-languages.zip
phpmyadmin4.8.zip 이라는 이름으로 다운로드한 모습
원하는위치에 phpmyadmin4.8.zip 파일이 받아졌다!

 

이제 이 압축파일을 풀어줘야겠습니다. 이 압축파일을 풀기위해 제가 사용하는 CLI 프로그램은 unzip 인데요. 우분투 서버에 이미 설치되어있을 겁니다. 없다면 따로 설치해야합니다.

 unzip 명령어로 특정 폴더에 압축해제하는 -d 옵션 사용해서 풀겠습니다. 아래와 같은 형태입니다.

unzip 폴더경로/압축파일이름.zip -d 압축풀_목적지폴더경로

unzip /var/www/phpmyadmin4.8.zip -d /var/www

unzip 실행화면. 압축 해제 중...

 

압축 해제 확인하려면  ls 명령어를 사용해봅니다.

ls /var/www

ls 명령어 실행결과 phpMyAdmin-4.8.2-all-languages 폴더가 생겼다

 

위처럼 원했던 위치에 phpMyAdmin-4.8.2-all-languages 폴더가 생겼습니다. 저 폴더안에는 phpMyAdmin이 동작하기 위한 수많은 폴더와 파일들이 있습니다. 이렇게 압축을 풀면 사실상 설치가 완료된 것입니다. 그래서 웹브라우저에서 저 폴더에 접속해보면 로그인할 수 있게 되는건데요. 저처럼 웹루트 폴더(도큐멘트 루트, /var/www/html) 보다 상위에 풀었다면 접속할 수가 없습니다. 보안상 웹루트 폴더안에 저 폴더를 풀어두기 좋지않아서 이렇게 더 상위에 뺀 것입니다. 이제 웹루트폴더에 심벌릭 링크파일(바로가기 아이콘같은 겁니다)를 만들 차례입니다. 그러면 그걸통해 접속할 수 있습니다.

참고: 더이상 필요치 않은 zip파일은 삭제는 rm /var/www/phpmyadmin4.8.zip 명령어로 삭제하면 됩니다.

phpMyAdmin 으로 심볼릭 링크 파일 만들기(로그인 페이지)

폴더에서 폴더로의 심볼릭링크 파일(바로가기 아이콘)은 보통 폴더이름을 그대로 가져가지만, 널리 알려진 방법으로 또는 교과서적으로는 phpMyAdmin을 설치할 때 이 파일의 이름은 전통적으로 phpMyAdmin 입니다.  그럼으로써 http:내도메인또는IP.com/phpMyAdmin 이런식으로 접속하면 로그인페이지를 보게되곤 하죠.

 

그러나 그렇게 뻔한 이름으로 로그인주소를 만들면 phpMyAdmin 로그인페이지가 노출되기 쉽습니다. 굳이 나쁜 해커가 아니더라도 알기 쉽겠죠.  그리 중요한 사항은 아닐지라도 마음의 안정을 얻기위해 저는 이 주소를 다른걸로 바꿔줍니다.

 

아래처럼 ln -s 명령어로 심볼릭 링크를 만들 수 있는데요. 두개의 폴더 경로중 앞에는 원본이고 뒤에는 목적지입니다. 목적지 마지막 서브폴더 이름을 현재 존재하지 않는 이름으로 하면 해당 이름이 심볼릭링크 파일의 이름이 됩니다.

ln -s 원본폴더_경로 존재하는폴더경로/존재하지않는폴더이름

저는 아래처럼 hellodb 라는 이름으로 만들어줬습니다만 나중에라도 쉽게 바꿀 수 있어요.

ln -s /var/www/phpMyAdmin-4.8.2-all-languages /var/www/html/hellodb

 

이렇게 하면 /html 폴더아래에는 hellodb 라는 폴더가 없으므로 hellodb라는 이름으로 링크파일을 만들고 이 링크파일은 /var/www/phpMyAdmin-4.8.2-all-languages를 가리키게 됩니다. 

만일 hellodb 라는 폴더가 이미 있었다면 원본과 같은 이름인 phpMyAdmin-4.8.2-all-languages 라는 이름의 심볼릭링크파일이 hellodb 폴더 안에 생성됩니다. 전 그것을 원치 않았던거죠.

그래서 http://내서버IP또는도메인.com/hellodb 처럼 입력하면 로그인페이지를 볼 수 있게될겁니다. 그러면 위의 명령어를 입력해볼까요.

ls -s  명령어 실행

 

/var/www/html 폴더의 내용을 커맨드라인과 SFTP 양쪽 모두에서 살펴봅시다.  CLI에서는 아래그림 처럼 hellodb -> 원본 형태로 가리키고 있어 이것이 링크된 파일임을 나타내고 있네요.

ls 명령어로 살펴본 링크파일
hellodb 라는 파일앞에 화살표 아이콘이 붙어있다
transmit 5에서 살펴본 링크파일

 

위 링크파일을 삭제해주면 웹브라우저에서는 접속할 방법이 사라집니다.  간단하죠? 그리고 접속주소를 바꾸고 싶다면 다른이름으로 심볼릭 링크를 생성해주거나 이름을 바꾸면된답니다.

웹페이지에서 phpMyAdmin으로 로그인하기

이제  http://내서버IP또는도메인.com/hellodb 처럼 웹브라우저에서 접속해보면 아래처럼 나올겁니다. 

phpMyAdmin 로그인 페이지
phpMyAdmin 로그인 페이지

 

이제 사용자명은 DB의 root 사용자, 암호는 자신의 DB를 설치할 때 만들었던  root 사용자의 비밀번호를 입력한뒤 실행 버튼을 클릭하면 접속됩니다. DB 콘트롤의 모든 권한을 가진 root 사용자로 접속한다니…끔찍하죠? 다른 사용자가 있다면 해당 DB사용자로 로그인하실 수도 있습니다만, 웹페이지상에서 phpMyAdmin으로 새로운 DB를 생성하고 테이블생성, 삭제등등을 하려면 결국 root에 준하는 강력한 권한을 가진 사용자로 로그인 할 수 밖에 없겠습니다. 

혹시라도 모를 보안이 우려된다면 서버 개발단계 혹은 궁금할때만 바로가기인 심볼릭 링크파일을 만들고 그 외에는 삭제해두길 권합니다. 그래도 phpMyAdmin은 오픈소스로 많은 사람들이 보안을 위해 수정을 거듭해오며 발전해온 웹프로그램입니다. 왠만한 취약점은 다 수정했겠죠? 보안패치와 버전 호환성을 체크해서 주기적으로 버전을 업그레이드 해주는게 좋겠습니다. 

 

아래는 phpMyAdmin을 성공적으로 로그인했을 때 나타나는 메인 페이지입니다. 

phpMyAdmin 로그인 후 메인 페이지
phpMyAdmin 메인 페이지

오른쪽에서는 웹서버(nginx) 버전, DB 버전 , phpMyAdmin 버전정보등이 나옵니다.  왼쪽에는 MariaDB를 설치했을 때 기본준비된 DB가 3개 보이는 군요. 여러분이 자신의 DB를 만들면 이곳에 나타납니다. 그리고 윗줄에 있는 메뉴를 통해서 테이블 생성,관리,삭제, 데이터 관리를 할 수 있게 됩니다.

메인페이지에서 사용언어도 마음대로 바꿀 수 있습니다. 한국어를 포함한 여러 언어가 있으니까요.

phpMyAdmin 설치초기 설정 에러메시지 해결하기 

위 상태로도 phpMyAdmin이 동작은 하지만 위 그림에서 보면 3가지 문제점이 보입니다. 아래쪽에 있는 경고와 에러 메시지가 있죠. 이렇게 설치 후 첫 접속했을 때 나타나는  에러메시지와 경고표시를 제거하려고 합니다. phpMyAdmin을 완전하게 사용하려면 몇가지 초기 설정을 해줘야하는 것이죠.

  1. 이제 설정 파일은 암호화 문자열(blowfish_secret)을 필요로 합니다.
    • 영문메시지: The configuration file now needs a secret passphrase (blowfish_secret).
  2. The $cfg[‘TempDir’] (./tmp/) is not accessible. phpMyAdmin is not able to cache templates and will be slow because of this.
  3. phpMyAdmin 설정 스토리지가 완전히 설정되지 않아, 일부 확장 기능들이 비활성화 된 상태입니다. 원인을 확인하려면 여기를 클릭하세요.
    대신 데이터베이스 작업 탭을 사용하여 설정할 수도 있습니다.

    • 영문: The phpMyAdmin configuration storage is not completely configured, some extended features have been deactivated. Find out why.
      Or alternately go to ‘Operations’ tab of any database to set it up there.

위 3개의 메시지를 없애봅시다.

1)설정 파일에 암호화 문자열(블로우피쉬 시크릿) 설정

블로우피시 시크렛 에러메시지

SFPT로 접속해서 phpMyAdmin을 설치한 폴더 /var/www/phpMyAdmin-4.8.2-all-languages/를 들여다보면 phpMyAdmin 설정파일의 샘플양식 파일인 config.sample.inc.php라는 파일이 있습니다. 이걸 복사해서 config.inc.php 파일로 이름을 바꾸면 그것이 설정파일로 쓰여지게 됩니다. 그 곳에 설정값을 넣어 해결할 수 있네요.

SFTP 프로그램 Transmit 5에서 확인한 설정 샘플 파일

 

위 샘플파일을 복사한뒤 config.inc.php 로 이름을 바꾸고 그것을 아래처럼 열어보시면 아래와 같은 blowfish_secret 설정 줄이 있는데요. 작은따옴표 사이에 암호문자 값이 들어 있어야하는데 비어있습니다.

$cfg[‘blowfish_secret’] = ”; /* YOU MUST FILL IN THIS FOR COOKIE AUTH!

phpMyAdmin의 블로우피시 시크릿의 값이 비어있다.

 

이 작은 따옴표 사이에 들어갈 암호 문자열은 길고 복잡한 랜덤 hash(해쉬) 문자열이면되는데요. 이 값을 랜덤으로 생성해주는 사이트가 여럿 있을겁니다. 저는 아래 링크를 접속해보았습니다

블로우피시 패스워드 해시 제너레이터

 

위처럼 Generate 를 클릭할 때마다 아래쪽에 랜덤 문자열이 생성되는데 이걸 복사해서 아래그림 처럼 작은 따옴표() 사이에 붙여넣으면 됩니다. 

블로피쉬 값이 입력됨

그리고 phpMyAdmin 로그아웃 후 재 접속해보면 해당 에러메시지가 사라졌을 겁니다.

2) /tmp/ is not accessible: 임시 디렉토리 tmp 폴더 만들기

The $cfg['TempDir'] (./tmp/) is not accessible. phpMyAdmin is not able to cache templates and will be slow because of this.
The $cfg[‘TempDir’] (./tmp/) is not accessible. phpMyAdmin is not able to cache templates and will be slow because of this.

 

이 메시지는  phpMyAdmin 폴더에 임시폴더인 tmp 폴더가 없거나 해당폴더를 편집할 수 없어서입니다. 해당폴더를 만든 뒤 웹서버(여기서는 nginx)의 리눅스 사용자인 www-data가 그 폴더에 접근 및 편집가능하게 하면 해결됩니다. CLI에서 아래명령어를 연속해서 입력해주세요.

$ mkdir /var/www/phpMyAdmin-4.8.2-all-languages/tmp
$ sudo chgrp www-data /var/www/phpMyAdmin-4.8.2-all-languages/tmp
$ sudo chmod 774 /var/www/phpMyAdmin-4.8.2-all-languages/tmp

위 명령어 3개는 순서대로,

  • phpMyAdmin을 설치한 /var/www/phpMyAdmin-4.8.2-all-languages/ 폴더 하위에 tmp 폴더를 생성합니다.
  • 해당 tmp 폴더의 사용자그룹을 www-data로 변경합니다.
  • 사용자그룹 www-data에 속한 사용자들(여기서는 www-data)이 tmp 폴더를 편집가능하도록 이 폴더의 권한을 그룹편집 권한을 부여합니다. (770, 774, 775등 중 택1)

phpMyAdmin 루트폴더에 tmp를 생성하고 그룹과 그룹권한을 지정하는 명령어를 입력했다.

 

제가 위와 같이 한 이유를 설명하자면 CLI로 접속한 사용자는 ubuntu 이고 sudo를 쓰지 않은 명령어 mkdir로 만든 tmp폴더의 소유자는 ubuntu, 사용자그룹은 ubuntu 가 됩니다. 그러나 nginx가 tmp폴더에대한 편집권한을 가져야하는데 nginx를 사용하는 리눅스 (기본)사용자명은 www-data이므로 이 폴더에대한 편집권한이 없습니다. (www-data사용자는www-data그룹에는 속해있으나 ubuntu 그룹에는 속하지 않음.)

곧바로 tmp 폴더를 누구나(Others) 편집가능한 766, 776, 777등의 권한으로 해도 되었겠으나 보안관계상 바람직하지 않으므로 tmp 폴더의 사용자그룹을 www-data그룹로 바꾸고 그룹 멤버가 편집가능한 권한인  770이나 774로 변경한 것입니다.

 

굳이 저와 똑같이 하지 않더라도 www-data 사용자가 tmp폴더에대한 편집권한 만 갖을 수 있도록 해주면 될뿐입니다. 이제 웹브라우저에서 phpMyAdmin 메인페이지를 새로고침하거나 로그아웃 후 재로그인해보면 에러메시지가 사라졌을 겁니다

3)일부 확장 기능들 활성화를 위한 phpMyAdmin 설정 스토리지 완전히 설정하기

경고 메시지 중간에 '원인을 확인하려면 여기를 클릭하세요'라고 써있다
phpMyAdmin 설정 스토리지가 완전히 설정되지 않아, 일부 확장 기능들이 비활성화 된 상태입니다. 원인을 확인하려면 여기를 클릭하세요.
대신 데이터베이스 작업 탭을 사용하여 설정할 수도 있습니다.

여러분의 phpMyAdmin 메인페이지에서 위 경고메시지를 보면 위 그림처럼 원인을 확인하려면 여기를 클릭하세요 라는 메시지가 있습니다. 그 ‘여기’를 클릭하면 아래그림처럼 나오게 됩니다.

안내문 중에 클릭가능한 create라는 글자가 있다.
create a database named phpmyadmin and setup the phpMyadmin configuration storage there.png

위 그림처럼 나오는 Create 라는 글자를 클릭하면 phpmyadmin 이라는 이름의 phpMyAdmin 설정용 DB가 만들어질겁니다. 아래처럼 모든 메시지가 OK와 enabled 로 되면 성공적으로 만들어진 것입니다.

phpmyadmin 이라는 이름의 db가 만들어졌다

이제 다시 phpMyAdmin 메인페이지로 가면 경고메시지가 없어져 있을 겁니다. phpmyadmin 데이터베이스 내용을 살펴보면 설정에 관련된 여러 테이블이 준비된 것을 알 수 있습니다.

다음단계

이렇게 내 서버의 데이터를 GUI로 쉽게 들여다 보고 제어할 수 있는 SQL Tool을 갖게 되었네요. 이제 DB나 SQL문, phpMyAdmin 사용 초보라면 사용방법을 공부하면서 참고하면 되겠습니다.  서버의 데이터를 직접 다루는 일이므로 신중을 기하도록 해야합니다.

16 댓글

  1. 키야.. EC2는 유튜브보고 해봤는데 혹시 유튜브도 하시나요?
    라이트세일로 홈페이지 시작합니다. 덕분에 세팅 끝났네요.
    스냅샷 만들면 자주 오지 못하겠지만 종종 들리겠습니다.
    너무 감사드립니다. 정말루요 ^^

  2. 안녕 하세요!
    좋은 강좌 감사드립니다
    다 이해 하겠는데
    Blowfish Password 제너레이터 사이트에 가서
    generator 돌리기 전에 패스워드 넣는 칸에
    뭔 패스워드를 입력 하여야 하는지요
    제가 그냥 임으로 12345678 뭐 이런식으로 아무렇게 써주는건지요?
    아니면 mysql 암호를 써주는 건지요?
    아니면 generator 바로 위에칸에 순화버튼 눌러서 그걸루만 생성 하는건지요?
    좋은 강좌 다시 한번 감사드립니다~

  3. 앗!
    아래 항목을 채워 댓글을 달아도
    댓글이 달리는 듯 하다 소멸 되네요?
    그렇다면 이 댓글은 관리자님의 승인형 댓글인가요?
    감사합니다
    수고하세요!

  4. 아~
    댓글 형식이 이상합니다
    제글이 어떤글은 댓글이 달리고
    어떤 댓글은 제가 단 댓글이 제가 볼 수가 없습니다
    그래서 중복? 작성하게 됩니다
    뭐 제가 스팸어도 아니고..
    뭐가 문제인가요?

    • 안녕하세요. 앞에 댓글은 스팸함에 빠진게 맞습니다. 스팸판단은 플러그인이 자동으로 되긴하지만 항상 정확한 것은 아녜요. 보통 링크가 많으면 스팸으로 빠지는데 이경우는 잘 모르겠네요. 어쨋든 불편을 드려 죄송할 따름입니다.

댓글은 익명이나 SNS, wordpress.com 로그인 지원). 마크다운 문법 사용가능(Shift+~ 키로 특정문구 혹은 위아래 ~~~으로감싸서 여러줄을 코드블락으로 작성)