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를 내리지 않고 있었던 참이라 파일 권한에 문제가 생겼던 것 같았다. 아래의 명령어로 해결
# 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 |