Frage

Ich habe RHEL-5-system mit einem frischen neuen Festplatte die ich nur gewidmet, um den MySQL-server.Um Dinge begonnen zu erhalten, habe ich "mysqldump --host otherhost -A | mysql", obwohl ich bemerkte, wie die manpage nie explizit empfiehlt, die versuchen dieses (mysqldump in eine Datei ist ein no-go.Wir reden 500G Datenbank).

Dieser Vorgang schlägt fehl, in zufälligen Abständen, der beklagt, dass zu viele Dateien geöffnet sind (an diesem Punkt mysqld-wird das entsprechende signal, und stirbt, und respawns).

Ich habe versucht, upping es bei sysctl und ulimit, aber das problem besteht weiterhin.Was kann ich dagegen tun?

War es hilfreich?

Lösung

mysqldump standardmäßig führt eine pro-Tabelle sperren aller beteiligten Tabellen.Wenn Sie viele Tabellen über die Anzahl von Datei-Deskriptoren, die der mysql-server-Prozess.Versuchen Sie --skip-lock-tables oder wenn die Verriegelung ist unerlässlich, --lock-all-tables.
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html

--lock-all-tables, -x

Sperren Sie alle Tabellen in allen Datenbanken.Erreicht wird dies durch den Erwerb einer globalen lese-lock für die Dauer der gesamten dump.Diese option schaltet sich automatisch aus --single-transaction und --lock-tables.

Andere Tipps

mysqldump wurde berichtet, yeld, dass Fehler bei größeren Datenbanken (1, 2, 3).Erklärung und Abhilfe aus MySQL-Fehler:

[3 Feb 2007 22:00] Sergei Golubchik Dies ist nicht wirklich ein bug.

mysqldump standardmäßig hat --lock-tables aktiviert, was bedeutet, dass es versucht, zu sperren alle Tabellen entleert werden, bevor der dump.Und tun, LOCK TABLES t1, t2, ...für die wirklich großen Anzahl der Tische wird unweigerlich erschöpfen aller verfügbaren Datei-Deskriptoren, die als SPERRE muss alle Tabellen geöffnet werden.

Problemumgehungen:--skip-lock-tables deaktivieren und so eine Verriegelung vollständig.Alternativ --lock-all-tables wird mysqldump zu verwenden, FLUSH TABLES WITH READ LOCK, die alle Schlösser Tabellen in allen Datenbanken (ohne Sie zu öffnen).In diesem Fall mysqldump wird automatisch deaktivieren --lock-tables, weil es keinen Sinn macht, wenn --lock-all-tables verwendet.

Bearbeiten:Bitte überprüfen Sie Dave ' s einen workaround für InnoDB in den Kommentar unten.

Wenn Ihre Datenbank ist, dass große, du hast ein paar Probleme.

  1. Sie haben das sperren der Tabellen-dump-Daten.

  2. mysqldump wird nehmen eine sehr lange Zeit und Ihre Tabellen müssen gesperrt, während dieser Zeit.

  3. importieren der Daten auf den neuen server auch dauert eine lange Zeit.

Da Ihre Datenbank wird im wesentlichen unbrauchbar, während #1 und #2 sind passiert, ich würde tatsächlich empfehlen, stets die Datenbank und die Verwendung von rsync zum kopieren der Dateien auf den anderen server.Es ist schneller als die Verwendung von mysqldump und viel schneller als das importieren, da Sie nicht die zusätzliche IO-und CPU der Erzeugung von Indizes.

In Produktions-Umgebungen auf Linux viele Menschen setzen von Mysql-Daten auf einer LVM partition.Dann stoppen Sie die Datenbank, einen LVM-Schnappschuss, starten Sie die Datenbank und kopieren Sie den Zustand gestoppt-Datenbank in Ihrer Freizeit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top