오류 원인 : 유효하지 않은 (이전?) 테이블 또는 데이터베이스 이름 'lost + found'


8

내 MySQL 로그에 중복 오류가 표시됩니다.

141223  5:47:21 [ERROR] Invalid (old?) table or database name 'lost+found'

이름이 지정된 데이터베이스가 #mysql50#lost+found있지만 삭제할 수없는 것 같습니다.

mysql> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| maindatabas         |
| maindatabas_help    |
| maindatabas_tracker |
| gitlabhq_production |
| locations           |
| #mysql50#lost+found |
| mysql               |
| osticket            |
| performance_schema  |
+---------------------+
10 rows in set (0.00 sec)

mysql> DROP DATABASE `#mysql50#lost+found`;
ERROR 1008 (HY000): Can't drop database '#mysql50#lost+found'; database doesn't exist
mysql>

Centos 6의 IUS Community Project에서 배포 한 서버 버전 : 5.5.40을 운영하고 있습니다.

MySQLCentOS 6x (5x 아님)에서 매우 느리게 실행되고 내 datadir은 ext3에 barrier = 0 옵션을 사용합니다.

이 오류의 원인은 무엇이며 어떻게 제거 할 수 있습니까?

답변:


14

당신 datadir이 자신의 파일 시스템에있는 것처럼 보입니다 .

Exx 파일 시스템은 Unix의 대부분의 FS와 마찬가지로 루트에이라는 디렉토리가 lost+found있습니다. 일관되지 않은 파일 시스템이 fsck 될 때 분리 된 파일 (콘텐츠가 있지만 연관된 디렉토리 항목이없는 파일)을 어딘가에 다시 첨부 할 수 있도록하기 위해 존재합니다 (예 : https://unix.stackexchange.com/ 질문 / 18154 / 자세한 내용은 리눅스와 유닉스 에서 가장 잃어버린 폴더의 목적입니다 ). 이 목적은 재해 복구에 중요하므로 디렉토리를 삭제하지 않아야합니다.

해당 디렉토리를 포함하는 파일 시스템이 마운트 된 마운트 포인트가 해당 마운트 포인트의 모든 것이 해당 디렉토리에 속할 것으로 예상되는 응용 프로그램에 완전히 제공 될 때 문제점이 발생합니다. MySQL은 그러한 lost+found디렉토리 중 하나이므로 디렉토리를 db와 관련된 것으로 해석하려고 시도 하며 (합리적이지 않은) 실패합니다.

가장 좋은 방법은 응용 프로그램에 전체 FS를 전용하지 않으려면 대신, 마운트 지점 일부 응용 프로그램이 아닌 특정에 예를 FS 마운트 결코 /data1, 예를 들면, 그 아래에 하위 디렉토리를 생성 /data1/mysql하고 재구성 응용 프로그램으로 디렉토리를 사용하기 위해 datadir.


12

MadHatter가 오류를 잘 설명했습니다. 그러나 그 이후로 시간이 바뀌었고 MySQL ( 5.6.3 이후 ) 은이 디렉토리를 무시할 수있는 옵션이 있습니다. 이 문장을 /etc/mysql/my.cnf파일에 추가 하십시오.

ignore-db-dir=lost+found

MySQL을 다시 시작한 후 다음 명령으로 확인할 수 있습니다.

show global variables like 'ignore_db_dirs';

여러 디렉토리를 무시하려면 각 디렉토리에 대한 옵션을 별도로 지정해야합니다.

출처 : http://www.chriscalender.com/ignoring-the-lostfound-directory-in-your-datadir/


3

MariaDB를 사용하는 경우 CentOS 7.2에서 my.cnf의 위치가

/etc/my.cnf

당신은 서비스를 다시 시작할 수 있습니다

systemctl restart mariadb.service

ignore-db-dir은 [mysqld_safe] 섹션이 아닌 [mysqld] 섹션에 있어야합니다.

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

ignore-db-dir=lost+found

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

1

MySQL이 아직 이해 ignore_db_dirs하지 못했기 때문에

# chmod 0 lost+found

(이) 문제를 해결했습니다.


0

MariaDb는 ignore_db_dirs입니다. MySQL은 ignore_db_dir입니다- "s"없이

https://mariadb.com/kb/en/library/server-system-variables/#ignore_db_dirs를 참조 하십시오.

아래에 숨겨진 디렉토리가 있습니다.

mysql50 # .local

etc / my.cnf에서 --- MariaDB의 경우

[mysqld] ignore_db_dirs = .local

데이터베이스 서버를 다시 시작한 다음 데이터베이스가 SHOW DATABASES 명령에 더 이상 없거나 MariaDB를 사용하여 명령 행에 "mysqlshow"가 있는지 확인하십시오.

그런 다음 디렉토리 및 / var / lib / mysql에있는 디렉토리를 삭제 한 후 /etc/my.cnf 파일을 다시 편집하여 명령을 주석 처리하거나 제거하고 서버를 다시 시작하십시오. 문제가 해결되었습니다.

서버가 유지하는 데이터 저장소가 손상되어 모든 데이터베이스를 삭제하고 백업에서 데이터베이스를 복원하거나 더 나쁜 상태로 복원하지 않아도 다시 시작하지 못할 수 있습니다. 큰 소리.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.