SlideShare uma empresa Scribd logo
1 de 45
Baixar para ler offline
Methoden zur Absicherung
und Datensicherung eines
MySQL-Servers
Lenz Grimmer
MySQL Community Relations Manager
<lenz@sun.com> | @lenzgr
http://lenzg.net/


Sun Microsystems
                                    1
Übersicht
• MySQL-Absicherung
 > Integrierte Funktionalität
 > Weitere Werkzeuge
 > Betriebssystem-Ebene
• MySQL Datensicherung
 > Physikalisch vs. logisch
 > Methoden
 > Werkzeuge




                                2
$ whoami




     1998   2002



     2008   2010?
                    3
MySQL-Absicherung




                    4
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
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
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
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
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
Tipps zur Benutzerverwaltung
• Wichtige Kommandos
   > SHOW GRANTS
   > SET PASSWORD
   > GRANT/REVOKE
   > DROP USER
 • PROCESS/SUPER/FILE -Privilegien
     minimieren



                                     10
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
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
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
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
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
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
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
Datensicherung




                 18
Datensicherung
• Notwendigkeit
 > Hardware-Ausfall
 > Anwender- oder Applikationsfehler
• Zu sichernde Daten
 > Datenbankinhalte
 > Log-Dateien
• Weitere Aspekte
 > Sicherungszeitpunkt
 > Ort der Sicherung und Aufbewahrung


                                        19
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
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
Zeitpunkt der Datensicherung
• Regelmäßig
• Außerhalb der Lastspitzen
• Wenig veränderliche Daten weniger häufig




                                             22
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
Modulare Speicher-Engine-Architektur




                                       24
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
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
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
Sicherungsmethoden
• logisch: SQL-Anweisungen
• physikalisch: Tabellendateien
• vollständig vs. inkrementell
 > Aktivieren des Binärlogs
 > Zeitpunktbezogene Wiederherstellung




                                         28
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
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
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
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
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
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
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
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
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
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
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
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
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
Vergleich der Sicherungsmethoden
• Portabilität (SQL Dumps vs.
  Tabellendateien)
• Geschwindigkeit, Speicherbedarf
• Overhead und Beeinträchtigung des
  Betriebs




                                      42
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
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
Vielen Dank!



 Fragen, Kommentare, Anregungen?
   Lenz Grimmer <lenz@sun.com>
        http://www.lenzg.net/
           Twitter: @lenzgr


                                   45

Mais conteúdo relacionado

Destaque

Tilkee - Tutoriel pour le gestionnaire de contacts
Tilkee - Tutoriel pour le gestionnaire de contactsTilkee - Tutoriel pour le gestionnaire de contacts
Tilkee - Tutoriel pour le gestionnaire de contactsSylvain Tillon
 
El Arte Del Liderazgo Panama 2009
El Arte Del Liderazgo Panama 2009El Arte Del Liderazgo Panama 2009
El Arte Del Liderazgo Panama 2009hgeager
 
Deutschland 2049 Auf dem Weg zu einer nachhaltigen Rohstoffwirtschaft - Ein s...
Deutschland 2049 Auf dem Weg zu einer nachhaltigen Rohstoffwirtschaft - Ein s...Deutschland 2049 Auf dem Weg zu einer nachhaltigen Rohstoffwirtschaft - Ein s...
Deutschland 2049 Auf dem Weg zu einer nachhaltigen Rohstoffwirtschaft - Ein s...Oeko-Institut
 
2172 Beduerfnisse
2172 Beduerfnisse2172 Beduerfnisse
2172 Beduerfnisseurmel801
 
Vernetzte Unternehmen - Warum sich Unternehmen ändern müssen #bcrm14
Vernetzte Unternehmen - Warum sich Unternehmen ändern müssen #bcrm14Vernetzte Unternehmen - Warum sich Unternehmen ändern müssen #bcrm14
Vernetzte Unternehmen - Warum sich Unternehmen ändern müssen #bcrm14Frank Hamm
 
Libriño infantil os alimentos
Libriño infantil os alimentosLibriño infantil os alimentos
Libriño infantil os alimentosMarta Pérez Lage
 
Walpurgisnacht Power Point
Walpurgisnacht Power PointWalpurgisnacht Power Point
Walpurgisnacht Power Pointguest29dd424
 
