“LAMP : PHP 7.2 설치과정 정리”에 이어...
MySQL 대신 MaridDB를 설치하는 과정을 정리하겠습니다.
PHP-MySQL 연동 모듈은 PHP 설치하면서 함께 설치했으므로, 이 글에서는 따로 언급하지 않습니다.
1. 운영체제 구성요소(패키지)를 최신 상태로 업그레이드
터미널 창을 열어서
sudo apt-get update
sudo apt-get upgrade
등의 명령어를 입력하여 패키지를 최신 것으로 유지합니다.
(경우에 따라서는 sudo apt-get dist-upgrade 도 동원.)
2. MariaDB 설치
▲ 터미널 창에서
sudo apt-get install mariadb-server
라고 입력하고 y를 누릅니다. 글 작성일 기준으로 10.1 버전과 의존성 패키지들이 깔리네요.
▲ sudo mysql_secure_installation
이라고 입력합니다.
선택이 필요한 곳들을 붉은 밑줄로 표시해봤습니다.
(잘 모르겠으면 비밀번호만 설정하고 나머지는 엔터 치셔도 됩니다. 엔터는 Y로 처리되거든요. ^^)
그리고 선택을 잘못한 것 같으면 위 명령어를 다시 실행해서 세팅하면 되니까, 쫄지 맙시다.
Enter current password for root (enter or none) => MariaDB의 root 계정은 쉘인증이 기본적으로 설정되어 있습니다. 그래서 우분투 root 계정으로 실행됐다면 MariaDB root 계정은 비밀번호 입력 없이도 통과됩니다. 그러니까 그냥 엔터키를 치면 자동으로 넘어가집니다.
Set root password? [Y/n] => 그래도 y를 입력해서 DB 루트 계정의 패스워드를 설정해두는 게 좋겠죠. 설정해놓고 잊지 않도록 신경씁시다.
New password: => 패스워드를 결정해서 입력합니다.
Re-enter new password: => 패스워드를 한 번 더 입력해서 확인한다.
Remove anonymous users? [Y/n] => y를 입력합니다. 익명 사용자는 좋을 게 없으니까.
Disallow root login remotely? [Y/n] => n을 입력합니다. 저는 원격 접속 시에도 제어하고 싶으니까요.
Remove test database and access to it? [Y/n] => y를 입력합니다. 테스트DB는 따로 만들어서 테스트해보죠.
Reload privilege tables now? [Y/n] => y를 입력합니다. 권한 테이블을 reload하면 지금까지 입력했던 게 적용되겠죠?
▲ 터미널 창에서 sudo gedit /etc/mysql/mariadb.conf.d/50-server.cnf 처럼 입력하여
50-server.cnf 파일을 루트 권한으로 연 다음, Ctrl+F로 Character sets를 찾습니다.
( [mysqld] 항목 아래에 Character sets 가 있는 겁니다.)
character-set-server = utf8mb4 가 있는지 확인하고(없으면 추가할 것),
collation-server = utf8mb4_general_ci 를 주석처리하고,
collation-server = utf8mb4_unicode_ci 라고 추가한 다음 저장+빠져나옵니다.
터미널 창에서 sudo service mysql restart 라고 입력하여 적용해줍니다.
(참고로 [mysql] 항목에 대한 캐릭터셋 설정값은 /etc/mysql/mariadb.conf.d/50-mysql-clients.cnf 파일에 있었습니다. [client] 항목에 대한 캐릭터셋 설정값은 /etc/mysql/mariadb.conf.d/50-client.cnf 파일에 있었고요.)
utf8mb4_general_ci(기본값)을 사용할경우 정렬 속도가 utf8mb4_unicode_ci 에 비해 약간 빠르다고 하는데(거의 차이 없음), 한글/일본어 같은 비 라틴계 언어들의 정렬이 조금 어색한 경우가 있다고 합니다. 그래서 utf8mb4_unicode_ci를 사용하는 것이 더 좋다네요.
3. MariaDB root 계정 쉘인증 우회
설레는 마음으로 원격지에서 터미널 창으로 mariadb 접속을 시도했습니다.
당연히 우분투 계정은 루트가 아니었고요.
▲ mysql -u root -p
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
(비밀번호 입력했는데 왜 접근 거부냐! ㅠㅠ)
검색해보니까 마리아DB 루트 계정에 기본 적용된 unix_socket 인증 플러그인 때문인 것 같습니다.
mysql_secure_installation 진행할 때 쉘인증이 돼서 편했는데, 이게 계륵일 줄이야.
비밀번호 인증을 통과하지 못한다는 것은 phpMyAdmin 같은 툴도 root 계정으로 접근이 불가능하다는 것을 의미합니다.
▲ 확인사살.
sudo mysql -u root
라고 쳐서 루트 쉘인증으로 MariaDB에 접근하여
SELECT User, Host, Plugin FROM mysql.user;
라고 넣어봤더니 Plugin에 unix_socket이 딱~
라엘 님께서는 root 계정의 unix_socket 플러그인을 해제하는 방식으로 문제를 해결하셨더군요.
MariaDB [(none)]> use mysql;
MariaDB [mysql]> update user set plugin='' where User='root';
MariaDB [mysql]> flush privileges;
MariaDB [mysql]> exit;
▲ 이렇게요.
쉘인증을 포기하고 비밀번호 인증을 얻겠다는 뜻인데...
저는 쉘인증 써보니까 편하고 좋더라고요?ㅋ
그래서 root 계정 쉘인증은 그대로 놔둘 겁니다.
대신 Root 계정이랑 읽기/쓰기를 똑같이(비슷하게) 할 수 있는 세컨드 DB 계정을 추가로 만들면 되지 않겠습니까? ^^;
먼저, root 계정의 권한이 어떻게 되어 있는지 확인해봤습니다.
▲ use mysql;
SHOW GRANTS FOR CURRENT_USER;
이라고 쳐봤더니,
"모든 권한(ALL PRIVILEGES) / 모든 DB.모든 테이블 조작 가능(*.*) / 로컬접속만 가능한 root 계정 / unix_socket 인증" 정도가 눈에 들어오네요.
▲ GRANT ALL PRIVILEGES ON *.* TO '계정명'@'%' IDENTIFIED BY '비밀번호' REQUIRE NONE WITH GRANT OPTION;
형식으로 입력하여 계정 생성 + (root처럼) 모든 권한을 부여해줬습니다.
비밀번호는 최대한 어렵게 설정하세요. 루트계정 대신하는 거라, 뚫리면 피해가 클 겁니다.
(참고로 계정명 옆의 % 옵션은 원격지에서의 접속도 허용하겠다는 의미입니다. % 대신 localhost 라고 넣으면 원격접속 불허.)
SELECT User, Host, Plugin FROM mysql.user;
라고 쳐보니까 aaa 계정이 추가된 것이 보이네요.
show grants for aaa;
라고 쳐보니까 root 계정처럼 ALL PRIVILEGES 라고 뜨네요. 성공한 듯합니다.
생성한 세컨드 DB 계정으로 접속 테스트 해봤습니다.
▲ GRANT를 썼을 때는 flush privileges; 안해도 된다고 하는데, 혹시 몰라서 flush privileges; 돌렸습니다.
\q (또는 exit)를 쳐서 MaridDB 빠져나온 다음,
mysql -u 계정명 -p 형태로 입력하고 패스워드를 넣었더니
접속이 되네요! 성공~
root계정처럼 작동하는지 확인하려면
생성한 계정으로 접속하여 제3의 계정을 만들어보면 되겠죠?
이번에는 CREATE 명령어를 써보겠습니다.
▲ CREATE USER 'bbb(계정명)'@'localhost' IDENTIFIED BY 'bbb(비밀번호)';
라고 쳤더니 오류 없이 통과!
SELECT User, Host, Plugin FROM mysql.user;
라고 쳤더니 bbb 계정이 확인되네요.
root 계정처럼 작동하는군요!
테스트 끝났으니 생성했던 계정 삭제하겠습니다(딱히 쓸모가 없음.).
▲ drop user 'bbb'@'localhost';
SELECT User, Host, Plugin FROM mysql.user; 라고 입력하여 잘 지워졌는지 확인.
flush privileges; 라고 입력하여 적용.
exit 라고 입력하여 MariaDB를 빠져나옵니다.
root 계정 쉘인증 우회 작업은 이것으로 끝.
MariaDB 설치 과정 정리도 끝.
DB/테이블 생성 및 PHP 연동 테스트는 phpMyAdmin 설치하면서 진행하겠습니다.
다음 글에서 이어갈게요.
※ 추가 : MariaDB 계정 비밀번호 변경 방법
우분투 18.04의 패키지 저장소로부터 설치되는 마리아DB 10.1.29 버전에서는 SET PASSWORD 명령어를 이용해서 패스워드를 변경할 수 있는 것 같습니다. 아래 스샷을 참고하시고...
MySQL 5.7부터 ALTER USER 'aaa'@'%' IDENTIFIED BY 'bbb'; 형태로 비밀번호 변경 방식이 바뀌었는데, MariaDB 10.1.29에는 아직 적용되지 않은 듯하네요.
▲ SET PASSWORD = PASSWORD('bbb');
처럼 입력해도 됩니다. FOR 구문 생략하고.
---------------------------------------------
'도움이 되는 Tip > 리눅스&워드프레스' 카테고리의 다른 글
[우분투 18.04 데스크톱] LAMP : phpMyAdmin 설치과정 정리(MariaDB 기반) (0) | 2018.08.05 |
---|---|
[우분투 18.04 데스크톱] LAMP : PHP 7.2 설치과정 정리 (3) | 2018.07.28 |
[우분투 18.04 데스크톱] LAMP : Let's Encrypt SSL 인증서 수동 발급과 아파치(Apache)에 적용하기 (10) | 2018.07.14 |