Congelamento del database MySQL dopo 'uso'


17

Di recente ho fatto un errore piuttosto stupido e corrotto la mia installazione di Ubuntu. Per risolverlo, ho avviato con un cd live e copiato i file del database. Tuttavia, ora ho copiato le cartelle dalla vecchia installazione a quella nuova, ogni volta che digito "usa database_name" si blocca su questo:

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

E poi si blocca senza dare il terminale.

Risposte:


28

Al primo comando "usa" dopo l'accesso, MySQL esegue la scansione del database, delle tabelle e dei nomi delle colonne per il completamento automatico. Se hai molti db, le tabelle potrebbero richiedere del tempo.

Per evitarlo, avvia il tuo client con l'opzione -A (o --no-auto-rehash)

mysql -uroot -p -A

Puoi anche aggiungere la variabile disable_auto_rehash in my.cnf (nella sezione [mysql]) se vuoi disabilitarla completamente. Questa modifica non richiede un riavvio (è un client, non un server, variabile).


può "un po '" essere più di un giorno per un database ~ 2.5GiB, o è irragionevolmente lungo?
lucidbrot,

2

Nel mio caso, le "Informazioni sulla lettura della tabella" richiedevano una quantità irragionevole di tempo. Quando ho corso mysql -e 'show processlist'ho scoperto che il processo "sospeso" era "In attesa di blocco dei metadati della tabella". Questo aveva un certo senso dato che avevo una query di lunga durata del modulo in create table from select ...esecuzione altrove, quindi ad un livello potevo capire che fino a quando non fosse stata creata la nuova tabella, i metadati sulle tabelle non sarebbero stati disponibili. (Immagino che sarebbe preferibile se la scansione con completamento automatico omettesse qualsiasi tabella "incompleta" dalla query dei metadati se questo fosse possibile.)


0

📌

Quando si copia l'intero database da un altro sistema:

/ Var / lib / mysql / *

È possibile chown -R mysql: mysql / var / lib / mysql / * e riavviare il servizio.

☝ questo ha risolto il mio problema 👊


2
Benvenuto in DBA Stack Exchange! Hai formattato questo come una citazione; se hai davvero ottenuto questa soluzione altrove, devi fornire la fonte . In caso contrario, rimuovere la formattazione.
Glorfindel,
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.