리눅스 Snippet - Mariadb 데이터 디렉토리 변경 시 에러 해결 과정 정리

1. 상황1

  • /etc/my.cnf.d/server.cnf 파일에서 datadir 을 변경한 후 서비스 시작시 아래와 같은 에러 발생
$ systemctl status mariadb
  ● mariadb.service - MariaDB 10.3.9 database server
     Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
    Drop-In: /etc/systemd/system/mariadb.service.d
             └─migrated-from-my.cnf-settings.conf
     Active: failed (Result: exit-code) since 목 2018-08-16 15:04:25 KST; 11s ago
       Docs: man:mysqld(8)
             https://mariadb.com/kb/en/library/systemd/
    Process: 13208 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
    Process: 17571 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION (code=exited, status=1/FAILURE)
    Process: 17535 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SUCCESS)
    Process: 17529 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
   Main PID: 17571 (code=exited, status=1/FAILURE)
     Status: "MariaDB server is down"
  
   8월 16 15:04:25 localhost.localdomain systemd[1]: Starting MariaDB 10.3.9 database server...
   8월 16 15:04:25 localhost.localdomain mysqld[17571]: 2018-08-16 15:04:25 0 [Note] Using unique option prefix 'sock' ...ead.
   8월 16 15:04:25 localhost.localdomain mysqld[17571]: 2018-08-16 15:04:25 0 [Note] /usr/sbin/mysqld (mysqld 10.3.9-Ma... ...
   8월 16 15:04:25 localhost.localdomain mysqld[17571]: 2018-08-16 15:04:25 0 [Warning] Can't create test file /home/ma...test
   8월 16 15:04:25 localhost.localdomain mysqld[17571]: [89B blob data]
   8월 16 15:04:25 localhost.localdomain mysqld[17571]: 2018-08-16 15:04:25 0 [ERROR] Aborting
   8월 16 15:04:25 localhost.localdomain systemd[1]: mariadb.service: main process exited, code=exited, status=1/FAILURE
   8월 16 15:04:25 localhost.localdomain systemd[1]: Failed to start MariaDB 10.3.9 database server.
   8월 16 15:04:25 localhost.localdomain systemd[1]: Unit mariadb.service entered failed state.
   8월 16 15:04:25 localhost.localdomain systemd[1]: mariadb.service failed.
  Hint: Some lines were ellipsized, use -l to show in full.

2. 상황1 조치

$ getenforce
$ semanage fcontext -a -t mysqld_db_t "변경디렉토리(/.*)?"
$ restorecon -Rv 변경디렉토리
$ chcon -R -u system_u -r object_r -t mysqld_db_t 변경디렉토리
$ ls -lh -Zd 변경디렉토리

3. 상황2

  • 상황 1조치 후 start 시 다른 에러 발생 datadir을 변경하면서 시스템 설정 테이블이 없다는 메세지
8월 16 15:44:00 localhost.localdomain mysqld[10291]: 2018-08-16 15:44:00 0 [Note] InnoDB: Buffer pool(s) load completed at 180816 15:44:00
 8월 16 15:44:00 localhost.localdomain mysqld[10291]: 2018-08-16 15:44:00 0 [Note] Plugin 'FEEDBACK' is disabled.
 8월 16 15:44:00 localhost.localdomain mysqld[10291]: 2018-08-16 15:44:00 0 [ERROR] Could not open mysql.plugin table. Some plugins may be not loaded
 8월 16 15:44:00 localhost.localdomain mysqld[10291]: 2018-08-16 15:44:00 0 [Note] Recovering after a crash using tc.log
 8월 16 15:44:00 localhost.localdomain mysqld[10291]: 2018-08-16 15:44:00 0 [Note] Starting crash recovery...
 8월 16 15:44:00 localhost.localdomain mysqld[10291]: 2018-08-16 15:44:00 0 [Note] Crash recovery finished.
 8월 16 15:44:00 localhost.localdomain mysqld[10291]: 2018-08-16 15:44:00 0 [ERROR] Can't open and lock privilege tables: Table 'mysql.servers' doesn't e
 8월 16 15:44:00 localhost.localdomain mysqld[10291]: 2018-08-16 15:44:00 0 [Note] Server socket created on IP: '::'.
 8월 16 15:44:00 localhost.localdomain mysqld[10291]: 2018-08-16 15:44:00 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user'

4. 상황2 조치

  • Mariadb 기본 설치 디렉토리(/var/lib/mysql)에 생성된 데이터 파일들을 변경 디렉토리로 복사, 소유자 mysql 인지 확인 필수