Qué es lo que caracteriza a los seres vivos
Qué es lo que caracteriza a los seres vivosQué es lo que caracteriza a los seres vivos
Qué es lo que caracteriza a los seres vivosLordSedioS
 
11 alejandro h tintin
11 alejandro h tintin11 alejandro h tintin
11 alejandro h tintinpacitina
 
Salto Exploration Signature
Salto Exploration SignatureSalto Exploration Signature
Salto Exploration SignatureAnnie
 
Couleurs pour les yeux
Couleurs pour les yeuxCouleurs pour les yeux
Couleurs pour les yeuxhotinhtam2005
 

Destaque (18)

La revolucion
La revolucionLa revolucion
La revolucion
 
Configurar modulo CE Teams en SugarCRM
Configurar modulo CE Teams en SugarCRMConfigurar modulo CE Teams en SugarCRM
Configurar modulo CE Teams en SugarCRM
 
Tilkee - Tutoriel pour le gestionnaire de contacts
Tilkee - Tutoriel pour le gestionnaire de contactsTilkee - Tutoriel pour le gestionnaire de contacts
Tilkee - Tutoriel pour le gestionnaire de contacts
 
Kai Taufe
Kai TaufeKai Taufe
Kai Taufe
 
El Arte Del Liderazgo Panama 2009
El Arte Del Liderazgo Panama 2009El Arte Del Liderazgo Panama 2009
El Arte Del Liderazgo Panama 2009
 
Deutschland 2049 Auf dem Weg zu einer nachhaltigen Rohstoffwirtschaft - Ein s...
Deutschland 2049 Auf dem Weg zu einer nachhaltigen Rohstoffwirtschaft - Ein s...Deutschland 2049 Auf dem Weg zu einer nachhaltigen Rohstoffwirtschaft - Ein s...
Deutschland 2049 Auf dem Weg zu einer nachhaltigen Rohstoffwirtschaft - Ein s...
 
2172 Beduerfnisse
2172 Beduerfnisse2172 Beduerfnisse
2172 Beduerfnisse
 
Wiki
WikiWiki
Wiki
 
Vernetzte Unternehmen - Warum sich Unternehmen ändern müssen #bcrm14
Vernetzte Unternehmen - Warum sich Unternehmen ändern müssen #bcrm14Vernetzte Unternehmen - Warum sich Unternehmen ändern müssen #bcrm14
Vernetzte Unternehmen - Warum sich Unternehmen ändern müssen #bcrm14
 
Sap
SapSap
Sap
 
Libriño infantil os alimentos
Libriño infantil os alimentosLibriño infantil os alimentos
Libriño infantil os alimentos
 
Crear un blog en blogger
Crear un blog en bloggerCrear un blog en blogger
Crear un blog en blogger
 
Walpurgisnacht Power Point
Walpurgisnacht Power PointWalpurgisnacht Power Point
Walpurgisnacht Power Point
 
Qué es lo que caracteriza a los seres vivos
Qué es lo que caracteriza a los seres vivosQué es lo que caracteriza a los seres vivos
Qué es lo que caracteriza a los seres vivos
 
Torneo
TorneoTorneo
Torneo
 
11 alejandro h tintin
11 alejandro h tintin11 alejandro h tintin
11 alejandro h tintin
 
Salto Exploration Signature
Salto Exploration SignatureSalto Exploration Signature
Salto Exploration Signature
 
Couleurs pour les yeux
Couleurs pour les yeuxCouleurs pour les yeux
Couleurs pour les yeux
 

Mais de Lenz Grimmer

Ceph Management and Monitoring - DevConf.CZ - 2019-01-26
Ceph Management and Monitoring -  DevConf.CZ - 2019-01-26Ceph Management and Monitoring -  DevConf.CZ - 2019-01-26
Ceph Management and Monitoring - DevConf.CZ - 2019-01-26Lenz Grimmer
 
Managing and Monitoring Ceph - Ceph Day Berlin - 2018-11-12
Managing and Monitoring Ceph - Ceph Day Berlin - 2018-11-12Managing and Monitoring Ceph - Ceph Day Berlin - 2018-11-12
Managing and Monitoring Ceph - Ceph Day Berlin - 2018-11-12Lenz Grimmer
 
