Methoden zur Absicherung
und Datensicherung eines
MySQL-Servers
Lenz Grimmer
MySQL Community Relations Manager
<lenz@sun.c...
Übersicht
• MySQL-Absicherung
 > Integrierte Funktionalität
 > Weitere Werkzeuge
 > Betriebssystem-Ebene
• MySQL Datensich...
$ whoami




     1998   2002



     2008   2010?
                    3
MySQL-Absicherung




                    4
MySQL-Absicherung
• Erster Arbeitsschritt nach Neuinstallation
• Sicherheit der Standardinstallation bereits
  relativ hoc...
Benutzerkonten
• Kennwort für den root-User
    $ mysql -u root mysql
    mysql> SET PASSWORD FOR
      root@localhost=PAS...
MySQL Sicherheitsmodell
•   Authentifizierung gegen 'user'@'host'
•   Fein granulierte Zugriffsrechte
•   Verschlüsselte P...
Prüfung der Zugriffsrechte
• Verbindungsaufbau
  > Server überprüft anhand der user-Tabelle, ob
    ein passender Eintrag ...
MySQL Sicherheitsmodell
      Hierarchische Prüfung der Privilegien

                     GRANTED – Execute Query
     US...
Tipps zur Benutzerverwaltung
• Wichtige Kommandos
   > SHOW GRANTS
   > SET PASSWORD
   > GRANT/REVOKE
   > DROP USER
 • P...
Securich
• http://www.securich.com/
• Implementiert als Stored Routines
  (ab MySQL 5.0)
• Bietet Rollen & Benutzergruppen...
Auditing mit oak-security-audit

