35
1 Sun Microsystems Methoden zur Absicherung und Datensicherung eines MySQL- Servers Lenz Grimmer MySQL Community Relations Manager

MySQL Absicherung und Datensicherung

Embed Size (px)

DESCRIPTION

Talk about MySQL Backup and Security, presented at the amoocon 2009 in Rostock, Germany

Citation preview

Page 1: MySQL Absicherung und Datensicherung

1

Sun Microsystems

Methoden zur Absicherung und Datensicherung eines MySQL-Servers

Lenz GrimmerMySQL Community Relations Manager

Page 2: MySQL Absicherung und Datensicherung

2

Übersicht

• Verbesserung der Server-Sicherheit> Integrierte Funktionalität> Auf Betriebssystem-Ebene

• MySQL Datensicherung> physikalisch vs. logisch> Methoden und Werkzeuge

Page 3: MySQL Absicherung und Datensicherung

3

MySQL-Absicherung

• Wichtige Arbeitsschritte nach Erstinstallation

• Sicherheit der Standardinstallation bereits relativ hoch

• Zusätzliche Sicherungsmaßnahmen des Betriebssystems flankieren die im Server enthaltenen Funktionen

http://dev.mysql.com/doc/refman/5.0/en/security.html

Page 4: MySQL Absicherung und Datensicherung

4

Benutzerkonten

• Kennwort für den root-User$ mysql ­u root mysqlmysql> SET PASSWORD FOR root@localhost=PASSWORD('new_password');

• Entfernen des anonymen Benutzers• Entfernen der test-Datenbank

• Script: mysql_secure_installation

• Konten: nur die erforderlichen• Privilegien: nur die notwendigen

Page 5: MySQL Absicherung und Datensicherung

5

Prüfung der Zugriffsrechte

• Verbindungsaufbau> Server überprüft anhand der user-Tabelle, ob

ein passender Eintrag für username, host und passwort existiert

• SQL-Abfrage> Server überprüft Privilegien anhand der user, db, tables_priv and column_privs Tabellenhttp://dev.mysql.com/doc/refman/5.0/en/privilege-system.html

Page 6: MySQL Absicherung und Datensicherung

6

MySQL-Zugangskontrolle

Query

true

false

db

true

Query executed

Permission

denied

false

columns_priv

false

tables_priv

false

user

true

true

Page 7: MySQL Absicherung und Datensicherung

7

Sicherheitsfunktionen

• Nützliche Optionen in my.cfg:> bind-address – lauscht nur am einem TCP-

Interface (z.B. 127.0.0.1)> skip-networking – Kommunikation nur

lokal (via socket-Datei)

• Wichtige SQL-Anweisungen: SHOW GRANTS, SET PASSWORD, GRANT/REVOKE

• PROCESS/SUPER/FILE Privilegien minimieren

Page 8: MySQL Absicherung und Datensicherung

8

Weitere Hinweise

• Keine Benutzerkennwörter im Klartext in Tabellen speichern

• MD5() oder SHA1(), nicht PASSWORD()

• Verschlüsselung (SSL, SSH, VPN)• LOAD DATA LOCAL deaktivieren:--local-infile=0

• Nie mysqld als root-Benutzer ausführen

• History-Datei ~/.mysql_history absichern oder löschen

• MySQL root-User umbenennen

Page 9: MySQL Absicherung und Datensicherung

9

Views & Stored Procedures

• VIEWs können Zugriff auf bestimmte Spalten regeln> http://dev.mysql.com/doc/refman/5.0/en/views.html

• Stored Procedures schirmen die realen Tabellen vor direkten Zugriffen durch Anwender und Applikationen ab> http://dev.mysql.com/doc/refman/5.0/en/stored-procedures.html

• Seit MySQL 5.0 enthalten

Page 10: MySQL Absicherung und Datensicherung

10

Absicherung auf OS-Ebene

• Zugriff auf das Datenverzeichnis beschränken (chown/chmod)> Tabellen und Log-Dateien schützen

• Keine Shell-Konten auf dem DB-Server• Kein direkter Zugriff auf Port 3306 aus

dem Internet!• Firewall/DMZ/iptables• SELinux, AppArmor, RBAC• chroot(), Zones/Container, VMs

Page 11: MySQL Absicherung und Datensicherung

11

Datensicherung

• Notwendigkeit> Hardware-Ausfall> Anwender- oder Applikationsfehler

• Zu sichernde Daten> Datenbankinhalte> Log-Dateien

• Weitere Aspekte> Sicherungszeitpunkt> Ort der Sicherung und Aufbewahrung

Page 12: MySQL Absicherung und Datensicherung

12

Wann werden Sicherungen benötigt?

• Datenverlust durch Hardwarefehler> Absturz wg. Hardwareschaden> Festplattenausfall> Defekte Hardware

• Anwender- und Applikationsfehler> DROP TABLE oder DELETE FROM ohne WHERE-Klausel

> Development vs. Production DB> Öffnen der Tabellendateien mit der falschen

Anwendung

Page 13: MySQL Absicherung und Datensicherung

13

Was sollte gesichert werden?

• Datenbankinhalte> Für komplette Sicherungen> Logisch oder phyikalisch

• Log-Dateien> Für inkrementelle Sicherungen> Wiederherstellungszeitpunkte

(Point in time recovery)

• Konfigurationsdateien> /etc/my.cnf> Cron-Jobs

Page 14: MySQL Absicherung und Datensicherung

14

Zeitpunkt der Datensicherung

• Regelmäßig• Außerhalb der Lastspitzen• Wenig veränderliche Daten weniger häufig

Page 15: MySQL Absicherung und Datensicherung

15

Speicherung der Sicherungskopien

• Auf dem DB-Server> Besser nicht!> Zumindest auf einem separaten Dateisystem/

Volume oder Laufwerk

• Kopiert auf einen anderen Server> Onsite oder offsite

• Sicherung/Archivierung auf Band/Wechselplatte

• An verteilten Orten

Page 16: MySQL Absicherung und Datensicherung

16

Modulare Speicher-Engine-Architektur

Page 17: MySQL Absicherung und Datensicherung

17

MySQL Datenverzeichnis

• Alle Datenbanken und Logfiles werden standardmäßig hier gespeichert

• Ort abhängig von der MySQL distribution (einkompilierter Wert):> /usr/local/mysql/data (tarball)> /var/lib/mysql (RPM)

• Mit --datadir=/pfad/zum/datadir anpaßbar

• SHOW VARIABLES LIKE 'datadir';

• InnoDB: innodb_data_home_dir

Page 18: MySQL Absicherung und Datensicherung

18

Das Binärlog

• Speichert alle datenverändernden SQL-Anweisungen (DML) z.B. CREATE, INSERT, DELETE, DROP, UPDATE

• Zweck:> Erleichtert Datenwiederherstellung> Replikation

• Enthält zusätzliche Informationen (Zeitstempel, Laufzeit)

• Binär codiert, mysqlbinlog zum decodieren

• Aktiviert mit --log-bin[=datei]

Page 19: MySQL Absicherung und Datensicherung

19

Log-Management

• Server rotiert die Logs• Log-Indexdatei verzeichnet alle Logs• SHOW MASTER LOGS – listet alle auf dem

Server vorhandenen logs• FLUSH LOGS – rotiert logs

• RESET MASTER – löscht alle binärlogs

• PURGE MASTER – löscht alle binärlogs bis zu einem best. Zeitpunkt

Page 20: MySQL Absicherung und Datensicherung

20

Sicherungsmethoden

• logisch: SQL-Anweisungen• physikalisch: Tabellendateien• vollständig vs. inkrementell

> Aktivieren des Binärlogs> Zeitpunktbezogene Wiederherstellung

Page 21: MySQL Absicherung und Datensicherung

21

Gängige MySQL-Sicherungspraktiken

• mysqldump> Vollständige Sicherung$ mysqldump mydb > mydb.20050925.sql

> Struktur und/oder Daten als SQL-Anweisungen: CREATE TABLE, INSERT

> Einzelne Tabellen oder Datenbanken möglich> portabel, aber unhandlich bei großen

Datenmengen

• Mit anderen Unix-Werkzeugen kombinierbar (Piping)$ mysqldump ­­opt world | mysql ­h remote.host.com world

Page 22: MySQL Absicherung und Datensicherung

22

mysqldump - Tipps

• --lock-all-tables – nützlich für konsistente MyISAM-Backups> Aber sperrt alle DML-Anweisungen

• --flush-logs – synchronisiert das Binärlog (Checkpointing)

Page 23: MySQL Absicherung und Datensicherung

23

Sicherung von InnoDB-Tabellen

• mysqldump --single-transaction erstellt konsistente Sicherungskopie ohne Locking

• Physikalische Sicherung> MySQL-Server herunterfahren!> Datenfiles, InnoDB log-Dateien, .frm-Dateien

sichern> Server wieder starten

Page 24: MySQL Absicherung und Datensicherung

24

XtraBackup / Maatkit

• https://launchpad.net/percona-xtrabackup• Online-Backup für InnoDB• In my.cnf:

> [xtrabackup]target_dir = /home/backups

• Backup-Kommando:> xtrabackup –backup

• http://maatkit.org/• Multi-threaded Perl wrapper scripts

> mk-parallel-dump / mk-parallel-restore

Page 25: MySQL Absicherung und Datensicherung

25

Weitere Sicherungsmöglichkeiten

• Replikation> Sicherung erfolgt auf Slave> Bonus: erhöhte Verfügbarkeit

• Dateisystem-Snapshots> „semi-hot“> Linux: LVM (mylvmbackup)> Solaris: ZFS (mysql-snapback)

• MySQL 6.0: Online Backup APIhttp://forge.mysql.com/wiki/OnlineBackup

Page 26: MySQL Absicherung und Datensicherung

26

Backups über Dateisystem-Snapshots

• Bequeme und schnelle Lösung zur unterbrechungsfreien Sicherung vollständiger Datenbanken

• Geringer Platzbedarf des LVM-Snapshots (10-15% reichen üblicherweise aus)

• Backup der Dateien auf dem Snapshot Volumen mit beliebigen Tools

• Beeinträchtigung der I/O Performance(Linux LVM)

Page 27: MySQL Absicherung und Datensicherung

27

Linux LVM Snapshot-Erzeugung

Funktionsprinzip:

mysql> FLUSH TABLES WITH READ LOCK$ lvcreate -s –-size=<size> --name=backup <LV>mysql> UNLOCK TABLES$ mount /dev/<VG>/backup /mnt$ tar czvf backup.tar.gz /mnt/*$ umount /mnt$ lvremove /dev/<VG>/backup

Page 28: MySQL Absicherung und Datensicherung

28

Das mylvmbackup-Script

• Script zur schnellen Erzeugung von MySQL-Backups mit LVM-Snapshots

• Snapshots werden in ein temporäres Verzeichnis eingehängt, die Daten werden mit tar,rsync oder rsnap gesichert

• Archivnames mit Zeitstempeln ermöglichen wiederholte Backup-Läufe ohne Überschreiben

• Kann vor dem Backup InnoDB-Wiederherstellung auf dem Snapshot durchführen

• Benötigt Perl, DBI and DBD::mysql

• http://www.lenzg.net/mylvmbackup/

Page 29: MySQL Absicherung und Datensicherung

29

Werkzeuge

• Shell: cp, tar, cpio, gzip, zip, cron• rsync, unison, rsnapshot, rdiff• afbackup, Amanda/Zmanda, Bacula• Nicht auf live-Daten anwenden!

(ma.gnolia.com anyone?)

Page 30: MySQL Absicherung und Datensicherung

30

Wiederherstellung

• Letzte vollständige Sicherungskopie (+ binäre Logdatei)

• Einspielen des SQL-Dumps oder Kopieren der gesicherten Tabellendateien

• Wiederherstellung eines bestimmten Zeitpunkts (point-in-time recovery) durch Zeitstempel im Binärlog möglich

Page 31: MySQL Absicherung und Datensicherung

31

Beispiel Wiederherstellung

• Letzte vollständige Sicherung einspielen:$ mysql < backup.sql

• Einspielen der inkrementellen Änderungen seit der letzten vollständigen Sicherung:$ mysqlbinlog hostname-bin.000001 | mysql

Page 32: MySQL Absicherung und Datensicherung

32

Vergleich der Sicherungsmethoden

• Portabilität (SQL Dumps vs. Tabellendateien)

• Geschwindigkeit, Speicherbedarf• Overhead und Beeinträchtigung des

Betriebs

Page 33: MySQL Absicherung und Datensicherung

33

Sicherungsstrategien

• Regelmäßige Durchführung• Binärlog aktivieren• Log-Dateien synchronisieren (FLUSH

LOGS)• SQL-Dumps konsistent und verständlich

benennen (z.B. mit Zeitstempel im Dateinamen)

• Aufbewahrung der Sicherungen auf anderen Dateisystemen

Page 34: MySQL Absicherung und Datensicherung

34

Generelle Backup-Hinweise

• Binärlogs auf einem anderen Laufwerk/Dateisystem ablegen> Verbesserte Performance> Vermeidet vollständigen Datenverlust

• Backups auf Vollständigkeit/Korrektheit überprüfen

• Prozeduren und Zeitpläne für Backups und Wiederherstellung festlegen

• Testen, ob sie auch wirklich funktionieren!

Page 35: MySQL Absicherung und Datensicherung

35

Vielen Dank!

Fragen, Kommentare, Anregungen?Lenz Grimmer <[email protected]>