Ceph Management and Monitoring with Dashboard V2 - Cephalocon 2018-03-23
Ceph Management and Monitoring with Dashboard V2 - Cephalocon 2018-03-23Ceph Management and Monitoring with Dashboard V2 - Cephalocon 2018-03-23
Ceph Management and Monitoring with Dashboard V2 - Cephalocon 2018-03-23Lenz Grimmer
 
Ceph and Storage Management with openATTIC - FOSDEM 2017-02-05
Ceph and Storage Management with openATTIC - FOSDEM 2017-02-05Ceph and Storage Management with openATTIC - FOSDEM 2017-02-05
Ceph and Storage Management with openATTIC - FOSDEM 2017-02-05Lenz Grimmer
 
Ceph and Storage Management with openATTIC - Ceph Day Munich - 2016-09-23
Ceph and Storage Management with openATTIC - Ceph Day Munich - 2016-09-23Ceph and Storage Management with openATTIC - Ceph Day Munich - 2016-09-23
Ceph and Storage Management with openATTIC - Ceph Day Munich - 2016-09-23Lenz Grimmer
 
Ceph and Storage Management in openATTIC - solutions.hamburg - 2016-09-09
Ceph and Storage Management in openATTIC - solutions.hamburg - 2016-09-09Ceph and Storage Management in openATTIC - solutions.hamburg - 2016-09-09
Ceph and Storage Management in openATTIC - solutions.hamburg - 2016-09-09Lenz Grimmer
 
Storage Monitoring in openATTIC - Monitoring Workshop - 2016-09-07
Storage Monitoring in openATTIC - Monitoring Workshop - 2016-09-07Storage Monitoring in openATTIC - Monitoring Workshop - 2016-09-07
Storage Monitoring in openATTIC - Monitoring Workshop - 2016-09-07Lenz Grimmer
 
Ceph and Storage Management with openATTIC - FrOSCon 2016-08-21
Ceph and Storage Management with openATTIC - FrOSCon 2016-08-21Ceph and Storage Management with openATTIC - FrOSCon 2016-08-21
Ceph and Storage Management with openATTIC - FrOSCon 2016-08-21Lenz Grimmer
 
Ceph and Storage Management with openATTIC - SUSE MOST - 2016-06-07
Ceph and Storage Management with openATTIC - SUSE MOST - 2016-06-07Ceph and Storage Management with openATTIC - SUSE MOST - 2016-06-07
Ceph and Storage Management with openATTIC - SUSE MOST - 2016-06-07Lenz Grimmer
 
Ceph and Storage Management with openATTIC, Ceph Tech Talks 2016-06-23
Ceph and Storage Management with openATTIC, Ceph Tech Talks 2016-06-23Ceph and Storage Management with openATTIC, Ceph Tech Talks 2016-06-23
Ceph and Storage Management with openATTIC, Ceph Tech Talks 2016-06-23Lenz Grimmer
 
Ceph and Storage Management with openATTIC, openSUSE Conference 2016-06-23
Ceph and Storage Management with openATTIC, openSUSE Conference 2016-06-23Ceph and Storage Management with openATTIC, openSUSE Conference 2016-06-23
Ceph and Storage Management with openATTIC, openSUSE Conference 2016-06-23Lenz Grimmer
 
Storage Management mit openAttic - LinuxDay - 2015-11-21
Storage Management mit openAttic - LinuxDay - 2015-11-21Storage Management mit openAttic - LinuxDay - 2015-11-21
Storage Management mit openAttic - LinuxDay - 2015-11-21Lenz Grimmer
 
Flexibles Storage Management unter Linux mit OpenATTIC - Kielux 2015-09-18
Flexibles Storage Management unter Linux mit OpenATTIC - Kielux 2015-09-18Flexibles Storage Management unter Linux mit OpenATTIC - Kielux 2015-09-18
Flexibles Storage Management unter Linux mit OpenATTIC - Kielux 2015-09-18Lenz Grimmer
 
The Evolution of Storage on Linux - FrOSCon - 2015-08-22
The Evolution of Storage on Linux - FrOSCon - 2015-08-22The Evolution of Storage on Linux - FrOSCon - 2015-08-22
The Evolution of Storage on Linux - FrOSCon - 2015-08-22Lenz Grimmer
 
