Nach dem Upgrade von Debian Sarge auf Etch und einem damit verbundenem MySQL Update von 4.x auf 5.x nervt mysqlcheck mit folgendem rum:
*datenbank*.*tabelle* error : Table upgrade required. Please do "REPAIR TABLE `*tabelle*`" to fix it!
Bis zum Ende lesen – es gibt eine Super einfache Kösung statt dieses Pipeline-SQL-Foo gefrickels.
Da jeder der mehr als eine Datenbank/Tabelle laufen hat sicherlich keine Lust hat das “fix it” manuell durchzuführen hier ein paar shell einzeiler:
# Temporäres Verzeichniss und syslog wegsichern mkdir ~/mysql-repair/ cp /var/log/syslog ~/mysql-repair/ cd ~/mysql-reqair # Fehlerhafte Datenbanken/Tabellen - Repair SQL Statement ermitteln egrep 'debian-start.+: [^-: ]+$' syslog | perl -nle 'print "USE `$1`; REPAIR TABLE `$2`;" if /([^\s]+)\.([^\s]+)$/' > repair.sql # Manuell Prüfen less repair.sql # Und Reparieren mysql -u root -p < repair.sql > repair.log # MySQL neustarten /etc/init.d/mysql restart # Prüfen mysqlcheck immer noch was zu meckern hat (hoffentlich nicht!) tail -n50 /var/log/syslog # Und aufräumen rm -rf ~/mysql-repair
Ich wette das “mysqlcheck” obiges Feature direkt mitliefert, aber ich hab natürlich nicht nachgeschaut …
Und ja, nach dem raussuchen des Links zu mysqlcheck steht etwas von einem repair Parameter.
Huhu,
Danke für deinen Blogpost auf #1 in Google!
Mit
mysqlcheck -r –all-databases
wurde meine Datenbank wieder repariert, juchuuu
Gruß beni