Corruption de base de données avec MariaDB : Table n'existe pas dans le moteur
Je suis dans un environnement de configuration, OSX avec MariaDB 10.0.12-MariaDB Homebrew
J'ai foiré l'installation donc je ne l'ai complètement supprimé MySQL et MariaDB à partir de mon installation et a commencé à nouveau.
Après avoir terminé l'installation de MariaDB, j'ai réimporté mes bases de données (innoDB
) via un Dump de la DB du serveur de production. Il a bien fonctionné.
Après un redémarrage, le jour d'après, je ne peux plus accéder aux bases de données :
Table 'my.table' doesn't exist in engine
Quelle est la cause et quelle est la solution ? Je vois la structure de ma base de données, mais quand j'essaye de l'ouvrir, il me donne ce message d'erreur.
Je l'ai fait essayer mysql-upgrade --force
et la suppression de rm ib_logfile1 ib_logfile0
La perte de données n'est pas un problème ici, le problème est que je ne peux pas passer 30 minutes sur la ré-installation de chaque base de données à chaque fois que je fais un redémarrage.
Voici quelques journaux :
140730 9:24:13 [Note] Server socket created on IP: '127.0.0.1'.
140730 9:24:14 [Note] Event Scheduler: Loaded 0 events
140730 9:24:14 [Warning] InnoDB: Cannot open table mysql/gtid_slave_pos from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.
140730 9:24:14 [Warning] Failed to load slave replication state from table mysql.gtid_slave_pos: 1932: Table 'mysql.gtid_slave_pos' doesn't exist in engine
140730 9:24:14 [Note] /usr/local/Cellar/mariadb/10.0.12/bin/mysqld: ready for connections.
Version: '10.0.12-MariaDB' socket: '/tmp/mysql.sock' port: 3306 Homebrew
140730 16:26:28 [Warning] InnoDB: Cannot open table db/site from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.
OriginalL'auteur sf_tristanb | 2014-07-30
Vous devez vous connecter pour publier un commentaire.
Quelque chose a supprimé votre fichier ibdata1 où InnoDB garde le dictionnaire. Certainement, il n'est pas MySQL qui le fait.
Je suppose que vous voulez dire récupérer table dans les mici fichier qui a perdu son ibdata1. En 5,6 vous pouvez créer une table vide avec la même structure et importer l'espace de table (l'ancien fichier mii). Avant de 5,6 plusieurs options sont possibles: TwinDB de undrop pour innodb outil ou fixer space_id *.mici fichier.
pourriez-vous s'il vous plaît écrire un comment sur la récupérer?
et pour tout d'une venue ici, en fonction de votre situation, vous trouverez peut-être utile d'appeler
mysqldump --all-databases > sql_file.sql
, désinstaller/réinstaller mysql, puis d'appelermysql sql_file.sql
si la base de données est manquant un
*.ibd
fichier pour une table qui est censé exister,mysqldump
obtiendrez un message d'erreur et ne génèrent pas de données, afin de ne pas confiance en approche trop.OriginalL'auteur akuzminsky
Ok, les gars, je suis tombé sur ce problème ce week-end lors de ma OpenStack environnement s'est écrasé. Un autre post à ce sujet bientôt sur la façon de récupérer.
J'ai trouvé une solution qui a fonctionné pour moi avec une instance de SQL Server s'exécutant sous le Ver 15.1 Distrib 10.1.21-MariaDB avec Fedora 25 Serveur hôte. Ne pas écouter tous les messages d'autres qui disent que votre base de données est endommagé si vous avez copié votre ancien mariadb-server /var/lib/mysql répertoire et de la base de données de la copie n'est pas déjà corrompu. Ce processus est basé sur un système où l'OS est devenu corrompu, mais ses fichiers sont accessible.
Voici les étapes que j'ai suivi.
Assurez-vous que vous avez complètement désinstallé les versions actuelles de SQL uniquement sur le NOUVEAU serveur. Aussi, assurez-vous que TOUS les mysql-server ou mariadb-server sur les NOUVEAUX ET les ANCIENS serveurs ont été interrompus en cours d'exécution:
Sur le NOUVEAU serveur SQL aller dans le répertoire /var/lib/mysql répertoire et de s'assurer qu'il n'y a pas de fichiers dans ce répertoire. Si il y a des fichiers dans ce répertoire, ensuite, votre processus de suppression de la base de données de serveur à partir de la nouvelle machine ne fonctionne pas et est peut-être corrompu. Assurez-vous complètement désinstallé à partir de la nouvelle machine.
Sur l'ANCIEN serveur SQL server:
Assurez-vous d'avoir sshd exécute sur l'ANCIEN et le NOUVEAU serveur. Assurez-vous qu'il est de la connectivité réseau entre les deux serveurs.
Sur le NOUVEAU serveur SQL:
Sur l'ANCIEN serveur SQL server:
Sur le NOUVEAU serveur SQL:
Vous devriez maintenant avoir un "mysql", le fichier de répertoire assis dans le NEWMYSQL-DIR. Résister à l'envie de lancer un "cp" commande seul, sans commutateurs. Il ne fonctionnera pas. Exécuter le "cp" commande et assurez-vous d'utiliser les mêmes commutateurs je l'ai fait.
Maintenant, vous devriez avoir une copie de tous vos anciens fichiers de SQL server sur le NOUVEAU serveur avec des autorisations dans le tact. Sur le NOUVEAU serveur SQL:
ÉTAPE TRÈS IMPORTANTE. NE SAUTEZ PAS DE
POUR MARIADB-SERVER et DNF:
POUR MYSQL-SERVER et YUM:
OriginalL'auteur lvto2000
Vous pouvez essayer de:
modifier mon.ini ajouter
puis ouvrez phpmyadmin (ou tout autre DB spectateur comme Navicat ou MYSQL Workbench) et exécuter
pour chaque table
Une fois que vous pouvez ouvrir vos tables de faire un dump mysql
Je sais, beaucoup de travail à faire que vous n'en avez pas besoin.
OriginalL'auteur Adrian P.
J'ai juste eu ce problème avec MariaDB/InnoDB et a été en mesure de le réparer par
OriginalL'auteur hexten