MySQL 5.5 Replication Enhancements – An Overview (FOSDEM 2011)
MySQL 5.5 Replication Enhancements – An Overview (FOSDEM 2011)MySQL 5.5 Replication Enhancements – An Overview (FOSDEM 2011)
MySQL 5.5 Replication Enhancements – An Overview (FOSDEM 2011)Lenz Grimmer
 
What's new in MySQL 5.5? FOSDEM 2011
What's new in MySQL 5.5? FOSDEM 2011What's new in MySQL 5.5? FOSDEM 2011
What's new in MySQL 5.5? FOSDEM 2011Lenz Grimmer
 
MySQL High Availability Solutions
MySQL High Availability SolutionsMySQL High Availability Solutions
MySQL High Availability SolutionsLenz Grimmer
 
How to build your own Quadrocopter
How to build your own QuadrocopterHow to build your own Quadrocopter
How to build your own QuadrocopterLenz Grimmer
 
What's new in MySQL 5.5?
What's new in MySQL 5.5?What's new in MySQL 5.5?
What's new in MySQL 5.5?Lenz Grimmer
 

Mais de Lenz Grimmer (20)

Ceph Management and Monitoring - DevConf.CZ - 2019-01-26
Ceph Management and Monitoring -  DevConf.CZ - 2019-01-26Ceph Management and Monitoring -  DevConf.CZ - 2019-01-26
Ceph Management and Monitoring - DevConf.CZ - 2019-01-26
 
Managing and Monitoring Ceph - Ceph Day Berlin - 2018-11-12
Managing and Monitoring Ceph - Ceph Day Berlin - 2018-11-12Managing and Monitoring Ceph - Ceph Day Berlin - 2018-11-12
Managing and Monitoring Ceph - Ceph Day Berlin - 2018-11-12
 
Ceph Management and Monitoring with Dashboard V2 - Cephalocon 2018-03-23
Ceph Management and Monitoring with Dashboard V2 - Cephalocon 2018-03-23Ceph Management and Monitoring with Dashboard V2 - Cephalocon 2018-03-23
Ceph Management and Monitoring with Dashboard V2 - Cephalocon 2018-03-23
 
Ceph and Storage Management with openATTIC - FOSDEM 2017-02-05
Ceph and Storage Management with openATTIC - FOSDEM 2017-02-05Ceph and Storage Management with openATTIC - FOSDEM 2017-02-05
Ceph and Storage Management with openATTIC - FOSDEM 2017-02-05
 
Ceph and Storage Management with openATTIC - Ceph Day Munich - 2016-09-23
Ceph and Storage Management with openATTIC - Ceph Day Munich - 2016-09-23Ceph and Storage Management with openATTIC - Ceph Day Munich - 2016-09-23
Ceph and Storage Management with openATTIC - Ceph Day Munich - 2016-09-23
 
Ceph and Storage Management in openATTIC - solutions.hamburg - 2016-09-09
Ceph and Storage Management in openATTIC - solutions.hamburg - 2016-09-09Ceph and Storage Management in openATTIC - solutions.hamburg - 2016-09-09
Ceph and Storage Management in openATTIC - solutions.hamburg - 2016-09-09
 
Storage Monitoring in openATTIC - Monitoring Workshop - 2016-09-07
Storage Monitoring in openATTIC - Monitoring Workshop - 2016-09-07Storage Monitoring in openATTIC - Monitoring Workshop - 2016-09-07
Storage Monitoring in openATTIC - Monitoring Workshop - 2016-09-07
 
Ceph and Storage Management with openATTIC - FrOSCon 2016-08-21
Ceph and Storage Management with openATTIC - FrOSCon 2016-08-21Ceph and Storage Management with openATTIC - FrOSCon 2016-08-21
Ceph and Storage Management with openATTIC - FrOSCon 2016-08-21
 
Ceph and Storage Management with openATTIC - SUSE MOST - 2016-06-07
Ceph and Storage Management with openATTIC - SUSE MOST - 2016-06-07Ceph and Storage Management with openATTIC - SUSE MOST - 2016-06-07
Ceph and Storage Management with openATTIC - SUSE MOST - 2016-06-07
 
Ceph and Storage Management with openATTIC, Ceph Tech Talks 2016-06-23
Ceph and Storage Management with openATTIC, Ceph Tech Talks 2016-06-23Ceph and Storage Management with openATTIC, Ceph Tech Talks 2016-06-23
Ceph and Storage Management with openATTIC, Ceph Tech Talks 2016-06-23
 
