setup mariadb

mariadb

db를 docker official image로만 사용하다보니 mysql 또는 mariadb를 manually하게 설치하는법을 잊고 살았다.
그냥 docker ofiicial mariadb를 사용하지 왜 ? 라고 반문한다면, 문득 database와 같은 서비스의 가장 하위 layer level에 있는 서비스들은 다른 의존환경없이 독립된 환경에 존재하는 것이 좋겠다는 생각이 들어서다.
막상 설치하려보니, 여기저기서 구글링하여 찾게되어 정리하려한다.

install

centos7 환경에서 mariadb를 설치를진행한다.
모든 작업은 root로 진행하였으며 다음과 같이 reposotory를 등록후 yum으로 install 한다.

1
2
3
4
5
6
7
8
9
10
11
$ vi /etc/yum.repos.d/MariaDB.repo
# MariaDB 10.2 CentOS repository list - created 2018-02-08 13:29 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
$ yum install MariaDB-server MariaDB-client

mariadb official document 에 아주 자세히나와 있다.
설치가 모두 진행된후 mariadb service를 start 한다.

1
2
3
$ systemctl start mariadb
or
$ service mariadb start

마지막으로 anonymous user 접속 차단과, root password 설정, local 접속여부, test database 삭제등 추가 설정을 한다 .

1
$ mysql_secure_installation

접속

모든 설치와 설정이 끝이났다. 이제 접속을해보자.

1
$ mysql -u root -p

utf8 설정

mariadb를 최초 설치하였다면 database character set이 latin1로 되어있을것이다. 그렇지 않은경우도있으니 다음명령어로 확인한다 .

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ mysql > show variables like 'c%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
| check_constraint_checks | ON |
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
| completion_type | NO_CHAIN |
| concurrent_insert | AUTO |
| connect_timeout | 10 |
+--------------------------+----------------------------+

character_set_database 이 latin1으로 되어있다면, 다음과같이 utf8 세팅을 추가한다.

1
2
3
4
5
$ vi /etc/my.cnf
...
[mysqld]
character-set-server=utf8
...

수정후 mariadb 재시작 한다.

1
$ service mariadb restart

character set 변경사항 적용 확인한다 .

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ mysql > show variables like 'c%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
| check_constraint_checks | ON |
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
| completion_type | NO_CHAIN |
| concurrent_insert | AUTO |
| connect_timeout | 10 |
+--------------------------+----------------------------+

유저생성

1
2
3
4
5
6
7
8
# 외부 접근가능
$ mysql > create user '사용자'@'%' identified by '비밀번호';
# local만 접근가능
$ mysql > create user '사용자'@'localhost' identified by '비밀번호';
# 특정 ip만 접근가능
$ mysql > create user '사용자'@'ip' identified by '비밀번호';

권한부여

1
2
3
4
5
# 모든db 접근가능
$ mysql > grant all privileges on *.* to '사용자'@'host';
# 특정 db 접근가능
$ mysql > grant all privileges on db이름.* to '사용자'@'host';

grant all privileges .. 은 select, update, insert, delete, create 등 DML, DDL 권한을 줄수도있다.

권한확인

1
$ mysql > show grants for '사용자'@'host';

권한삭제

1
$ mysql > revoke all on *.* from '사용자'@'host'

변경사항 적용

grant, create user, drop user 등 query로 수행되는 작업이아닌 명령어로 수행되는 작업들은 reload 함으로서 즉시반영할수있다.

1
$ mysql > flush privileges;

DML(insert, delete, update) 로 수행된작업들은 할필요없다 .