Einfrieren der MySQL-Datenbank nach "Verwendung"

16

Ich habe kürzlich einen ziemlich dummen Fehler gemacht und meine Ubuntu-Installation beschädigt. Um das Problem zu beheben, habe ich mit einer Live-CD gebootet und die Datenbankdateien kopiert. Jetzt habe ich jedoch die Ordner aus der alten Installation in die neue kopiert. Immer wenn ich "use database_name" eingebe, friert dies ein:

mysql> use my_database_name;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Und friert dann ein, ohne das Terminal zu geben.

Matthew Haworth
quelle

Antworten:

27

Beim ersten Befehl "use" nach der Anmeldung durchsucht MySQL Datenbank-, Tabellen- und Spaltennamen nach automatischer Vervollständigung. Wenn Sie viele db, Tabellen haben, kann es eine Weile dauern.

Um dies zu vermeiden, starten Sie Ihren Client mit der Option -A (oder --no-auto-rehash).

mysql -uroot -p -A

Sie können auch die Variable disable_auto_rehash in Ihrer Datei my.cnf (im Abschnitt [mysql]) hinzufügen, wenn Sie sie vollständig deaktivieren möchten. Diese Änderung erfordert keinen Neustart (es ist ein Client, kein Server, eine Variable).

Maxime Fouilleul
quelle
kann "eine Weile" mehr als ein Tag für eine Datenbank mit ~ 2,5 GB sein, oder ist das unangemessen lang?
Lucidbrot
1

In meinem Fall hat das Lesen der Tabelleninformationen unangemessen viel Zeit in Anspruch genommen. Als ich lief, stellte mysql -e 'show processlist'ich fest, dass der "hängende" Prozess "Warten auf die Metadatensperre der Tabelle" war. Dies machte irgendwie Sinn, da ich eine lange laufende Abfrage des Formulars hatte, create table from select ...die an anderer Stelle ausgeführt wurde. Auf einer Ebene konnte ich verstehen, dass die Metadaten zu Tabellen nicht verfügbar waren, bis die Erstellung dieser neuen Tabelle abgeschlossen war. (Ich denke, es wäre vorzuziehen, wenn beim automatischen Vervollständigungsscan nur "unvollständige" Tabellen aus der Metadatenabfrage ausgelassen würden, wenn dies möglich wäre.)

wwkudu
quelle
0

📌

Wenn Sie die gesamte Datenbank von einem anderen System kopieren:

/ var / lib / mysql / *

Sie können -R mysql: mysql / var / lib / mysql / * angeben und den Dienst erneut starten.

☝ das hat mein Problem gelöst 👊

Rafael Lemos
quelle
1
Willkommen bei DBA Stack Exchange! Sie haben dies als Zitat formatiert. Wenn Sie diese Lösung wirklich von einer anderen Stelle erhalten haben, müssen Sie die Quelle angeben . Wenn nicht, entfernen Sie bitte die Formatierung.
Glorfindel