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
연관된 다른 글
Principal DBA(MySQL, AWS Aurora, Oracle)
핀테크 서비스인 핀다에서 데이터베이스를 운영하고 있어요(at finda.co.kr)
Previous - 당근마켓, 위메프, Oracle Korea ACS / Fedora Kor UserGroup 운영중
Database 외에도 NoSQL , Linux , Python, Cloud, Http/PHP CGI 등에도 관심이 있습니다
purityboy83@gmail.com / admin@hoing.io