programing

MySQL: 데이터베이스 삭제 오류(errno 13, errno 17, errno 39)

minecode 2022. 12. 20. 21:31
반응형

MySQL: 데이터베이스 삭제 오류(errno 13, errno 17, errno 39)

데이터베이스를 삭제하지 못했습니다.

mysql> 데이터베이스 mydb를 삭제합니다.ERROR 1010 (HY000):데이터베이스 삭제 중 오류 발생(rmdir '.mydb', errno: 39)

디렉토리 db/mydb는 mysql 트리에 있지만 테이블이 없습니다.

# ls - l db / mydb-rw-rw----mysql HIS_STAT.MYD-rw-rw----mysql HIS_STAT.마이

어떻게 해야 하나?

퀵픽스

데이터베이스를 폐기하고 싶은 경우는, 다음의 조작을 실행할 수 있습니다(, 우선, 투고 전체를 읽어 주세요.에러는 이유가 있기 때문에, 그 이유를 아는 것이 중요할 수 있습니다).

  • SHOW VARIABLES WHERE Variable_name LIKE '%datadir%';
  • 서버를 MySQL 서버service mysql stop ★★★★★★★★★★★★★★★★★」rcmysqld stop "Linux", "Linux", "Linux", "Linux", "Linux", "LinuxNET STOP <name of MYSQL service, often MYSQL57 or similar> 을 통해SERVICES.MSCWindows 의 windows)
  • datadir로 이동합니다(여기는 조사 대상입니다.아래 참조).
  • 데이터베이스와 이름이 같은 디렉토리를 삭제합니다.
  • MySQL 서버를 다시 시작하고 연결합니다.
  • 드롭 데이터베이스 실행
  • 바로 그거야!

에러 번호 13의 이유

에는 MySQL이 에 대한 .mydb폴더가 존재합니다.

에 체크합니다.

ls -la /path/to/data/dir/         # see below on how to discover data dir
ls -la /path/to/data/dir/mydb   

