Download - MySQL Absicherung und Datensicherung

Transcript
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]>