우분투에서 MySQL의 Data 디렉토리 변경시 Can't create test file case_insensitive_test

Share

Last Updated on 3월 10, 2022 by Jade(정현호)

안녕하세요 
이번 포스팅에서는 우분투(Ubuntu) 환경에서 apt 로 MySQL 설치 이후 datadir 의 기본 경로인 /var/lib/mysql 에서 다른 디렉토리로 경로 변경시 "Can't create test file mysqld_tmp_file_case_insensitive_test.lower-test" 에러가 발생되는 부분에 대해서 확인 해보려고 합니다. 

디렉토리 변경시 발생 에러

우분투 환경에서 MySQL 의 datadir 을 변경 후 MySQL 을 시작하면 error.log 파일에서 아래와 같은 에러 메세지가 확인 된다면 아래의 진행 되는 내역을 참고 하시면 됩니다.

기본 로그 파일명 : /var/log/mysql/error.log

[MY-010091] [Server] Can't create test file /data/mysql/mysqld_tmp_file_case_insensitive_test.lower-test
[MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.28-0ubuntu0.20.04.3) starting as process 11234
[MY-010091] [Server] Can't create test file /data/mysql/mysqld_tmp_file_case_insensitive_test.lower-test
[MY-010159] [Server] Setting lower_case_table_names=2 because file system for /data/mysql/ is case insensitive
[MY-010119] [Server] Aborting

         

설치 및 디렉토리 변경

설치 환경 : Ubuntu 20.04 / MySQL 8.0.28

MySQL 설치

## MySQL 설치
sudo apt update

sudo apt install mysql-server
 -> 물어보는 질문에 Y 입력

## 파일 생성 확인
sudo ls -al /var/lib/mysql

## 시작된 MySQL 종료
sudo systemctl stop mysql


디렉토리 변경 및 my.cnf 설정
(/data/mysql 로 변경한다고 가정시)

## 디렉토리 변경
sudo mv /var/lib/mysql /data/
sudo mkdir -p /var/lib/mysql
sudo chown mysql:mysql /var/lib/mysql


## mysqld.cnf 파일에 내용 추가(datadir)
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

datadir = /data/mysql


위의 단계까지 하고 MySQL 을 시작하면 아래와 같이 에러가 발생될 수 있습니다.

[MY-010091] [Server] Can't create test file /data/mysql/mysqld_tmp_file_case_insensitive_test.lower-test
[MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.28-0ubuntu0.20.04.3) starting as process 11234
[MY-010091] [Server] Can't create test file /data/mysql/mysqld_tmp_file_case_insensitive_test.lower-test
[MY-010159] [Server] Setting lower_case_table_names=2 because file system for /data/mysql/ is case insensitive
[MY-010119] [Server] Aborting

        

AppArmor 설정 변경

AppArmor 는 name-based 필수 액세스 제어의 Linux 보안 모듈 구현입니다.

관리 되는 프로필로는 네트워크 액세스, raw 소켓 액세스 그리고 파일의 읽기, 쓰기, 실행 같은 능력을 허용 할수 있으며, AppArmor는 강제적 접근 통제(MAC)를 제공함으로써 전통적인 유닉스 임의적 접근 통제(DAC) 모델을 지원 합니다.

apt 로 설치시 AppArmor 에 정책이 등록 되기 때문에 관련해서 수정이 필요 합니다.


크게 2가지 방법이 있으며 먼저 직접 정책 파일을 수정하는 방법이 있습니다

아래와 같이 파일을 수정하도록 하겠습니다.

## usr.sbin.mysqld 파일 수정

# 파일 백업
sudo cp /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/usr.sbin.mysqld.ori

# 파일 수정
sudo vi /etc/apparmor.d/usr.sbin.mysqld
# Allow data dir access
  /data/mysql/ r,
  /data/mysql/** rwk,

usr.sbin.mysqld 파일에 대해서 "Allow data dir access" 항목에서 변경한 디렉토리에 맞게 수정을 합니다.
위의 예시는 /data/mysql 로 변경하였을 때 예시 입니다.

apt 로 설치시 MySQL 관련 파일은 /var/lib/mysql 이외 /var 아래에 몇 개의 디렉토리로 나눠져 있습니다.
모든 디렉토리를 변경하고자 한다면 그에 맞는 my.cnf 와 usr.sbin.mysqld 파일의 수정이 필요 합니다.

그 다음 abstractions/mysql  파일을 수정 하겠습니다.

## 파일 백업
sudo cp /etc/apparmor.d/abstractions/mysql /etc/apparmor.d/abstractions/mysql.ori

## 파일 수정
sudo vi  /etc/apparmor.d/abstractions/mysql

/var/lib/mysql{,d}/mysql{,d}.sock rw,
   
## 위의 내용을 아래와 같이 변경 합니다

/data/mysql{,d}/mysql{,d}.sock rw,


AppArmor 재적용 및 MySQL 시작
모든 설정 및 수정이 완료 되었다면 AppArmor 재적용 과 MySQL 시작을 하면 됩니다.

sudo systemctl restart apparmor

sudo systemctl start mysql



두번째 방법으로는 MySQL 에 대한 정책 자체를 비활성화 하는 방법이 있습니다.

datadir 이외 다른 디렉토리에 대한 변경도 할 경우 파일의 내용을 모두 일일이 수정 해야하기 때문에 이럴 경우 MySQL 정책 자체를 비활성화 하는 것이 조금 더 손쉬운 방법일 것 같습니다.

## apparmor-utils 설치
sudo apt install apparmor-utils

## 프로파일 조회
sudo aa-status | grep mysql
  결과 : /usr/sbin/mysqld

## Disable Profile
sudo aa-disable /usr/sbin/mysqld

## MySQL 시작
sudo systemctl start mysql

        

Reference

Reference URL
ubuntu.com/aa-disable
wikipedia.org/AppArmor
oracle.com/apparmor-and-mysql
launchpad.net/1808360


연관된 다른 글

 

 

 

    

0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x