Linux sql MySQL in AppArmor / SELinux linux linux linux 。, 가 AppArmor® mysqld에 를 보유할 합니다./path/to/data/dir에서는 완전한 R/W를 사용할 수 있지만 MySQLd는 다른 배포 또는 빌드의 데이터를 실제로 다른 곳에 저장합니다(예: /var/lib/mysql5/data/**/var/lib/mysql/**디렉토리에는 올바른 권한과 소유권이 있지만 apparmor/selinux에서는 액세스가 허용되지 않기 때문에 Errno 13이 표시됩니다.

에 보안디렉토리로 한 후 apparminux를 실행합니다. 디렉터리로 이동한 다음 대상 디렉터리에 있을 때까지 증분적으로 CD를 이동한 후 다음과 같은 작업을 실행하십시오.touch aardvark && rm aardvark권한과 소유권이 일치하지만 위의 접근 오류가 발생할 경우 보안 프레임워크 문제일 가능성이 높습니다.

'EASY FIX'가 유해하다고 생각됨

우연히 '익스퍼트 포럼'(Stack Overflow가 아니라 다행스럽게도)에서 제안하는 '간단한 수정'을 발견했는데, 이는 웹과 FTP의 문제에 대해 종종 발견되는 것과 같은 '수정'입니다.chown 777절대 그러지 마세요.777(또는 775 또는 666)은 MySQL 프로그래머가 직접 적용하는 것 잊었거나 알고 싶지 않은 매직넘버가 아닙니다.각 자리수에는 의미가 있으며 777은 "내 물건에 대해 바이너리 스크립트 또는스크립트인 것처럼 실행하는 것을 포함하여 모든 사람이 원하는 것을 하는 것에 동의합니다"를 의미합니다.이렇게 함으로써(적절하게 구성된 시스템에서 이 작업을 수행할 수 없는 경우가 있습니다),

  • 보안 의식이 있는 여러 프로그램이 더 이상 작동하지 않을 경우(예를 들어 SSH 키에 SSH 연결이 끊어질 경우 등) 안전하지 않은 상황에 놓이게 되므로 이러한 프로그램이 더 이상 작동하지 않을 위험이 있습니다.
  • MySQL의 허용 여부에 관계없이 시스템에 대한 모든 액세스 수준을 가진 모든 사용자가 MySQL 자체에 알려지지 않은 상태에서 데이터를 읽고 쓸 수 있습니다. 즉, 전체 데이터베이스를 자동으로 손상시킬 수 있습니다.
  • 내용은 매우 어려운 상황에서 필사적이고 지식이 풍부한 사람들이 접근하기 어려운 MySQL 설치에 다시 액세스하기 위해 수행될 수 있습니다(예: MySQL 설치에도 액세스 할 수 있습니다.mysqladmin로컬 액세스 권한을 부여하지 않습니다.)가 정상으로 돌아가면 바로 실행 취소됩니다.영구적인 변경은 아닙니다.또한 "DB를 폐기할 수 있는 이상한 속임수"를 수정하는 것도 아닙니다.

(물론 웹이나 FTP 문제에 대한 진정한 해결 방법은 거의 없습니다."최근 아내의 열쇠가 현관문을 열지 못하고 집에 들어올 수 없다"는 수정은 "키를 확인하거나 자물쇠를 수리하거나 교체해 달라"는 것입니다.chown 777【속담】 what! 최악의 상황은" " " ") 、 " ") 、 " ") " ") 、 " ")?" 。

Errno 39의 원인

이 코드는 "디렉토리가 비어 있지 않음"을 의미합니다.디렉토리에는 MySQL이 전혀 모르는 숨겨진 파일이 포함되어 있습니다.숨기지 않은 파일의 경우 Errno 17을 참조하십시오.해결책은 동일합니다.

에러 번호 17의 원인

이 코드는 "파일 존재"를 의미합니다.디렉토리에는 MySQL에서 삭제하지 않는 MySQL 파일이 포함되어 있습니다.은 러한음음음음음음음음음음음음 a a a a a a a a a a a a a a a a a a에 의해 수 있습니다.SELECT ... INTO OUTFILE "filename";, 명령어디서filename길이 없었다.이 경우 MySQL 프로세스는 현재 작업 디렉터리에 이러한 디렉터리를 만듭니다. 이 디렉터리는 OpenSuSE 12.3의 MySQL 5.6에서 테스트되었습니다. 이 디렉터리는 데이터베이스의 데이터 디렉터리입니다./var/lib/mysql/data/nameofdatabase.

재현성:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1676
Server version: 5.6.12-log openSUSE package
[ snip ]    

mysql> CREATE DATABASE pippo;
Query OK, 1 row affected (0.00 sec)

mysql> USE pippo;
Database changed
mysql> SELECT version() INTO OUTFILE 'test';
Query OK, 1 row affected (0.00 sec)

mysql> DROP DATABASE pippo;
ERROR 1010 (HY000): Error dropping database (can't rmdir './pippo/', errno: 17)

-- now from another console I delete the "test" file, without closing this connection
-- and just retry. Now it works.

mysql> DROP DATABASE pippo;
Query OK, 0 rows affected (0.00 sec)

파일을 외부로 이동(또는 필요 없는 경우 삭제)한 후 다시 시도하십시오.또, 애초에 작성된 이유를 특정합니다.일부 애플리케이션의 버그를 가리킬있습니다.또는 더 나쁜 경우: 아래를 참조하십시오.

업데이트: 공격 플래그로서의 오류 17

이 문제는 워드프레스가 설치된 Linux 시스템에서 발생했습니다.안타깝게도 고객은 시간적인 제약에 시달려 디스크의 이미지 작성이나 실제 포렌식 라운드를 할 수 없었습니다.머신 전체를 재설치하고 Wordpress를 업데이트했기 때문에 이 플러그인을 통해 작업을 완료했다고 거의 확신할 수 있습니다.

증상:mysql데이터 디렉토리에는 확장자가 PHP인 파일이 3개 포함되어 있습니다.잠깐, 뭐라고?!--그리고 파일 안에는 Base64 코드가 대량으로 전달되어 있었습니다.base64_decode,gzuncompress ★★★★★★★★★★★★★★★★★」[eval()][2], 물론 이건 첫 번째 시도일 뿐이고 실패한 시도일 뿐이죠그 사이트는 정말 잘 되어 있었다.

따라서 mysql 데이터에서 오류 17의 원인이 되는 파일이 발견되면 유틸리티를 사용하여 확인하거나 바이러스 백신으로 스캔하십시오.또는 내용물을 육안으로 검사합니다.악의 없는 실수 때문에 거기에 있다고 생각하지 마세요.

(물론 파일을 육안으로 검사하려면 두 번 클릭하지 마십시오).

이에게 '가 있었다)는는 전혀 입니다.DROP DATABASE(이유는 묻지 마세요-나도 알고 싶어도모르겠어요)그리고 에러가 발생했습니다.CPU 부하와 syslog 메시지로 미루어 볼 때 호스트가 스팸 팜이 된 것이 확실합니다.

또 다른 에러 17

당신이 가 if if if ifrsync또는 Linux나 Windows 등의 다른 플랫폼이나 파일 시스템(예: 권장되지 않으며 위험하지만 많은 경우)의 2개의 MySQL 설치 간에 복사할 수도 있습니다.특히 대소문자를 구분하는 설정이 다르면 실수로 같은 파일의 두 가지 버전(데이터, 인덱스 또는 메타데이터 중 하나)이 될 수 있습니다.Customers.myi ★★★★★★★★★★★★★★★★★」Customer.MYIMySQL은 둘 중 하나를 사용하고 다른 하나에 대해 아무것도 알지 못합니다(이러면 최신 버전이 아니게 되어 동기화가 제대로 되지 않을 수 있습니다).할 때 합니다.mysqldump ... | ... mysql 스킴, 「」, 「」,DROP추가 파일(또는 추가 파일)이 존재하기 때문에 실패합니다.이 경우 파일 시간에서 수동으로 삭제해야 하는 오래된 파일을 인식할 수 있습니다.또, 이러한 파일의 케이스 스킴이 다른 대부분의 테이블과 다르다는 사실도 인식할 수 있습니다.

data-dir 검색

데이터 는 ""를 수 .my.cnffilename( )/etc/my.cnf,/etc/sysconfig/my.cnf,/etc/mysql/my.cnflinux 、 Linux ®my.ini에서) 를 참조해 주세요.[mysqld] 「」와 같이datadir.

또는 MySQL 자체에 요청할 수 있습니다.

mysql> SHOW VARIABLES WHERE Variable_name LIKE '%datadir%';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.00 sec)

제 경우 'lower_case_table_names' 파라미터에 의한 것입니다.

lower_case_table_names 파라미터를 가진 대문자 테이블명으로 구성된 데이터베이스를 삭제하려고 했을 때 발생한 오류 번호39 가 유효하게 되어 있습니다.

이 문제는 소문자 파라미터의 변경을 이전 상태로 되돌림으로써 해결됩니다.

에간 to 로 가면 돼요./opt/lampp/var/mysql

보면 '아주 좋다'가 요.database" files in in it" (파일 삭제( If any files in it)

to, 제라로 .phpmyadmin을 떨어뜨리다database

ERRORCODE 39에 대해서는 디스크상의 물리 테이블 파일을 삭제하기만 하면 됩니다.위치는 OS 배포 및 설정에 따라 달라집니다.Debian에서는 일반적으로 /var/lib/mysql/database_name/ 아래에도 표시됩니다.

rm -f /var/lib/mysql/<database_name>/

그런 다음 다음 다음 명령을 사용하여 선택한 도구에서 데이터베이스를 삭제합니다.

DROP DATABASE <database_name>

이렇게 해결했습니다.

mysql> DROP DATABASE mydatabase;
ERROR 1010 (HY000): Error dropping database (can't rmdir '.\mydatabase', errno: 13)
mysql> 

.C:\...\UniServerZ\core\mysql\data\mydatabase.

mysql> DROP DATABASE mydatabase;
ERROR 1008 (HY000): Can't drop database 'mydatabase'; database doesn't exist

제 경우 데이터베이스에 속하지 않은 추가 파일이 데이터베이스 폴더 안에 있었습니다.오류를 트리거한 모든 테이블을 삭제한 후 Mysql이 폴더가 비어 있지 않음을 발견했습니다.파일을 삭제하면, 드롭 데이타베이스는 정상적으로 동작합니다.

linux에서 "/var/lib/mysql" 오른쪽 버튼을 클릭하여 (관리자로서 열기) mysql 폴더 내에서 데이터베이스 이름에 대응하는 폴더를 찾아 삭제합니다.데이터베이스가 폐기됩니다.

언급URL : https://stackoverflow.com/questions/12196996/mysql-error-dropping-database-errno-13-errno-17-errno-39

반응형