mysql 에서 database를 이관하려고 버전, 스키마 등 구조 파악 중에 #mysql#.(______) 이라는 이상한 directory를 발견합니다.
데이터베이스 이관시 .local 디렉토리 때문에 이관 중 지속적으로 문제가 발생하여 이 디렉토리에 대한 정보와 이관 시 오류 해결책 또는 디렉토리 삭제여부를 판단해야합니다.
mysql이 설치된 폴더에 .local 이라는 directory가 있는데 어떻게 생성된 폴더인지 확인하려고 이것저것 명령어를 입력해 봅니다..
2019년 1월 22일 최종 수정 일자 / 링크 수 3 / 소유자 및 소유권 그룹 mysql / 파일 크기 4096
(조회일자 대략 2월 중순)
- 최초 생성 일자도 확인해봅니다 (ll –al —time-style full-iso)
리눅스 명령어 만으로는 다 파악할 수 없어서 구글링으로 정보를 얻어보았으나 #mysql#.local과 관련한 에러나 오류는 찾기가 힘듭니다.
● 생성원인
(1) 데이터베이스 버전의 충돌(버전 업그레이드/다운그레이드
(2) 이중화된 데이터베이스에서 각 DB의 충돌
(3) ALTER DATABASE 명령으로 하위 디렉토리로 이동시켜 정상서비스 불능으로 만듬
- (5.1.23 ~ 5.1.47 버전에서만 영향을 미침)
(4) MySQL dump 버그
● 해결책
1. 디렉토리를 수동 삭제
하위 디렉토리가 비어 있거나 .MYD, .MYI 또는 .frm 파일이 없는 경우 유효한 데이터베이스아님.
하위 디렉토리만 삭제. ".cache"의 경우 ".config"서브 디렉토리 ('abrt'시스템으로 작성)
(다시 나타날 수 있음)
rm -r /var/lib/mysql/.cache
rm -r /var/lib/mysql/.config
이 디렉토리에는 존재하지 않아야함. '사용자 홈'디렉토리는 애플리케이션 홈이 아니며 두 번째 '.' '#'은
데이터베이스 이름에는 허용 X
2. MySQL 서버에 무시하도록 요청-선호하는 솔루션.
즉, 데이터베이스가 아니라고 나열하여 오류의 원인 해결
"[mysqld]"의 mysql 구성 "my.cnf"파일에 디렉토리를 추가
vi /etc/my.cnf.d/server.cnf
# mysql 데이터베이스가 아닌 특정 디렉토리를 무시
ignore-db-dir = 'lost+found'
ignore-db-dir = '. cache'
ignore-db-dir = '. config'
ignore-db-dir = '. ssh'
서버 재시작하여 적용. 'ignore_db_dirs'와 같은 전역 변수를 표시합니다.
현재 na-prd-nagios에서 사용됨
"/etc/my.cnf.d/server.cnf"또는
"/etc/opt/rh/rh-mysql56/my.cnf.d/mysql-server.cnf"
3. 오류를 보고하지 않도록 덤프 스크립트를 수정
그러나 "automysqlbackup"스크립트를 가져 와서 이러한 '데이터베이스'를 무시
DBEXCLUDE를 사용 시도 실패
# DBEXCLUDE = "information_schema performance_schema"
# DBEXCLUDE = "$ DBEXCLUDE # mysql50 # .cache # mysql50 # .config"
이 작업을 수행하려면 프로그래밍 방식으로 수행하는 것을 권장
if [ "$DBNAMES" = "all" ]; then
DBNAMES="`mysql --user=$USERNAME --password=$PASSWORD --host=$DBHOST \
--batch --skip-column-names -e "show databases" |
sed 's/ /%/g;/^#mysql/d'`" # clean and remove 'dot' sub-dirs
정리 후 : 위의 작업 중 하나를 적용한 후 데이터베이스 백업. automysqlbackup 제거, scipt 저장
ex) rm -r / store / backups / mysql / * / \ # *
● 실행결과
기본적으로 낮은 버전에서 생기는 오류로 보이며 최신버전이나 최소 5.1 이상의 버전을 사용한다면 그냥 삭제해도 큰 문제는 없을 것이라 보여집니다. 만약 불가피하게 버전 업/다운그레이드 없이 진행해야하는 경우라면 #mysql50#. ( OOOO ) 폴더 삭제 또는 다른 위치에 백업 후에 진행한다면 큰 문제 없이 가능합니다.
'[DB] SQL SERVER' 카테고리의 다른 글
[MSSQL] disk usage (데이터베이스 디스크 사용량 조회) (1) | 2023.05.24 |
---|---|
[MSSQL] commit/rollback - begin tran (0) | 2023.05.22 |
[MSSQL] DCT 설정 확인하기(DCP Ping) (0) | 2023.05.17 |
[MSSQL] 단어자동완성(IntelliSense) 설정 (0) | 2023.05.17 |
[MSSQL] DTC, 분산 트랜잭션 처리를 위한 설정 (1) | 2023.05.17 |