Ceph and Storage Management with openATTIC, openSUSE Conference 2016-06-23
Ceph and Storage Management with openATTIC, openSUSE Conference 2016-06-23Ceph and Storage Management with openATTIC, openSUSE Conference 2016-06-23
Ceph and Storage Management with openATTIC, openSUSE Conference 2016-06-23
 
Storage Management mit openAttic - LinuxDay - 2015-11-21
Storage Management mit openAttic - LinuxDay - 2015-11-21Storage Management mit openAttic - LinuxDay - 2015-11-21
Storage Management mit openAttic - LinuxDay - 2015-11-21
 
Flexibles Storage Management unter Linux mit OpenATTIC - Kielux 2015-09-18
Flexibles Storage Management unter Linux mit OpenATTIC - Kielux 2015-09-18Flexibles Storage Management unter Linux mit OpenATTIC - Kielux 2015-09-18
Flexibles Storage Management unter Linux mit OpenATTIC - Kielux 2015-09-18
 
The Evolution of Storage on Linux - FrOSCon - 2015-08-22
The Evolution of Storage on Linux - FrOSCon - 2015-08-22The Evolution of Storage on Linux - FrOSCon - 2015-08-22
The Evolution of Storage on Linux - FrOSCon - 2015-08-22
 
MySQL 5.5 Replication Enhancements – An Overview (FOSDEM 2011)
MySQL 5.5 Replication Enhancements – An Overview (FOSDEM 2011)MySQL 5.5 Replication Enhancements – An Overview (FOSDEM 2011)
MySQL 5.5 Replication Enhancements – An Overview (FOSDEM 2011)
 
What's new in MySQL 5.5? FOSDEM 2011
What's new in MySQL 5.5? FOSDEM 2011What's new in MySQL 5.5? FOSDEM 2011
What's new in MySQL 5.5? FOSDEM 2011
 
MySQL High Availability Solutions
MySQL High Availability SolutionsMySQL High Availability Solutions
MySQL High Availability Solutions
 
How to build your own Quadrocopter
How to build your own QuadrocopterHow to build your own Quadrocopter
How to build your own Quadrocopter
 
What's new in MySQL 5.5?
What's new in MySQL 5.5?What's new in MySQL 5.5?
What's new in MySQL 5.5?
 
ZFS unter Linux
ZFS unter LinuxZFS unter Linux
ZFS unter Linux
 

Methoden zur Absicherung und Datensicherung eines MySQL-Servers

  • 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. Übersicht • MySQL-Absicherung > Integrierte Funktionalität > Weitere Werkzeuge > Betriebssystem-Ebene • MySQL Datensicherung > Physikalisch vs. logisch > Methoden > Werkzeuge 2
  • 3. $ whoami 1998 2002 2008 2010? 3
  • 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. 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. 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. 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. 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. Tipps zur Benutzerverwaltung • Wichtige Kommandos > SHOW GRANTS > SET PASSWORD > GRANT/REVOKE > DROP USER • PROCESS/SUPER/FILE -Privilegien minimieren 10
  • 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. 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. 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. 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. 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. 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. 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
  • 19. Datensicherung • Notwendigkeit > Hardware-Ausfall > Anwender- oder Applikationsfehler • Zu sichernde Daten > Datenbankinhalte > Log-Dateien • Weitere Aspekte > Sicherungszeitpunkt > Ort der Sicherung und Aufbewahrung 19
  • 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. 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. Zeitpunkt der Datensicherung • Regelmäßig • Außerhalb der Lastspitzen • Wenig veränderliche Daten weniger häufig 22
  • 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
  • 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. 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. 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. Sicherungsmethoden • logisch: SQL-Anweisungen • physikalisch: Tabellendateien • vollständig vs. inkrementell > Aktivieren des Binärlogs > Zeitpunktbezogene Wiederherstellung 28
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Vergleich der Sicherungsmethoden • Portabilität (SQL Dumps vs. Tabellendateien) • Geschwindigkeit, Speicherbedarf • Overhead und Beeinträchtigung des Betriebs 42
  • 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. 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. Vielen Dank! Fragen, Kommentare, Anregungen? Lenz Grimmer <lenz@sun.com> http://www.lenzg.net/ Twitter: @lenzgr 45