mysqldump에 대한 리소스가 부족합니다.

mysqldump에 대한 리소스가 부족합니다.

mysqldump를 수행하려고 합니다.윈도우서버와 나는 다음을 얻습니다에러 메시지:

mysqldump: Got error: 23: Out of resources when opening file '.\db\sometable.MYD' (Errcode: 24) when using LOCK TABLES

여기에명령나는 뛰고있어 :

mysqldump -u user -p"pass" --lock-tables --default-character-set=latin1 -e --quick databasename > "query.sql"

mysql 서비스를 다시 시작해도 도움이 되지 않았습니다.

나는 항상 같은 테이블에 대한 메시지를 받습니다.

줄여보려고 노력했어요table_cache그리고최대_연결각각 64에서 32, 30에서 10까지의 변수를 지정했지만 이번에는 다른 테이블에 대해서만 오류가 발생합니다(이제부터 오류 메시지에는 항상 두 번째 테이블이 언급됩니다).

동일한 스크립트가 다른 12개 시스템에서도 실행 중입니다.윈도우문제없이 동일한 데이터베이스를 가진 서버.

모든 데이터베이스에는 85개의 테이블이 있습니다.

답변1

에 따르면여기- "OS 오류 코드 24: 열린 파일이 너무 많습니다"는 보다 일반적인 오류 23 "리소스 부족"과 일치합니다.

따라서 파일 핸들이 부족한 것 같습니다. 이는 일반적으로 MySQL이나 OS 자체의 서버 측 설정/문제입니다.

아마도 확인 / 조정--open-files-limit환경MySQL 자체에서 그것이 도움이 되는지 확인해 보세요.

또한 다른 사람이 DB를 사용하지 않는 동안 덤프를 실행해 보십시오.--single-transaction환경대신 --Lock-File여러 사람들이 제안한 것처럼 한 번에 테이블을 모두 여는 대신 한 번에 하나의 테이블에서 작동합니다(따라서 더 적은 파일 핸들을 사용함).

그 외에도 이 특정 서버에 리소스가 부족한 이유에 대한 근본 원인을 찾아야 할 것입니다. 가능한 한 많은 서비스/프로세스를 비활성화하고 덤프가 진행되는지 확인하여 문제를 해결해야 할 수도 있습니다. 그런 다음 너무 많은 리소스를 소비하고 리소스를 올바르게 해제하지 못하는 범인이 누구인지 알아내십시오.

답변2

예를 들어 테이블이 InnoDB이고 클러스터 테이블을 사용하지 않고 덤프 중에 ALTER TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE이 발생하지 않는 --single-transaction대신 이를 시도해 볼 수 있는 위치에 있습니까 ? --lock-tablesMySQL 지원 조직이 있는 경우 이에 대해 문제가 없는지 확인하는 것이 가장 좋습니다.

나는 유닉스에서만 이것을 시도했지만 기본적으로 2000개의 테이블이 있는 DB로 시도하면 당신과 유사한 오류로 실패합니다. 예를 들어 나는 열린 파일 핸들을 모두 사용했습니다.

답변3

다음 오류가 발생할 수 있습니다.

MySQL: LOCK TABLES 사용 시 오류 코드: 24

...MySQL 5.5로 업그레이드하고 Plesk 또는 실행 중인 다른 OS에서 백업을 실행할 때 다른 오류와 함께 발생합니다 mysqldump.

고치다:

  1. 편집하다my.cnf
  2. 추가하다:

    open_files_limit=2048
    
  3. MySQL을 다시 시작

귀하가 수신하는 경우:

mysql.proc에서 로드할 수 없습니다. 테이블이 손상되었을 수 있습니다(1548).

5.5로 업그레이드한 결과입니다. 실행하다:

mysql_upgrade --force

CentOS 6.7 및 Plesk 12에서 테스트하고 작업했습니다.

답변4

나 역시 필립과 비슷한 문제를 겪었다. 덤프를 시작하면 다음과 같은 오류가 표시됩니다.

mysqldump: Got error: 23: Out of resources when opening file './c1baznarz/timecard.MYD' (Errcode: 24) when using LOCK TABLES

나는 간단한 명령을 사용했습니다.

mysqldump -uroot -p c1baznarz > c1baznarz.sql

그래서 mysqldump에 또 다른 명령을 추가합니다.

--single-transaction

덤프가 준비되었습니다. 따라서 내 모든 mysqldump 쿼리는 다음과 같습니다.

mysqldump -uroot -p --lock-tables --single-transaction c1baznarz > c1baznarz.sql

관련 정보