Leider kommt es auch bei mir mal vor, das irgendwas kaputt geht und ich es dann reparieren muss. Wenn man halbwegs gute Software nutzt geht das eigentlich auch immer ganz gut.
Zuletzt saß ich vor einem MariaDB Galera Cluster, bei dem alle Member gecrasht sind. Das ist so ziemlich das übelste was passieren kann. Zum Glück war grade nicht so viel los und der Prozess gestaltet sich gut umsetzbar.
Zunächst einmal stoppen wir auch allen Knoten den Service
systemctl stop mariadb
Anschließend editieren wir die Datei /etc/my.cnf.d/server.cnf und nehmen alle Member aus der Connection-Liste wsrep_cluster_address. Zum Schluss steht nur noch
wsrep_cluster_address="gcomm://"
drin.
Anschließend starten wir den Dienst wieder. Dazu kontrollieren wir vorher die Datei /var/lib/mysql/grastate.dat ob sie den Wert safe_to_bootstrap: 1 besitzt - sollte dem nicht so sein, so ändern wir dies manuell
sed 's/^safe_to_bootstrap.*/safe_to_bootstrap: 1/' */var/lib/mysql/grastate.dat
Danach geht es weiter - auf allen Knoten!
systemctl start mariadb
Jetzt sind wir in der Lage heraus zu finden, welcher der Member zuletzt etwas sinnvolles getan hat und die höchste TransaktionsID besitzt:
mysql -u root -e "show status like 'wsrep_last_committed';"
Diesen Member schnappen wir uns und machen ihn zum Master für unseren neuen Cluster. Dazu kontrollieren wir die Datei /var/lib/mysql/grastate.dat ob sie den Wert safe_to_bootstrap: 1 besitzt - sollte dem nicht so sein, so ändern wir dies manuell
galera_new_cluster
Nun gehen wir zu den restlichen Knoten und ändern den Wert wsrep_cluster_address wieder zurück auf seinen Ursprünglichen Inhalt. Anschließend starten wir den Dienst neu und schauen im Log nach ob sich was tut und warten auf eine Meldung wie " WSREP: Recovered positi":
systemctl restart mariadb && journalctl -f -u mariadb
Quellen und Links: