본문 바로가기

CentOS

MariaDB Trouble Shooting

MariaDB 설치하면서 나왔던 문제들을 정리하자

 

1. 시스템 테이블이 없는 경우

Feb 29 17:27:02 asusual mysqld[8076]: 2020-02-29 17:27:02 0 [ERROR] Could not open 
mysql.plugin table. Some plugins may be not loaded 
Feb 29 17:27:02 asusual mysqld[8076]: 2020-02-9 17:27:02 0 [ERROR] Can't open and lock privilege tables: Table 'mysql.servers' doesn't exist 
Feb 29 17:27:02 asusual mysqld[8076]: 2020-02-29 17:27:02 0 [Note] Server socket created on IP: '::'. 
Feb 29 17:27:02 asusual mysqld[8076]: 2020-02-9 17:27:02 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.db' doesn't exist 
Feb 29 17:27:02 asusual mysqld[8076]: 2020-02-29 17:27:02 0 [ERROR] Aborting

DB의 시스템테이블 생성이 되지 않았다. mariadb-install-db 또는 mysql-install-db를 실행해야한다.

# mariadb-install-db --user=mysql --basedir=/usr

 

2. 시스템 테이블 생성을 root 권한으로 한 경우

Feb 29 17:35:46 asusual mysqld[8269]: 2020-02-29 17:35:46 0 [ERROR] InnoDB: Operating system error number 13 in a file operation. 
Feb 29 17:35:46 asusual mysqld[8269]: 2020-02-29 17:35:46 0 [ERROR] InnoDB: The error means mysqld does not have the access rights to the directory. 
Feb 29 17:35:46 asusual mysqld[8269]: 2020-02-29 17:35:46 0 [ERROR] InnoDB: Cannot open datafile for read-only: './mysql/gtid_slave_pos.ibd' OS error: 81
...

이 경우 시스템 테이블을 재생성하거나 data 폴더의 권한을 재설정해줘야 한다.

# #시스템 테이블 재생성(--user 옵션은 반드시 필요하다.)
# mariadb-install-db --user=mysql --basedir=/usr
# #권한 변경
# chown -R mysql:mysql /var/lib/mysql

 

3. 유닉스 소켓(UNIX SOCKET)으로 통신되는 경우

MariaDB 10.4.3 버전부턴 unix socket 인증 플러그인이 기본적으로 활성화 되어있다. 이 경우 local 환경에서 unix socket을 이용해 접속 시 root로 로그인되는 문제가 있다.

unix socket 통신을 막고 tcp 통신만 가능하도록 설정하거나, client에서 tcp 통신으로 접근하는 방법이 있다.

1) Unix Socket 비활성화

# vi /etc/my.cnf.d/server.cnf
[mariadb]
unix_socket=OFF

혹시라도 Unix Socket만 활성화하고 싶다면

skip-networking

를 설정하자.

2) Client에서 Unix Socket 통신 비활성화

# vi /etc/my.cnf.d/client.cnf
[client]
protocol=tcp

 

4. 보안 스크립트 오류

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

mariadb-secure-installation(또는  mysql-secure-installation) 스크립트에서 root 패스워드 입력시 이런 에러가 난다면 mariadb server가 죽어있는 케이스이다. mariadb server를 먼저 실행해야한다.

# systemctl start mariadb

 

5. IP를 통한 접속 불가

ERROR 2002 (HY000): Can't connect to MySQL server on '127.0.0.1' (115)

4번과는 에러 메세지가 조금 다르다. LOCALHOST로는 접속이 되는데 LOCAL IP나 사설IP 등을 이용해서 통신이 불가능한 케이스이다.

이럴 때 체크해봐야 할 내용은 좀 많다.

1) SERVER PORT LISTENING 확인

# netstat -anp | grep mysql

현재 PORT가 IPv4로 Listening 중인지, IPv6에 Listening 중인지 체크하자. 만약 IPv6에 바인딩 되어있다면 my.cnf 또는 server.cnf에서 bind-address를 0.0.0.0으로 설정하여 IPv4로 강제한다.

 

2) PORT NUMBER 확인

위에서 나온 PORT 번호를 확인하자. 기본 포트 번호인 3306 이외의 포트라면 mysql client에 변경된 포트번호를 알려줘야 한다.

# mysql -h xxx.xxx.xxx.xxx -P xxxx ...

포트번호는 대문자 P이다.

 

3) 방화벽 확인

1번에서 나온 PORT 번호가 방화벽에 막혀있지 않은지 확인하자.

# firewall-cmd --list-all

만약 포트번호가 아닌 서비스(mysql)가 등록되어있다면 해당 서비스 port number가 제대로 설정되었는지 확인한다.

# firewall-cmd --permanent --service=mysql --get-ports

 

 

6. error 로그에 나오는 warning 메세지

'proxies_priv' entry '@% root@xxxx' ignored in --skip-name-resolve mode.

my.cnf 또는 server.cnf에 'skip-name-resolve'를 설정한 경우 위와 같은 경고 메시지가 error 로그에 나올 수 있다. mysql에 root 계정으로 로그인하여 해당 계정을 삭제하면 된다.

# use mysql;
# select user, host from user where user='root' and host='xxxx';
# delete from user where user='root' and host='xxxx';
# flush privileges;

 

7. errorcode 13. permission denied

mysqld file '/var/lib/mysql/aria_log_control' not found (errcode 13 permission denied )

실수로 mariadb를 지웠다.... 재설치를 했는데, /var/lib/mysql 경로의 권한이 mysql에게 있음에도불구하고 permission denied 에러가 생겼다. 구글을 뒤지다 mariadb Knowledge Base에서 해결책을 찾았다.

https://mariadb.com/kb/en/selinux/

 

SELinux

SELinux is a Linux kernel module that provides a framework for configuring mandatory access control (MAC). Learn how we can help configure your framework.

mariadb.com

 

원인은 SELinux. 개인서버이다 보니 보안이 부실해서 SELinux를 내리지 않고 있었던 참이라 파일 권한에 문제가 생겼던 것 같았다. 아래의 명령어로 해결

# sudo semanage fcontext -a -t mysqld_db_t "/var/lib/mysql(/.*)?"

 

 

 

 

 

'CentOS' 카테고리의 다른 글

MariaDB 튜닝하기  (0) 2020.03.01
Redis Server 설치하기  (0) 2020.02.29
MariaDB 설치하기  (0) 2020.02.28
SNMP 설치하기  (0) 2020.02.28
JAVA 설치하기  (0) 2020.02.27