Congelación de la base de datos MySQL después de 'usar'

17

Recientemente cometí un error bastante estúpido y corrompí mi instalación de Ubuntu. Para resolverlo, arranqué con un CD en vivo y copié los archivos de la base de datos. Sin embargo, ahora he copiado las carpetas de la instalación anterior a la nueva, cada vez que escribo "use database_name" simplemente se congela en esto:

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

Y luego se congela sin dar el terminal.

Matthew Haworth
fuente

Respuestas:

28

En el primer comando "usar" después del inicio de sesión, MySQL escanea el nombre de la base de datos, tablas y columnas para la finalización automática. Si tiene muchos db, tablas, podría tomar un tiempo.

Para evitar eso, inicie su cliente con la opción -A (o --no-auto-rehash)

mysql -uroot -p -A

También puede agregar la variable disable_auto_rehash en su my.cnf (en la sección [mysql]) si desea deshabilitarla por completo. Este cambio no requiere un reinicio (es un cliente, no un servidor, variable).

Maxime Fouilleul
fuente
¿Puede "un tiempo" ser más de un día para una base de datos de ~ 2.5GiB, o es irracionalmente largo?
lucidbrot
2

En mi caso, la "información de la tabla de lectura" estaba tomando una cantidad de tiempo irrazonable. Cuando corrí mysql -e 'show processlist'descubrí que el proceso que estaba "colgando" era "Esperando el bloqueo de metadatos de la tabla". Esto tenía algún sentido ya que tenía una consulta de larga duración del formulario que se create table from select ...ejecutaba en otro lugar, por lo que en un nivel pude entender que hasta que se terminara de crear esa nueva tabla, los metadatos sobre las tablas no estarían disponibles. (Supongo que sería preferible si el análisis de autocompletar simplemente omitiera las tablas "incompletas" de la consulta de metadatos si fuera posible).

wwkudu
fuente
0

📌

Cuando copia una base de datos completa de otro sistema:

/ var / lib / mysql / *

Puede usar -R mysql: mysql / var / lib / mysql / * e iniciar el servicio nuevamente.

☝ esto resolvió mi problema 👊

Rafael Lemos
fuente
2
¡Bienvenido a DBA Stack Exchange! Has formateado esto como una cita; Si realmente obtuvo esta solución de otro lugar, debe proporcionar la fuente . De lo contrario, elimine el formato.
Glorfindel