Gel de la base de données MySQL après «utilisation»


17

J'ai récemment fait une erreur assez stupide et corrompu mon installation Ubuntu. Pour le résoudre, j'ai démarré avec un CD live et copié les fichiers de base de données. Cependant, maintenant j'ai copié les dossiers de l'ancienne installation dans la nouvelle, chaque fois que je tape "use database_name", il se fige juste sur ceci:

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

Et puis se fige sans donner le terminal.

Réponses:


28

Lors de la première commande "use" après la connexion, MySQL analyse le nom de la base de données, des tables et des colonnes pour la complétion automatique. Si vous avez plusieurs bases de données, cela peut prendre un certain temps.

Pour éviter cela, lancez votre client avec l'option -A (ou --no-auto-rehash)

mysql -uroot -p -A

Vous pouvez également ajouter la variable disable_auto_rehash dans votre my.cnf (dans la section [mysql]) si vous souhaitez la désactiver complètement. Cette modification ne nécessite pas de redémarrage (c'est un client, pas un serveur, une variable).


"un certain temps" peut-il durer plus d'une journée pour une base de données de ~ 2,5 Go, ou est-ce excessivement long?
lucidbrot

2

Dans mon cas, la «lecture des informations sur la table» prenait un temps déraisonnable. Lorsque j'ai couru, mysql -e 'show processlist'j'ai découvert que le processus qui "suspendait" était "En attente du verrouillage des métadonnées de la table". Cela avait un certain sens car j'avais une requête de longue durée sur le formulaire create table from select ...exécuté ailleurs, donc à un niveau, je pouvais comprendre que jusqu'à ce que la nouvelle table soit terminée, les métadonnées sur les tables ne seraient pas disponibles. (J'imagine qu'il serait préférable que l'analyse de saisie semi-automatique supprime simplement les tables "incomplètes" de la requête de métadonnées si cela était possible.)


0

📌

Lorsque vous copiez la base de données entière d'un autre système:

/ var / lib / mysql / *

Vous pouvez afficher -R mysql: mysql / var / lib / mysql / * et redémarrer le service.

☝ cela a résolu mon problème 👊


2
Bienvenue sur DBA Stack Exchange! Vous avez formaté cela comme une citation; si vous avez vraiment obtenu cette solution ailleurs, vous devez fournir la source . Sinon, veuillez supprimer le formatage.
Glorfindel
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.