Risorse esaurite per mysqldump


21

Sto provando a fare un mysqldump su un server Windows e ricevo il seguente messaggio di errore :

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

Ecco il comando che sto eseguendo:

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

Il riavvio del servizio mysql non ha aiutato.

Ricevo sempre il messaggio per lo stesso tavolo.

Ho provato a ridurre le variabili table_cache e max_connections rispettivamente da 64 a 32 e da 30 a 10, ma ho ancora l'errore solo questa volta per una tabella diversa (e da ora in poi il messaggio di errore menziona sempre la seconda tabella).

Lo stesso script è in esecuzione su una dozzina di altri server Windows con lo stesso database senza problemi.

Tutti i database hanno 85 tabelle.


Su quale sistema operativo hai MySQL?
davey

Windows ovunque.
Philippe Carriere,

Quante tabelle nel DB? Sembra una sorta di limite del descrittore di file.
davey,

85 tabelle nel DB.
Philippe Carriere,

Informazioni aggiunte alla descrizione.
Philippe Carriere,

Risposte:


21

Secondo qui - "Codice di errore del sistema operativo 24: Troppi file aperti" che si allinea all'errore più generale 23 "Risorse esaurite".

Quindi sembra che tu stia esaurendo gli handle di file. Di solito si tratta di un'impostazione / problema all'estremità del server, sia in MySQL, sia nel sistema operativo stesso.

Forse controlla / regola le --open-files-limitimpostazioni in MySQL stesso e vedi se questo aiuta.

Inoltre, forse prova a eseguire il dump, mentre nessun altro utilizza il DB, con l' --single-transactionimpostazione anziché --Lock-File, poiché diverse persone suggeriscono che funzionerà una tabella alla volta invece di aprirle tutte in una volta (quindi utilizzando meno handle di file).

Oltre a ciò, probabilmente dovrai trovare una causa principale sul perché questo particolare server sta esaurendo le risorse. Ciò comporterebbe probabilmente la risoluzione dei problemi disabilitando il maggior numero possibile di servizi / processi e vedere se il dump attraversa. Quindi capire da lì chi è il colpevole che sta mangiando troppe risorse e forse non le libera correttamente.


2
--single-transazione invece di --lock-tables ha funzionato. Molte grazie.
Philippe Carriere,

Stranamente non sto usando InnoDB ma non funziona senza questo parametro. Pensavo che la singola transazione fosse rilevante solo con innoDB.
Philippe Carriere,

Bello. :) Sono contento che abbia aiutato.
techie007,

4
--lock-all-tablesfunziona anche e non presenta problemi di incoerenza rispetto a --single-transactionquando si lavora su tabelle non InnoDB.
Freiheit,

Giusto per chiarire: --single-transactionforze --lock-tables=off. Non utilizzarlo su tabelle non transazionali.
b2ag,

6

Sei in grado di provarlo --single-transactioninvece di, --lock-tablesad esempio, le tabelle sono InnoDB e non stai utilizzando le tabelle del cluster e che ALTER TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE non si verificherà durante il dump? La migliore conferma è ok con la tua organizzazione di supporto MySQL se ne hai una.

L'ho provato solo su Unix, ma fondamentalmente se provo con un DB con 2000 tabelle fallisce con un errore simile al tuo, ad esempio ho usato tutti i miei handle di file aperti.


+1. Anche la tua soluzione è la stessa di techie007 ma ha risposto prima, quindi accetto la sua risposta. Per la cronaca, non sto usando innoDB.
Philippe Carriere,

2

È possibile che venga visualizzato questo errore:

MySQL: Errcode: 24 quando si utilizzano TABELLE DI BLOCCO

... insieme ad altri errori quando esegui l'aggiornamento a MySQL 5.5 e esegui i tuoi backup su Plesk o su qualsiasi altro sistema operativo in esecuzione mysqldump.

Aggiustare:

  1. modificare my.cnf
  2. Inserisci:

    open_files_limit=2048
    
  3. Riavvia MySQL

Se stai ricevendo:

Impossibile caricare da mysql.proc. La tabella è probabilmente corrotta (1548)

Questo è il risultato di un aggiornamento a 5.5. Eseguire:

mysql_upgrade --force

Testato e lavorato su CentOS 6.7 e Plesk 12.


0

Ho avuto un problema simile a Philipe. Quando ho iniziato il dump ho visto un errore come questo:

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

Ho usato un comando semplice:

mysqldump -uroot -p c1baznarz > c1baznarz.sql

Quindi, aggiungo un altro comando al mio mysqldump:

--single-transaction

e la discarica è pronta. Quindi, la mia query all mysqldump è simile alla seguente:

mysqldump -uroot -p --lock-tables --single-transaction c1baznarz > c1baznarz.sql
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.