Maison >base de données >tutoriel mysql >Pourquoi MySQL signale-t-il une table comme inexistante après un changement de répertoire de données, même si SHOW TABLES la répertorie ?

Pourquoi MySQL signale-t-il une table comme inexistante après un changement de répertoire de données, même si SHOW TABLES la répertorie ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-06 10:36:121027parcourir

Why Does MySQL Report a Table as Non-Existent After Datadir Change, Even Though SHOW TABLES Lists It?

La table MySQL n'existe pas ? Mais lorsque j'ai modifié le répertoire de données MySQL qui (devrait) exister, toutes les bases de données sauf une ont été déplacées avec succès. Je peux me connecter et utiliser la base de données, la commande SHOW TABLES renvoie correctement toutes les tables et les fichiers de chaque table sont présents dans le répertoire de données MySQL.

Mais lorsque j'essaie de sélectionner quelque chose dans le tableau, je reçois un message d'erreur indiquant que le tableau n'existe pas. Cela n'a aucun sens puisque j'ai pu afficher le même tableau à l'aide de l'instruction SHOW TABLES.

Je suppose que SHOW TABLES répertorie l'existence du fichier, mais ne vérifie pas si le fichier est corrompu. Par conséquent, même si vous pouvez répertorier ces fichiers, vous ne pouvez pas y accéder.

Cependant, ce n’est qu’une supposition. Je n'ai jamais vu un cas pareil auparavant. Je ne parviens actuellement pas à redémarrer la base de données et à la tester, mais toutes les autres applications qui utilisent la base de données fonctionnent correctement.

Quelqu'un connaît-il la raison de ce phénomène ?

Exemple :

Solution :
mysql> SHOW TABLES;
+-----------------------+
| Tables_in_database    |
+-----------------------+
| TABLE_ONE             |
| TABLE_TWO             |
| TABLE_THREE           |
+-----------------------+
mysql> SELECT * FROM TABLE_ONE;
ERROR 1146 (42S02): Table 'database.TABLE_ONE' doesn't exist

Copiez le répertoire de la base de données directement à l'aide de la commande ci-dessous Le même problème peut se produire si vous le faites.

Lorsque je fais cela sur une base de données qui utilise des tables InnoDB, j'obtiens l'erreur étrange "la table n'existe pas" mentionnée ci-dessus.

cp -r /path/to/my/database /var/lib/mysql/new_database
Le problème est que j'ai besoin de fichiers ib* (par exemple ibdata1, ib_logfile0, ib_logfile1) à la racine du répertoire de données MySQL.

J'ai copié ces fichiers et cela a bien fonctionné.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn