High Performance MySQL: Optimierung, Backups, Replikation und Lastverteilung

Book description

Einführungen in MySQL gibt es viele. Wer aber größere MySQL-Server betreut, die verlässlich laufen müssen, egal was Programmierer oder Benutzer auf sie loslassen, der braucht weiter reichende Informationen. In High Performance MySQL beschreiben sechs anerkannte Experten mit langjähriger Erfahrung auf großen Systemen alle Stellschrauben, an denen MySQL-Admins drehen können, um Sicherheit, Performance, Datenintegrität und Robustheit zu erhöhen.

Von Profis für Profis

Hier geht es nicht um kleine Webauftritte mit Datenbankanbindung! Lernen Sie stattdessen fortgeschrittene Techniken kennen, mit denen Sie MySQLs Potenzial voll ausreizen können -- um große, skalierbare Systeme zu entwerfen, zu optimieren und zu sichern. Behandelt werden Benchmarking, Indizes, Storage-Engines, Replikationen, Lastverteilung und Hochverfügbarkeit, Backups, Sicherheit... und zu jedem Aspekt die richtigen Werkzeuge, mit denen sich Ihre Ziele am besten realisieren lassen.

Praxiserprobt muss es sein

Der eine ist MySQL-Guru bei Yahoo!, der andere Angestellter Nr. 25 bei MySQL AB und dort nacheinander für das MySQL-Manual, die Trainingskurse und die Entwicklung des Supports zuständig, wieder ein anderer war bei MySQL AB im High-Performance-Team - die Autoren dieses Buchs wissen, wovon sie sprechen. Graue Theorie finden Sie woanders, hier geht es um bewährte Techniken aus der Praxis.

Ein Klassiker wird runderneuert

Die erste Auflage von „High Performance MySQL” wurde hoch gelobt und hat schon unzähligen Lesern wertvolle Dienste geleistet. Nun war es an der Zeit, dieses anerkannte Handbuch einmal komplett zu aktualisieren, um nützliches Referenzmaterial zu erweitern, neue Features der Versionen MySQL 5.0 und 5.1 zu ergänzen und zahlreiche Themen wie die Optimierung der Storage-Engine InnoDB zu vertiefen.

"Im Meer der MySQL-Literatur findet man so viel konzentriertes Know-how, das deutlich über Selbstverständlichkeiten hinausgeht, nicht allzu häufig."

Linux-Magazin, November 2008, zur engl. Originalausgabe