•   Shlomi Noach's Openark kit
•   http://code.openark.org/forge/openark-kit/
•   oak-sec...
Sicherheitsfunktionen
• Nützliche Optionen in my.cfg:
 > bind-address – lauscht nur am einem TCP-
   Interface (z.B. 127.0...
Weitere Hinweise
• Keine Benutzerkennwörter im Klartext in
  Tabellen speichern
• MD5() oder SHA1(), nicht PASSWORD()
• Ve...
Views & Stored Procedures
• VIEWs können Zugriff auf bestimmte
  Spalten regeln
 > http://dev.mysql.com/doc/refman/5.0/en/...
Absicherung auf OS-Ebene
• Zugriff auf das Datenverzeichnis
  beschränken (chown/chmod)
 > Tabellen und Log-Dateien schütz...
Absicherung von Daten und Kommunikation
• Verschlüsselung der Kommunikation
 >   OpenSSL
 >   SSH tunnel
 >   OpenVPN
 >  ...
Datensicherung




                 18
Datensicherung
• Notwendigkeit
 > Hardware-Ausfall
 > Anwender- oder Applikationsfehler
• Zu sichernde Daten
 > Datenbanki...
Wann werden Sicherungen benötigt?
• Datenverlust durch Hardwarefehler
 > Absturz wg. Hardwareschaden
 > Festplattenausfall...
Was sollte gesichert werden?
• Datenbankinhalte
 > Für komplette Sicherungen
 > Logisch oder phyikalisch
• Log-Dateien
 > ...
Zeitpunkt der Datensicherung
• Regelmäßig
• Außerhalb der Lastspitzen
• Wenig veränderliche Daten weniger häufig




     ...
Speicherung der Sicherungskopien
• Auf dem DB-Server
 > Besser nicht!
 > Zumindest auf einem separaten
   Dateisystem/Volu...
Modulare Speicher-Engine-Architektur




                                       24
MySQL Datenverzeichnis
• Alle Datenbanken und Logfiles werden
  standardmäßig hier gespeichert
• Ort abhängig von der MySQ...
Das Binärlog
• Speichert alle datenverändernden SQL-
  Anweisungen (DML) oder die geänderten
  Zeilen
• Zweck:
 > Erleicht...
Log-Management
• Server rotiert die Logs
• Log-Indexdatei verzeichnet alle Logs
• SHOW MASTER LOGS – listet alle auf dem
 ...
Sicherungsmethoden
• logisch: SQL-Anweisungen
• physikalisch: Tabellendateien
• vollständig vs. inkrementell
 > Aktivieren...
Gängige MySQL-Sicherungspraktiken
• mysqldump
 > Vollständige Sicherung
   $ mysqldump mydb > mydb.20091210.sql
 > Struktu...
Sicherung von InnoDB-Tabellen
• mysqldump --single-transaction
  erstellt konsistente Sicherungskopie ohne
  Locking
• Phy...
mysqldump - Tipps
• --lock-all-tables – nützlich für
  konsistente MyISAM-Backups
 > Aber sperrt alle DML-Anweisungen
• --...
XtraBackup / Maatkit
•   https://launchpad.net/percona-xtrabackup
•   Online-Backup für InnoDB / MyISAM
•   2009-12-10: Ve...
Maatkit
• http://maatkit.org/
• Perl Script-Kollektion
• Multi-threaded SQL dumps
    > mk-parallel-dump / mk-parallel-res...
mydumper
•   https://launchpad.net/mydumper
•   C-Programm (glib, pcre)
•   Parallele Daten-Dumps
•   Leicht zu verarbeite...
Weitere Sicherungsmöglichkeiten
• Replikation
 > Sicherung erfolgt auf Slave
 > Bonus: erhöhte Verfügbarkeit
• Dateisystem...
Backups über Dateisystem-Snapshots
• Bequeme und schnelle Lösung zur
  unterbrechungsfreien Sicherung
  vollständiger Date...
Linux LVM Snapshot-Erzeugung
 Funktionsprinzip:
 mysql> FLUSH TABLES WITH READ LOCK
 $ lvcreate -s –-size=<size> --name=ba...
Das mylvmbackup-Script
• Script zur schnellen Erzeugung von MySQL-
  Backups mit LVM-Snapshots
• Snapshots werden in ein t...
Werkzeuge
•   Shell: cp, tar, cpio, gzip, zip, cron
•   rsync, unison, rsnapshot, rdiff
•   afbackup, Amanda/Zmanda, Bacul...
Wiederherstellung
• Letzte vollständige Sicherungskopie (+
  binäre Logdatei)
• Einspielen des SQL-Dumps oder Kopieren
  d...
Beispiel Wiederherstellung
• Letzte vollständige Sicherung einspielen:
  $ mysql < backup.sql
• Einspielen der inkrementel...
Vergleich der Sicherungsmethoden
• Portabilität (SQL Dumps vs.
  Tabellendateien)
• Geschwindigkeit, Speicherbedarf
• Over...
Sicherungsstrategien
• Regelmäßige Durchführung
• Binärlog aktivieren
• Log-Dateien synchronisieren (FLUSH
  LOGS)
• SQL-D...
Generelle Backup-Hinweise
• Binärlogs auf einem anderen
  Laufwerk/Dateisystem ablegen
 > Verbesserte Performance
 > Verme...
Vielen Dank!



 Fragen, Kommentare, Anregungen?
   Lenz Grimmer <lenz@sun.com>
        http://www.lenzg.net/
           T...
Nächste SlideShare
Wird geladen in …5
×

Methoden zur Absicherung und Datensicherung eines MySQL-Servers

2.758 Aufrufe

Veröffentlicht am

Slides of my presentation about MySQL Backup & Security (in german) at the SLAC09 in Berlin, Germany on 2009-12-10.

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
2.758
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
10
Aktionen
Geteilt
0
Downloads
5
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Methoden zur Absicherung und Datensicherung eines MySQL-Servers

  1. 1. Methoden zur Absicherung und Datensicherung eines MySQL-Servers Lenz Grimmer MySQL Community Relations Manager <lenz@sun.com> | @lenzgr http://lenzg.net/ Sun Microsystems 1
  2. 2. Übersicht • MySQL-Absicherung > Integrierte Funktionalität > Weitere Werkzeuge > Betriebssystem-Ebene • MySQL Datensicherung > Physikalisch vs. logisch > Methoden > Werkzeuge 2
  3. 3. $ whoami 1998 2002 2008 2010? 3
  4. 4. MySQL-Absicherung 4
  5. 5. MySQL-Absicherung • Erster Arbeitsschritt nach Neuinstallation • 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 5
  6. 6. Benutzerkonten • Kennwort für den root-User $ mysql -u root mysql mysql> 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 • Check auf old_passwords 6
  7. 7. MySQL Sicherheitsmodell • Authentifizierung gegen 'user'@'host' • Fein granulierte Zugriffsrechte • Verschlüsselte Passworte in DB • Unterstützt keine Rollen oder Gruppen • Erzwingt keine Passwort-Standards • Obsolete Privilegien können bestehen bleiben 7
  8. 8. 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 Tabellen http://dev.mysql.com/doc/refman/5.0/en/privilege-system.html 8
  9. 9. MySQL Sicherheitsmodell Hierarchische Prüfung der Privilegien  GRANTED – Execute Query USER  DENIED – check db Table  GRANTED – Execute Query DB  DENIED – check tables_priv Table  GRANTED – Execute Query TABLE  DENIED – check columns_priv Table  GRANTED – Execute Query COLUMNS  DENIED – BLOCK Query 9
  10. 10. Tipps zur Benutzerverwaltung • Wichtige Kommandos > SHOW GRANTS > SET PASSWORD > GRANT/REVOKE > DROP USER • PROCESS/SUPER/FILE -Privilegien minimieren 10
  11. 11. Securich • http://www.securich.com/ • Implementiert als Stored Routines (ab MySQL 5.0) • Bietet Rollen & Benutzergruppen • Klonen von Benutzerkonten • Flexible Zuteilung von Zugriffsrechten • Verbesserte Behandlung von Passworten (Länge, Komplexität, Historie, Ablauf) • Schnelles Blockieren von Konten 11
  12. 12. Auditing mit oak-security-audit • Shlomi Noach's Openark kit • http://code.openark.org/forge/openark-kit/ • oak-security-audit • Regelmäßige, automatische Überprüfung > Nicht-lokale root-Konten > Anonyme Benutzerkonten > Konten ohne Hostname > Konten mit leeren oder identischen Passworten > Nicht-root Benutzer mit vollen Privilegien 12
  13. 13. 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) > secure_auth – Erfordert 4.1 Authentifizierung > max_connection_errors – blockiert bei zu vielen fehlerhaften Verbindungsversuchen 13
  14. 14. 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 14
  15. 15. 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 15
  16. 16. 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 16
  17. 17. Absicherung von Daten und Kommunikation • Verschlüsselung der Kommunikation > OpenSSL > SSH tunnel > OpenVPN > Cipe • Verschlüsselung Daten-Verzeichnis > cryptoloop devices > dm_crypt kernel module 17
  18. 18. Datensicherung 18
  19. 19. Datensicherung • Notwendigkeit > Hardware-Ausfall > Anwender- oder Applikationsfehler • Zu sichernde Daten > Datenbankinhalte > Log-Dateien • Weitere Aspekte > Sicherungszeitpunkt > Ort der Sicherung und Aufbewahrung 19
  20. 20. 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 20
  21. 21. 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 21
  22. 22. Zeitpunkt der Datensicherung • Regelmäßig • Außerhalb der Lastspitzen • Wenig veränderliche Daten weniger häufig 22
  23. 23. 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 23
  24. 24. Modulare Speicher-Engine-Architektur 24
  25. 25. 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 25
  26. 26. Das Binärlog • Speichert alle datenverändernden SQL- Anweisungen (DML) oder die geänderten Zeilen • Zweck: > Erleichtert Datenwiederherstellung > Replikation • Enthält zusätzliche Informationen (Zeitstempel, Laufzeit) • Binär codiert, mysqlbinlog zum decodieren • Aktiviert mit --log-bin[=datei] 26
  27. 27. 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 27
  28. 28. Sicherungsmethoden • logisch: SQL-Anweisungen • physikalisch: Tabellendateien • vollständig vs. inkrementell > Aktivieren des Binärlogs > Zeitpunktbezogene Wiederherstellung 28
  29. 29. Gängige MySQL-Sicherungspraktiken • mysqldump > Vollständige Sicherung $ mysqldump mydb > mydb.20091210.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 29
  30. 30. 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 30
  31. 31. mysqldump - Tipps • --lock-all-tables – nützlich für konsistente MyISAM-Backups > Aber sperrt alle DML-Anweisungen • --flush-logs – synchronisiert das Binärlog (Checkpointing) 31
  32. 32. XtraBackup / Maatkit • https://launchpad.net/percona-xtrabackup • Online-Backup für InnoDB / MyISAM • 2009-12-10: Version 1.0 (incl. Windows) • In my.cnf: > [xtrabackup] target_dir = /home/backups • Backup-Kommando: > xtrabackup –backup 32
  33. 33. Maatkit • http://maatkit.org/ • Perl Script-Kollektion • Multi-threaded SQL dumps > mk-parallel-dump / mk-parallel-restore • Ein Unterverzeichnis pro DB • Backups können „gestückelt“ werden • Binlog-Position wird mitgesichert • Reguläre Ausdrücke zur Selektion 33
  34. 34. mydumper • https://launchpad.net/mydumper • C-Programm (glib, pcre) • Parallele Daten-Dumps • Leicht zu verarbeitende Ausgabe • Reguläre Ausdrücke • Konsistenz > Snapshot > Master/Slave Binlog-Positionen 34
  35. 35. 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 API http://forge.mysql.com/wiki/OnlineBackup 35
  36. 36. 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) 36
  37. 37. 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 37
  38. 38. 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/ 38
  39. 39. 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?) 39
  40. 40. 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 40
  41. 41. 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 41
  42. 42. Vergleich der Sicherungsmethoden • Portabilität (SQL Dumps vs. Tabellendateien) • Geschwindigkeit, Speicherbedarf • Overhead und Beeinträchtigung des Betriebs 42
  43. 43. 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 43
  44. 44. 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! 44
  45. 45. Vielen Dank! Fragen, Kommentare, Anregungen? Lenz Grimmer <lenz@sun.com> http://www.lenzg.net/ Twitter: @lenzgr 45

×