MySQL will mal wieder nicht PT.2

Nachdem im MySQL mit innodb_force_recovery = 4 gestartet wurde, löschen wir zuerst die korrupten Tabellen. Um nicht ganz die Hosen runter zu lassen sichern wir natürlich auch noch alle nötigen Daten von MySQL und machen einen Dump der Datenbank(en). Hierzu lohnt es sich alles als Superuser auszuführen.

mkdir /root/mysqlbck
cp /var/lib/mysql/* nach /root/mysqlbck/
mysqldump [options] --all-databases > /root/mysqlbck/mysqlbck.sql

Jetzt stoppen wir wieder den Daemon.

/etc/init.d/mysqld stop

Nicht vergessen: innodb_force_recovery = 4 in my.cnf auskommentieren und das Datenverzeichnis von MySQL löschen.

rm -rf /var/lib/mysql/*

Da wir nun ja keinerlei Daten haben, initialisieren wir die MySQL Datenbank neu.

mysql_install_db --user=mysql --basedir=/opt/mysql/mysql --datadir=/opt/mysql/mysql/data

Jetzt können wir auch den Daemon neu starten.

/etc/init.d/mysql start

Wird folgendes wird jedoch mit ausgeben:

ERROR 1045 (28000): Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)

Dennoch neues root passwort setzen:

mysqladmin -u root password '###PASSWORD###'

danach:

Die Datei /etc/mysql/debian.cnf öffnen und das Passwort für den User debian-sys-maint auslesen und kopieren.

mysql -u root -p
mysql> GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '###PASSWORD###' WITH GRANT OPTION;

Dabei ###PASSWORD### mit Passwort aus der debian.cnf ersetzen

/etc/init.d/mysql restart

Dann noch:

mysql_secure_installation

Wenn noch gewünscht, weil evtl. früher schon gemacht - MySQL Admin-User umbenennen.

Standardgemöß ist "root" der MySQL Admin-User. Hacker versuchen natürlich dies auszunutzen. Wir nennen den User anders, um ihnen das Leben etwas schwerer zu machen. Am besten ist es eigentlich einen alphanumerischen und längeren Namen zu nehmen. In der MySQL-Konsole haben wir dafür 2 Möglichkeiten.

Möglichkeit 1:

RENAME USER root TO new_user;

(Dies funktioniert ab MySQL version 5.0.2)

Möglichkeit 2:

use mysql;
update user set user="###UNSERNEUERADMIN###" where user="root";
flush privileges;

Jetzt importieren wir wieder alles über die Shell. Natürlich sollten dabei die korrupten Tabellen nicht mehr enthalten sein.

mysql -u root -p < /root/mysqlbck/mysqlbck.sql


Wenn ich nichts vergessen habe, sollte alles wieder laufen wie gewohnt. Alles natrülich ohne Gewähr. Immer fleissig Backups machen. Ein paar zusätzlich Infos findet ihr unten in den Links.

Viel Erfolg!