Kategorien
Linux

lokale MySQL Sicherung mit Logrotate

Logrotate kann falsch genutzt werden um eine lokale MySQL Sicherung zu erstellen.

“logrotate” ist ein sehr weit verbreitetes Linux Werkzeug welches mit den meisten Linux Distribuntionen vorkonfiguriert ausgeliefert wird.

Im Verzeichnis /var/log sind die Dateien nach dem folgenden Schema angeordnet.:

/var/log/auth.log
/var/log/auth.log.0
/var/log/auth.log.1.gz
/var/log/auth.log.2.gz
/var/log/auth.log.3.gz

Das ist wofür “logrotate” geschrieben wurde. Die Logdatei wird von /var/log/auth.log umbenannt zu /var/log/auth.log.0 und am folgenden Tag komprimiert und umbenannt in /var/log/auth.log.1.gz. Wenn mehr als vier sicherungen der Logdatei existieren werden überzählige Sicherungen gelöscht. Genau was eine lokale Datenbank-Sicherung erreichen soll.

Normalerweise mache ich meine MySQL Sicherungen mit einem Cronjob, der mir dann relativ schnell die Festplatte mit Datenbanksicherungen füllt. Da es die Aufgabe von “logrotate” ist Logdateien umzubenennen, zu komprimieren und alte Logdateien zu löschen eignet es sich auch sehr gut für eine kleine lokale Datensicherung.

Mit ein wenig chreativem falsch gebrauch des Werkzeugs “logrotate” kann es verwendet werden um MySQL Sicherungen zu rotieren.

Hier die Kurzanleitung wie ich dies erreicht habe:

Zuerst erstelle ich das Verzeichnis /var/backups/mysql/ in dem die Datensicherung der MySQL Datenbank angelegt werden soll.

Um den “logrotate” Deamon dazu zu bringen die Datenbank zu sicher erstelle ich die Datei /etc/logrotate.d/0-mysql-backup mit dem folgenden Inhalt:

/var/backups/mysql/database.sql {
     daily
     rotate 10
     missingok
     compress
     nocreate
     prerotate
          /usr/bin/mysqldump -uUSERNAME -pPASSWORD -A --events --single-transaction > /var/backups/mysql/database.sql
     endscript
}

Diese “logrotate” Konfigurationsdatei läuft täglich (daily), behält 10 Backups (rotate 10), läuft auch wenn die Datei nicht vorhanden ist (missingok), komprimiert die Daten mit dem in logrotate eingestellten Kompressionsalgorithmus (compress), erstellt im Anschluss keine neue Datei (nocreate) und erstellt vor dem lauf von “logrotate” den MySQL Dump.

Da Logrotate ohne vorhandene Datei nicht einmal den Befehl im Bereich prerotate ausführt muss die sicherungsdatei database.sql zuerst angelegt werden.

/usr/bin/touch /var/backups/mysql/database.sql

Ob wir alles richtig gemacht haben können wir auf der Shell testen.

/usr/sbin/logrotate -f -v /etc/logrotate.d/0-mysql-backup

Bei dieser Sicherung handelt es sich nicht um ein vollwertiges Backup da das Sicherungsverzeichnis /var/backups/mysql/ sich auf dem gleichen Computer (oder sogar auf der gleichen Festplatte) befindet auf der auch der MySQL Server selbst läuft. Hier kann natürlich auch vor der Sicherung das Verzeichnis gemounted werden.

Kategorien
Datenbank Linux MySQL

MySQL root Passwort vergessen 2

Da es mehrere Wege gibt ein neues root-Passwort für eine MySQL-Datenbank zu setzen, hier ein zweiter weg:

recover.sql Inhalt

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('Anminpasswort');

anschließend die Datenbank stoppen:

/etc/init.d/mysql stop

Das Passwort zurücksetzen:

mysqld_safe --init-file=~/recover.sql

Und die MySQL Datenbank neu starten:

/etc/init.d/mysql start

anschließend die Datei “recover.sql” löschen.
Das neue Passwort lautet jetzt “Anminpasswort”. (natürlich ohne die “)

Achtung: bei Systemen mit Plesk lautet der Benutzer nicht ‘root’ sondern ‘admin’, in diesem fall dort muss das Wort ´root´ in der Datei recover.sql durch das Wort ´admin´ ausgetauscht werden.

Kategorien
MySQL

MySQL Shellausgaben schöner anzeigen

Leider scrollt die Ausgaben von MySQL Befehlen viel zu schnell aus der Shell…

Zum Glück lässt sich dies das wegscrollen der MySQL-Ausgaben einfach vermeiden, indem wir uns die MySQL-Ausgaben in einen entsprechenden Texteditor übergeben lassen.

mysql> pager vim
PAGER set to 'vim'

abschalten geht einfach mit

mysql> nopager
Kategorien
Datenbank Linux MySQL

MySQL root Passwort vergessen (eins)

Es gibt viele Wege das MySQL root-Passwort neu zu vergeben. Hier die erste einfache Anleitung um das Passwort zu überschreiben.:

1.) MySQL Datenbank stoppen und anschließend ohne Netzwerkunterstützung und ohne Recheverwaltung neu starten

/etc/init.d/mysql stop
/usr/bin/mysqld_safe --skip-grant-tables --skip-networking &

2.) Zur MySQL Datenbank verbinden und in der Tabelle user in der Datenbank mysql bearbeiten.

mysql -u root
use mysql;
UPDATE user SET Password=PASSWORD("mein neues Passwort") WHERE User="root";
exit;

Alternativ kann hier das Passwort auch direkt mit dem MySQL-Shel-Befehl gesetzt werden:

mysql -c "mysqladmin --user root password 'mein neues Passwort'"

3.) MySQL beenden und den regulären MySQL Dienst wieder starten:

/etc/init.d/mysql stop
/etc/init.d/mysql start

Weitere Wege das root-Passwort für die MySQL Datenbank neu zu vergeben: