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이 딱~


https://blog.lael.be/post/73

라엘 님께서는 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 구문 생략하고.


---------------------------------------------


[윈도우10 64bit] APM MySQL 5.7 설치과정 정리

[우분투 18.04 데스크톱] LEMP : MariaDB 설치과정 정리(MySQL 대신)

반응형