J'ai donc un serveur de base de données de test qui a été installé sur un flux de réplication. Sur le nom, une optimisation est apparue qui a rapidement rempli l'espace sur le datadir des esclaves. Mysql attendait consciencieusement un peu plus d'espace.
Ce datadir est un système de fichiers utilisé UNIQUEMENT comme datadir de mysql donc il n'y avait rien d'autre à libérer.
J'avais une table de test innodb de 4 gig qui ne faisait pas partie du flux de réplication alors j'ai pensé que j'essaierais quelque chose pour voir si cela fonctionnerait, et étant un environnement de test, je n'étais pas trop inquiet si les choses tournaient horriblement mal.
Voici les étapes que j'ai prises
- Rincé la table que j'allais bouger
- Placé un verrou de lecture dessus (même si rien n'y était écrit et qu'il n'était pas dans le flux de réplication)
- Copié le .frm et le .ibd sur un système de fichiers avec une pièce de rechange
- Déverrouillé la table
- La table a été tronquée - cela a libéré suffisamment d'espace pour que l'optimisation se termine et que la réplication recommence à avancer.
- Arrêtez l'asservissement / l'arrêt de mysql
- Copiez le fichier de tmp dans le répertoire de données
- Redémarrez mysql
Rien n'apparaît dans le journal .err, les choses semblent bonnes. Je me connecte et utilise mydb; et voir la table avec laquelle je jouais dans les tables d'exposition. Mais si j'essaye
select * from testtable limit 10;
Je reçois l'erreur
ERROR 1146 (42S02): Table 'mydb.testtable' doesn't exist
D'après ce que je peux dire jusqu'à présent, je peux lire à partir de toutes les autres tables très bien et la réplication a commencé sans aucune plainte.
Puis-je faire quelque chose pour récupérer à partir de ce point? Je peux le reconstruire à partir de zéro si nécessaire, mais j'étais curieux de savoir ce que les autres pensaient de cette entreprise en général. Y avait-il quelque chose dans la série d'étapes que j'ai prises qui aurait abouti à des résultats plus parfaits?
Et si ce n'était pas un serveur de test, je ne pouvais pas simplement "le faire vivre" et voir ce qui se passait? Quelle serait la meilleure façon de libérer temporairement de l'espace sur un esclave de production si je devais aimer ça?
la source
Table 'X' doesn't exist in engine
. Dois-je faire la méthode ci-dessus pour chacune des tables ou existe-t-il de meilleures façons de résoudre ce problème?J'ai expérimenté avec mon Mac, avant de vendre à un ami, copiez simplement le dossier XAMPP uniquement sur mon disque dur. (PAS DE SUCCÈS) Malheureusement, cela me posait des problèmes, car j'ai essayé les étapes suivantes: - J'installe de nouveaux XAMPP et copie l'intégralité des \ httdocs et var \ mysql sur mon nouveau Mac, ces db uniquement avec .frm et .ibd, NE FONCTIONNE PAS, je ne peux toujours pas accéder aux tables dans PHPMyAdmin ... - J'ai essayé d'installer la même version de xampp et de répéter les étapes ci-dessus, toujours PAS FONCTIONNANT. - J'ai décidé d'aller me coucher.
(SUCCÈS) - Ce matin, j'ai apporté mon disque de sauvegarde et essayez avec Windows 7. - Installez le dernier XAMPP pour Windows, c: \ xampp - J'ai un site Web (dossier) de ma sauvegarde \ httdocs et un dossier de base de données correspondant à l'intérieur \ var \ mysql sont PRETS dans mes fenêtres 7, je veux juste essayer avec un site web puis essayer le reste car j'ai beaucoup de projets dans httdocs \ et \ var \ mysql - je copie la mention httdocs \ dans Windows c: \ xampp \ httdocs et copiez le \ var \ mysql dans c: \ xampp \ mysql \ data
PAS DERNIER ENCORE Je copie ib_logfile0, ib_logfile1, ibdata1 de mon fichier de sauvegarde vers windows xampp c: \ xampp \ mysql \ data
Je rafraîchis le http: // localhost / mywebsite
WOW WOW DONE ... ça marche ...
la source