Table of contents

  1. High Performance MySQL: Optimierung, Backups, Replikation und Lastverteilung
  2. Vorwort
    1. Wie dieses Buch aufgebaut ist
      1. Ein breiter Überblick
      2. Eine solide Grundlage bauen
      3. Ihre Anwendung verbessern
      4. Erweiterungen nach Änderungen
      5. Ihre Anwendung zuverlässig machen
      6. Verschiedene nützliche Themen
      7. Software-Versionen und Verfügbarkeit
      8. Konventionen in diesem Buch
      9. Die Codebeispiele benutzen
      10. Wie Sie mit uns in Verbindung treten
      11. Danksagungen für die zweite Auflage
        1. Von Baron
        2. Von Peter
        3. Von Vadim
        4. Von Arjen
      12. Danksagungen für die erste Auflage
        1. Von Jeremy
        2. Von Derek
  3. 1. Die MySQL-Architektur
    1. Die logische Architektur von MySQL
      1. Verbindungsmanagement und Sicherheit
      2. Optimierung und Ausführung
    2. Nebenläufigkeitskontrolle
      1. Lese/Schreib-Locks
      2. Locking-Granularität
        1. Tabellen-Locks
        2. Row-Locks
    3. Transaktionen
      1. Isolationsebenen
      2. Deadlocks
      3. Transaktions-Log
      4. Transaktionen bei MySQL
      5. AUTOCOMMIT
        1. Storage-Engines in Transaktionen mischen
        2. Implizites und explizites Locking
    4. Multi-Version Concurrency Control
    5. Die Storage-Engines von MySQL
      1. Die MyISAM-Engine
        1. Speicherung
        2. MyISAM-Eigenschaften
        3. Komprimierte MyISAM-Tabellen
      2. Die MyISAM-Merge-Engine
      3. Die InnoDB-Engine
      4. Die Memory-Engine
      5. Die Archive-Engine
      6. Die CSV-Engine
      7. Die Federated-Engine
      8. Die Blackhole-Engine
      9. Die NDB-Cluster-Engine
      10. Die Falcon-Engine
      11. Die solidDB-Engine
      12. Die PBXT-(Primebase XT-)Engine
      13. Die Maria-Storage-Engine
      14. Weitere Storage-Engines
      15. Die richtige Engine auswählen
      16. Überlegungen
      17. Praktische Beispiele
        1. Logging
        2. Nur (oder hauptsächlich) gelesene Tabellen
        3. Auftragsverarbeitung
        4. Aktienkurse
        5. Schwarze Bretter und Thread-fähige Diskussionsforen
        6. CD-ROM-Anwendungen
      18. Storage-Engine-Zusammenfassung
      19. Tabellenkonvertierungen
      20. ALTER TABLE
        1. Dump und Import
      21. CREATE und SELECT
  4. 2. Engpässe finden: Benchmarking und Profiling
    1. Wozu Benchmarks?
    2. Benchmarking-Strategien
      1. Was gemessen wird
    3. Benchmarking-Taktiken
      1. Einen Benchmark entwerfen und planen
      2. Exakte Ergebnisse erhalten
      3. Den Benchmark ausführen und die Ergebnisse analysieren
    4. Benchmarking-Werkzeuge
      1. Full-Stack-Werkzeuge
      2. Single-Component-Werkzeuge
    5. Benchmarking-Beispiele
      1. http_load
      2. sysbench
        1. Der sysbench-CPU-Benchmark
        2. Der sysbench-Datei-Ein-/Ausgabe-Benchmark
        3. Der sysbench-OLTP-Benchmark
        4. Weitere sysbench-Funktionen
        5. dbt2 TPC-C auf der Database Test Suite
      3. Die MySQL-Benchmark-Suite
    6. Profiling
      1. Eine Anwendung profilieren
        1. Wie und was gemessen wird
        2. Ein PHP-Profiling-Beispiel
      2. MySQL-Profiling
        1. Logging von Abfragen
        2. Feinere Kontrolle über das Logging
        3. Wie man das Slow-Query-Log liest
        4. Log-Analysewerkzeuge
      3. Profiling eines MySQL-Servers
      4. Profiling von Abfragen mit SHOW STATUS
      5. SHOW PROFILE
      6. Andere Methoden, um MySQL zu profilieren
      7. Wann können Sie keinen Profiling-Code hinzufügen?
    7. Profiling des Betriebssystems
      1. Fehlerbehebung bei MySQL-Verbindungen und -Prozessen
      2. Erweitertes Profiling und Fehlerbehebung
  5. 3. Schema-Optimierung und Indizierung
    1. Optimale Datentypen auswählen
      1. Ganze Zahlen
      2. Reelle Zahlen
        1. Stringtypen
        2. VARCHAR- und CHAR-Typen
        3. BLOB- und TEXT-Typen
        4. ENUM anstelle eines Stringtyps benutzen
      3. Datums- und Zeittypen
      4. Bit-gepackte Datentypen
      5. Bezeichner wählen
      6. Besondere Arten von Daten
    2. Grundlagen der Indizierung
      1. Arten von Indizes
        1. B-Baum-Indizes
        2. Hash-Indizes
        3. Räumliche (R-Baum-) Indizes
        4. Volltextindizes
    3. Indizierungsstrategien für High Performance
      1. Die Spalte isolieren
      2. Präfixindizes und Index-Selektivität
      3. Cluster-Indizes
        1. Vergleich des Datenlayouts von InnoDB und MyISAM
      4. Mit InnoDB Zeilen in Primärschlüsselreihenfolge einfügen
      5. Abdeckende Indizes
      6. Indexscans für Sortierungen verwenden
      7. Gepackte (Präfixkomprimierte) Indizes
      8. Redundante und duplizierte Indizes
      9. Indizes und Locking
    4. Indizierung – eine Fallstudie
      1. Viele Arten der Filterung unterstützen
      2. Mehrfache Bereichsbedingungen vermeiden
      3. Das Sortieren optimieren
    5. Index- und Tabellenpflege
      1. Schäden an der Tabelle suchen und reparieren
      2. Indexstatistiken aktualisieren
      3. Index- und Datenfragmentierung verringern
    6. Normalisierung und Denormalisierung
      1. Vor- und Nachteile eines normalisierten Schemas
      2. Vor- und Nachteile eines denormalisierten Schemas
      3. Ein Mix aus normalisiert und denormalisiert
      4. Cache- und Summary-Tabellen
        1. Zählertabellen
    7. ALTER TABLE beschleunigen
      1. Nur die .frm-Datei modifizieren
      2. Schnell MyISAM-Indizes aufbauen
    8. Hinweise zu Storage-Engines
      1. Die MyISAM-Storage-Engine
      2. Die Memory-Storage-Engine
      3. Die InnoDB-Storage-Engine
  6. 4. Optimierung der Abfrageleistung
    1. Grundlagen langsamer Abfragen: Datenzugriff optimieren
      1. Fragen Sie die Datenbank nach Daten, die Sie nicht brauchen?
      2. Untersucht MySQL zu viele Daten?
        1. Ausführungszeit
        2. Untersuchte Zeilen und zurückgelieferte Zeilen
        3. Untersuchte Zeilen und Zugriffsarten
    2. Methoden zum Umstrukturieren von Abfragen
      1. Komplexe Abfragen oder viele Abfragen?
      2. Eine Abfrage zerlegen
      3. Join-Zerlegung
    3. Grundlagen der Abfrageverarbeitung
      1. Das MySQL-Client/Server-Protokoll
        1. Abfragezustände
      2. Der Abfrage-Cache
      3. Die Abfrageoptimierung
        1. Der Parser und der Präprozessor
        2. Der Abfrageoptimierer
        3. Tabellen- und Indexstatistiken
        4. Die Join-Ausführungsstrategie von MySQL
        5. Der Ausführungsplan
        6. Der Join-Optimierer
        7. Sortieroptimierungen
      4. Die Abfrageausführungs-Engine
      5. Zurückliefern der Ergebnisse an den Client
    4. Grenzen des MySQL-Abfrageoptimierers
      1. Korrelierte Unterabfragen
        1. Wann eine korrelierte Unterabfrage gut ist
        2. UNION-Beschränkungen
        3. Index-Merge-Optimierungen
        4. Verbreitung von Gleichheit
        5. Parallele Ausführung
        6. Hash-Joins
        7. Lockere Indexscans
        8. MIN() und MAX()
        9. SELECT und UPDATE in derselben Tabelle
    5. Bestimmte Arten von Abfragen optimieren
      1. COUNT()-Abfragen optimieren
      2. Was COUNT() macht
        1. Mythen über MyISAM
        2. Einfache Optimierungen
        3. Komplexere Optimierungen
      3. JOIN-Abfragen optimieren
      4. Unterabfragen optimieren
      5. GROUP BY und DISTINCT optimieren
      6. GROUP BY WITH ROLLUP optimieren
      7. LIMIT und OFFSET optimieren
      8. SQL_CALC_FOUND_ROWS optimieren
      9. UNION optimieren
    6. Hinweise für den Abfrageoptimierer
    7. Benutzerdefinierte Variablen
      1. Seien Sie vorsichtig mit MySQL-Upgrades
  7. 5. Erweiterte MySQL-Funktionen
    1. Der MySQL-Abfrage-Cache
      1. Wie MySQL prüft, ob es einen Cache-Treffer gibt
      2. Wie der Cache den Speicher benutzt
      3. Wann der Abfrage-Cache hilfreich ist
      4. Wie man den Abfrage-Cache einstellt und pflegt
        1. Fragmentierung reduzieren
        2. Die Verwendung des Abfrage-Cache verbessern
      5. InnoDB und der Abfrage-Cache
      6. Allgemeine Abfrage-Cache-Optimierungen
      7. Alternativen zum Abfrage-Cache
    2. Code in MySQL speichern
      1. Gespeicherte Prozeduren und Funktionen
      2. Trigger
      3. Events
      4. Kommentare in gespeichertem Code schützen
    3. Cursor
    4. Vorbereitete Anweisungen
      1. Optimierung von vorbereiteten Anweisungen
      2. Die SQL-Schnittstelle für vorbereitete Anweisungen
      3. Die Grenzen vorbereiteter Anweisungen
    5. Benutzerdefinierte Funktionen
    6. Sichten
      1. Update-fähige Sichten
      2. Auswirkungen von Sichten auf die Leistung
      3. Beschränkungen von Sichten
    7. Zeichensätze und Sortierreihenfolgen
      1. Wie MySQL Zeichensätze benutzt
        1. Vorgabewerte zum Erzeugen von Objekten
        2. Einstellungen für die Client/Server-Kommunikation
        3. Wie MySQL Werte vergleicht
        4. Besondere Verhaltensweisen
      2. Einen Zeichensatz und eine Sortierreihenfolge wählen
      3. Wie Zeichensätze und Sortierreihenfolgen Abfragen beeinflussen
    8. Volltextsuche
      1. Natürlichsprachige Volltextsuchen
      2. Boolesche Volltextsuchen
      3. Volltextänderungen seit MySQL 5.1
      4. Volltextprobleme und -lösungen
      5. Volltexteinstellung und -optimierung
    9. Fremdschlüsselbeschränkungen
    10. Merge-Tabellen und Partitionierung
      1. Merge-Tabellen
        1. Auswirkungen von Merge-Tabellen auf die Performance
        2. Stärken von Merge-Tabellen
      2. Partitionierte Tabellen
        1. Wieso die Partitionierung funktioniert
        2. Beispiele für Partitionierung
        3. Beschränkungen partitionierter Tabellen
        4. Abfragen an partitionierte Tabellen optimieren
    11. Verteilte (XA-) Transaktionen
      1. Interne XA-Transaktionen
      2. Externe XA-Transaktionen
  8. 6. Die Servereinstellungen optimieren
    1. Grundlagen der Konfiguration
      1. Syntax, Geltungsbereich und Dynamismus
      2. Nebenwirkungen beim Einstellen von Variablen
      3. Der Einstieg
    2. Allgemeines Tuning
      1. Die Speicherbenutzung anpassen
        1. Wie viel Speicher kann MySQL benutzen?
        2. Speicheranforderungen pro Verbindung
        3. Speicher für das Betriebssystem reservieren
        4. Speicher für Caches belegen
      2. Der MyISAM-Schlüssel-Cache
        1. Die Größe des MyISAM-Schlüsselblocks
      3. Der InnoDB-Pufferpool
      4. Der Thread-Cache
      5. Der Tabellen-Cache
      6. Das InnoDB-Data-Dictionary
    3. Das Ein-/Ausgabeverhalten von MySQL anpassen
      1. MyISAM-Ein-/Ausgabe verbessern
      2. InnoDB-Ein-/Ausgabe-Tuning
        1. Das InnoDB-Transaktions-Log
        2. Wie InnoDB Log-und Datendateien öffnet und leert
        3. Der InnoDB-Tablespace
        4. Der Doublewrite-Puffer
        5. Weitere Optionen zum Ein-/Ausgabe-Tuning
    4. Die MySQL-Nebenläufigkeit anpassen
      1. MyISAM bei Nebenläufigkeit anpassen
      2. InnoDB bei Nebenläufigkeit anpassen
    5. Lastbasierte Anpassungen
      1. Für BLOB- und TEXT-Lasten optimieren
      2. Für Filesorts optimieren
      3. Die MySQL-Serverstatusvariablen untersuchen
    6. Verbindungsbezogene Werte anpassen
  9. 7. Betriebssystem- und Hardwareoptimierung
    1. Was beschränkt die Leistung von MySQL?
    2. Wie Sie CPUs für MySQL auswählen
      1. Was ist besser: Schnelle CPUs oder viele CPUs?
      2. Die CPU-Architektur
      3. Für viele CPUs und Kerne skalieren
    3. Speicher- und Festplattenressourcen abwägen
      1. Zufällige oder sequenzielle Ein-/Ausgabe?
      2. Caching, Lese- und Schreibvorgänge
      3. Wie sieht Ihr Arbeitssatz aus?
        1. Der Arbeitssatz und die Cache-Einheit
      4. Ein effektives Speicher-zu-Festplatte-Verhältnis finden
      5. Die Wahl der Festplatten
    4. Hardware für einen Slave wählen
    5. RAID-Leistungsoptimierung
      1. RAID-Ausfall, -Wiederherstellung und -Überwachung
      2. Abwägen zwischen Hardware-RAID und Software-RAID
      3. RAID-Konfiguration und Caching
      4. Die RAID-Stripe-Chunk-Größe
      5. Der RAID-Cache
    6. Storage Area Networks und Network-Attached Storage
      1. Storage Area Networks
      2. Network-Attached Storage
    7. Mehrere Festplatten-Volumes benutzen
    8. Die Netzwerkkonfiguration
    9. Ein Betriebssystem wählen
    10. Ein Dateisystem wählen
    11. Threading
    12. Swapping
    13. Der Betriebssystemstatus
      1. Wie man die vmstat-Ausgabe liest
      2. Wie man die iostat-Ausgabe liest
      3. Eine CPU-gebundene Maschine
      4. Eine ein-/ausgabegebundene Maschine
      5. Eine auslagernde Maschine
      6. Eine untätige Maschine
  10. 8. Replikation
    1. Replikation im Überblick
      1. Probleme, die durch die Replikation gelöst werden
      2. Wie die Replikation funktioniert
    2. Die Replikation einrichten
      1. Replikations-Accounts anlegen
      2. Master und Slave konfigurieren
      3. Den Slave starten
      4. Einen Slave von einem anderen Server aus initialisieren
      5. Die empfohlene Replikationskonfiguration
    3. Replikation näher betrachtet
      1. Anweisungsbasierte Replikation
      2. Zeilenbasierte Replikation
      3. Replikationsdateien
      4. Replikations-Events an andere Slaves senden
      5. Replikationsfilter
    4. Replikationstopologien
      1. Ein Master und mehrere Slaves
      2. Master-Master im Aktiv-Aktiv-Modus
      3. Master-Master im Aktiv-Passiv-Modus
      4. Master-Master mit Slaves
      5. Ring
      6. Master, Distribution-Master und Slaves
      7. Eigene Replikationslösungen
        1. Selektive Replikation
        2. Funktionen trennen
        3. Daten archivieren
        4. Slaves für Volltextsuchen einsetzen
        5. Schreibgeschützte Slaves
        6. Multimaster-Replikation emulieren
        7. Einen Log-Server erzeugen
    5. Replikation und Kapazitätsplanung
      1. Weshalb die Replikation das Skalieren von Schreiboperationen nicht unterstützt
      2. Seien Sie großzügig und verschwenderisch
    6. Replikationsadministration und -wartung
      1. Die Replikation überwachen
      2. Den Rückstand des Slaves messen
      3. Feststellen, ob Slaves konsistent mit dem Master sind
      4. Einen Slave wieder mit dem Master synchronisieren
      5. Die Master wechseln
        1. Geplante Beförderungen
        2. Ungeplante Beförderungen
        3. Die gewünschten Log-Positionen suchen
      6. Rollentausch in einer Master-Master-Konfiguration
    7. Replikationsprobleme und Lösungen
      1. Durch Datenverfälschung oder -verlust verursachte Fehler
      2. Nichttransaktionsfähige Tabellen verwenden
      3. Transaktionsfähige und nichttransaktionsfähige Tabellen mischen
      4. Nichtdeterministische Anweisungen
      5. Unterschiedliche Storage-Engines auf Master und Slave
      6. Datenänderungen auf dem Slave
      7. Nichteindeutige Server-IDs
      8. Undefinierte Server-IDs
      9. Abhängigkeiten von nichtreplizierten Daten
      10. Fehlende temporäre Tabellen
      11. Es werden nicht alle Updates repliziert
      12. Lock-Contention aufgrund von sperrenden InnoDB-Selects
      13. In einer Master-Master-Replikation auf beide Master schreiben
      14. Übermäßiger Rückstand bei der Replikation
        1. Verdoppeln Sie den teuren Teil des Schreibens nicht
        2. Schreiboperationen außerhalb der Replikation parallel durchführen
        3. Den Cache für den Slave-Thread vorbereiten
      15. Übergroße Pakete vom Master
      16. Beschränkte Replikationsbandbreite
      17. Kein Festplattenplatz
      18. Beschränkungen der Replikation
    8. Wie schnell ist die Replikation?
    9. Die Zukunft der MySQL-Replikation
  11. 9. Skalierung und Hochverfügbarkeit
    1. Terminologie
    2. MySQL skalieren
      1. Skalierbarkeit einplanen
      2. Vor der Skalierung
      3. Vertikal skalieren
      4. Horizontal skalieren
        1. Funktionelle Partitionierung
        2. Datenzerlegung (Sharding)
        3. Einen Partitionierungsschlüssel wählen
        4. Abfragen in mehreren Shards
        5. Daten, Shards und Knoten zuweisen
        6. Feste Allozierung
        7. Dynamische Allozierung
        8. Explizite Allozierung
        9. Shards neu ausgleichen
        10. Global eindeutige IDs generieren
        11. Werkzeuge für das Sharding
      5. Den Datenumfang verringern
        1. Aktive Daten getrennt halten
      6. Mit Clustern skalieren
        1. Clustering
        2. Federation
    3. Lastausgleich
      1. Direkt verbinden
        1. Lese- und Schreiboperationen bei der Replikation trennen
        2. Die Anwendungskonfiguration ändern
        3. DNS-Namen ändern
        4. IP-Adressen verschieben
      2. Einen Vermittler einführen
        1. Load Balancer
        2. Algorithmen für den Lastausgleich
        3. Server zum Pool hinzufügen und aus ihm entfernen
      3. Lastausgleich mit einem Master und mehreren Slaves
    4. Hochverfügbarkeit
      1. Hochverfügbarkeit einplanen
      2. Redundanz hinzufügen
        1. Architekturen mit gemeinsam genutztem Speicher
        2. Architekturen mit replizierten Festplatten
        3. Synchrone MySQL-Replikation
      3. Failover und Failback
        1. Einen Slave befördern oder die Rollen tauschen
        2. Virtuelle IP-Adressen oder IP-Übernahme
        3. Der MySQL Master-Master Replication Manager
        4. Lösungen mit Vermittlern
      4. Failover in der Anwendung verarbeiten
  12. 10. Optimierung auf Anwendungsebene
    1. Überblick über die Anwendungsleistung
      1. Suchen Sie die Quelle des Problems
      2. Suchen Sie nach verbreiteten Problemen
    2. Webserverprobleme
      1. Die optimale Nebenläufigkeit finden
    3. Caching
      1. Caching unterhalb der Anwendung
      2. Caching auf Anwendungsebene
      3. Strategien zur Cache-Kontrolle
      4. Cache-Objekthierarchien
      5. Inhalt vorab generieren
    4. MySQL erweitern
    5. Alternativen zu MySQL
  13. 11. Backup und Wiederherstellung
    1. Überblick
      1. Terminologie
      2. Es dreht sich alles um Wiederherstellung
      3. Themen, die wir nicht behandeln
      4. Das Gesamtbild
      5. Wozu Backups?
    2. Überlegungen und Kompromisse
      1. Was können Sie sich leisten zu verlieren?
      2. Online- oder Offline-Backups?
      3. Logische oder rohe Backups?
        1. Logische Backups
        2. Rohe Backups
        3. Was Sie mit einem Backup sichern
        4. Inkrementelle Backups
      4. Storage-Engines und Konsistenz
        1. Datenkonsistenz
        2. Dateikonsistenz
      5. Replikation
    3. Binärlogs organisieren und sichern
      1. Das Binärlogformat
      2. Alte Binärlogs sicher aufräumen
    4. Daten in einem Backup sichern
      1. Ein logisches Backup anlegen
        1. SQL-Dumps
        2. Backups in separierte Dateien
        3. Paralleles Dumpen und Wiederherstellen
      2. Dateisystemschnappschüsse
      3. Wie LVM-Schnappschüsse funktionieren
        1. Voraussetzungen und Konfiguration
        2. Einen LVM-Schnappschuss erzeugen, mounten und entfernen
        3. LVM-Schnappschüsse für Online-Backups
        4. Lock-freie InnoDB-Backups mit LVM-Schnappschüssen
        5. Für LVM-Backups planen
        6. Andere Anwendungen und Alternativen
    5. Wiederherstellung aus einem Backup
      1. Den Zugriff auf MySQL beschränken
      2. Rohe Dateien erneuern
        1. MySQL nach dem Erneuern roher Dateien starten
        2. Logische Backups erneuern
        3. Laden von SQL-Dateien
        4. Laden von separierten Dateien
      3. Punktgenaue Wiederherstellung
      4. Höherentwickelte Techniken zur Wiederherstellung
        1. Verzögerte Replikation für eine schnelle Wiederherstellung
        2. Wiederherstellung mit einem Log-Server
      5. InnoDB-Wiederherstellung
        1. Gründe für InnoDB-Schäden
        2. Wie man beschädigte InnoDB-Daten wiederherstellt
    6. Backup- und Wiederherstellungsgeschwindigkeit
    7. Backup-Werkzeuge
      1. mysqldump
      2. mysqlhotcopy
      3. InnoDB Hot Backup
      4. mk-parallel-dump
      5. mylvmbackup
      6. Zmanda Recovery Manager
      7. ZRM installieren und testen
      8. R1Soft
      9. MySQL-Online-Backup
      10. Vergleich der Backup-Werkzeuge
    8. Backups mit Skripten
  14. 12. Sicherheit
    1. Terminologie
    2. Account-Grundlagen
      1. Berechtigungen
      2. Die Grant-Tabellen
      3. Wie MySQL die Berechtigungen überprüft
      4. Grants hinzufügen, entfernen und betrachten
      5. MySQL-Berechtigungen einrichten
      6. Besondere Änderungen in MySQL 4.1
      7. Besondere Änderungen in MySQL 5.0
        1. Gespeicherte Routinen
        2. Trigger
        3. Sichten
        4. Berechtigungen in den INFORMATION_SCHEMA-Tabellen
      8. Berechtigungen und Leistung
      9. Verbreitete Probleme und Lösungen
        1. Verbindung über localhost oder über 127.0.0.1?
        2. Temporäre Tabellen sicher einsetzen
        3. Passwortlosen Zugriff verbieten
        4. Anonyme Benutzer deaktivieren
        5. Denken Sie daran, Hostnamen separat in Anführungszeichen zu setzen
        6. Verwenden Sie Benutzernamen nicht noch einmal
        7. Das Gewähren von SELECT erlaubt SHOW CREATE TABLE
        8. Gewähren Sie keine Berechtigungen in der mysql-Datenbank
        9. Gewähren Sie nicht freimütig die Berechtigung SUPER
        10. Gewähren von Berechtigungen in Datenbanken mit Wildcards
        11. Bestimmte Berechtigungen zurücknehmen
        12. Benutzer können sich sogar nach einem REVOKE verbinden
        13. Wann können Sie keine Berechtigung gewähren oder zurücknehmen?
        14. Unsichtbare Berechtigungen
        15. Veraltete Berechtigungen
    3. Betriebssystemsicherheit
      1. Richtlinien
    4. Netzwerksicherheit
      1. Auf den Localhost beschränkte Verbindungen
      2. Firewall-Betrieb
        1. Keine Standardroute
      3. MySQL in einer DMZ
      4. Verbindungsverschlüsselung und Tunnel
        1. Virtuelle private Netzwerke
        2. SSL in MySQL
        3. SSH-Tunnel
      5. TCP-Wrapper
      6. Automatische Host-Blockade
    5. Datenverschlüsselung
      1. Passwort-Hashing
      2. Verschlüsselte Dateisysteme
      3. Verschlüsselung auf Anwendungsebene
        1. Entwurfsprobleme
        2. Ver- und Entschlüsseln innerhalb von MySQL
        3. Quellcode-Modifikation
    6. MySQL in einer chroot-Umgebung
  15. 13. Der MySQL-Serverstatus
    1. Systemvariablen
    2. SHOW STATUS
      1. Thread- und Verbindungsstatistiken
      2. Der Status des Binär-Loggings
      3. Befehlszähler
      4. Temporäre Dateien und Tabellen
      5. Handler-Operationen
      6. MyISAM-Schlüsselpuffer
      7. Dateideskriptoren
      8. Abfrage-Cache
      9. SELECT-Typen
      10. Sortieren
      11. Tabellen-Locking
      12. Secure Sockets Layer (SSL)
      13. InnoDB-spezifisches
      14. Plugin-spezifisches
      15. Verschiedenes
    3. SHOW INNODB STATUS
      1. Header
      2. SEMAPHORES
      3. LATEST FOREIGN KEY ERROR
      4. LATEST DETECTED DEADLOCK
      5. TRANSACTIONS
      6. FILE I/O
      7. INSERT BUFFER AND ADAPTIVE HASH INDEX
      8. LOG
      9. BUFFER POOL AND MEMORY
      10. ROW OPERATIONS
    4. SHOW PROCESSLIST
    5. SHOW MUTEX STATUS
    6. Status der Replikation
    7. INFORMATION_SCHEMA
  16. 14. Werkzeuge für High Performance
    1. Schnittstellenwerkzeuge
      1. MySQL Visual Tools
      2. SQLyog
      3. phpMyAdmin
    2. Überwachungswerkzeuge
      1. Nichtinteraktive Überwachungssysteme
        1. Selbst gebaute Systeme
        2. Nagios
        3. Alternativen zu Nagios
        4. MySQL Monitoring and Advisory Service
        5. MONyog
        6. RRDTool-basierte Systeme
      2. Interaktive Werkzeuge
        1. innotop
    3. Analysewerkzeuge
      1. HackMySQL-Werkzeuge
      2. Maatkit-Analysewerkzeuge
    4. MySQL-Dienstprogramme
      1. MySQL Proxy
      2. Dormando's Proxy for MySQL
      3. Maatkit-Dienstprogramme
    5. Weitere Informationsquellen
  17. A. Große Dateien übertragen
    1. Dateien kopieren
      1. Ein naives Beispiel
      2. Eine Ein-Schritt-Methode
      3. Verschlüsselungs-Overhead vermeiden
      4. Weitere Möglichkeiten
      5. Dateikopier-Benchmarks
  18. B. EXPLAIN benutzen
    1. EXPLAIN aufrufen
      1. Umschreiben von Nicht-SELECT-Abfragen
      2. Die Spalten in EXPLAIN
      3. Die id-Spalte
      4. Die select_type-Spalte
      5. Die table-Spalte
        1. Abgeleitete Tabellen und Vereinigungen
        2. Ein Beispiel für komplexe SELECT-Typen
      6. Die type-Spalte
      7. Die possible_keys-Spalte
      8. Die key-Spalte
      9. Die key_len-Spalte
      10. Die ref-Spalte
      11. Die rows-Spalte
      12. Die filtered-Spalte
      13. Die Extra-Spalte
      14. Visuelles EXPLAIN
  19. C. Sphinx mit MySQL benutzen
    1. Überblick: Eine typische Sphinx-Suche
      1. Wieso sollten Sie Sphinx benutzen?
      2. Effiziente und skalierbare Volltextsuche
      3. WHERE-Klauseln effizient anwenden
      4. Die obersten Ergebnisse anzeigen
      5. Optimieren von GROUP BY-Abfragen
      6. Parallele Ergebnismengen generieren
      7. Skalierung
      8. Verteilte Daten ansammeln
      9. Überblick über die Architektur
      10. Überblick über die Installation
      11. Typische Verwendung der Partitionierung
      12. Besondere Eigenschaften
      13. Phrasennähe-Ranking
      14. Unterstützung für Attribute
      15. Filterung
      16. Die Plugin-fähige SphinxSE-Storage-Engine
      17. Erweiterte Leistungsüberwachung
      18. Praktische Implementierungsbeispiele
        1. Volltextsuche auf BoardReader.com
      19. Selects optimieren auf Sahibinden.com
      20. GROUP BY auf BoardReader.com optimieren
      21. Geteilte JOIN-Abfragen auf Grouply.com optimieren
      22. Schlussfolgerung
  20. D. Sperren debuggen
    1. Lock-Wartezustände auf Serverebene
      1. Tabellen-Locks
        1. Feststellen, wer einen Lock hält
      2. Der globale Lese-Lock
      3. Name-Locks
      4. Benutzer-Locks
      5. Lock-Wartezustände in Storage-Engines
        1. InnoDB-Lock-Wartezustände
        2. Zu einer sinnvolleren Lock-Ausgabe
      6. Falcon-Lock-Wartezustände
  21. Kolophon
  22. Stichwortverzeichnis
  23. Impressum

Product information

  • Title: High Performance MySQL: Optimierung, Backups, Replikation und Lastverteilung
  • Author(s): Baron Schwartz, Peter Zaitsev, Vadim Tkachenko, Jeremy D. Zawodny, Arjen Lentz, Derek J. Balling
  • Release date: February 2009
  • Publisher(s): O'Reilly Verlag
  • ISBN: 9783897218895