Upload
vuthien
View
224
Download
0
Embed Size (px)
Citation preview
MySQLDas offizielle Handbuch
IT-Studienausgabe
Übersetzung von Stefan Hinz
t-y;
Inhaltsverzeichnis
Vorwort 17Vorbemerkungen zum deutschen Handbuch 19Konventionen in diesem Handbuch 20
Kapitel 1: Was ist MySQL? 23Die wichtigsten Features von MySQL 24Wie stabil ist MySQL? 26Wie groß können MySQL-Tabellen sein? 29Jahr-2000-Konformität 29
Was ist MySQL AB? 31Geschäftsmodell und Dienstleistungen von MySQL AB 32
MySQL-Support und Lizensierung 34Support, den MySQL AB anbietet 35Copyrights und Lizenzen, die von MySQLverwendet werden 35MySQL-AB-Logos und -Schutzmarken 36MySQL-Lizenzpolitik 37
MySQL 4.0 kurz und bündig 38Schritt für Schritt 39Für den sofortigen Entwicklungseinsatz 39Eingebettetes MySQL 39Weitere ab MySQL 4.0.0 verfügbare Features 39Zukünftige Features in MySQL 4.0 40MySQL 4.1, das folgende Entwicklungs-Release 40
MySQL-Informationsquellen 41MySQL-Portale 41MySQL-Mailing-Listen 41
Wie Standard-kompatibel ist MySQL? 48An welche Standards hält sich MySQL? 48MySQL im ANSI-Modus laufen lassen 48MySQL-Erweiterungen zu ANSI SQL92 49MySQL-Unterschiede im Vergleich zu ANSI SQL92 51Bekannte Fehler und Design-Unzulänglichkeiten in MySQL 57
Inhaltsverzeichnis
MySQL und die Zukunft 60Dinge, die in Version 4.0 enthalten sein sollten 60Dinge, die in naher Zukunft erledigt werden müssen 61Dinge, die irgendwann gemacht werden müssen 64Ein paar Dinge, für deren Umsetzung wir keine Pläne haben 66
MySQL im Vergleich mit anderen Datenbanken 66MySQL im Vergleich mit mSQL 66MySQL im Vergleich mit PostgreSQL 72
Kapitel 2: Installation von MySQL 81Schnelle Standard-Installation von MySQL 81
MySQL auf Linux installieren 81Installation von MySQL unter Windows 82Betriebssysteme, die von MySQL unterstützt werden 84Welche MySQL-Version Sie benutzen sollten 85Installationslayouts 88Wann und wie Updates veröffentlicht werden 89MySQL-Binärdistributionen, die von MySQL AB kompiliert wurden 89
Installation der Quelldistribution 91Schnellinstallation: Überblick 91Wie man Patches anwendet 94Typische configure-Optionen 94Installation vom Entwicklungs-Source-Tree 97Probleme beim Kompilieren? 98Anmerkungen zu MIT-pThreads 101Windows-Quelldistribution 102MySQL bauen 102
Einstellungen und Tests nach der Installation 103Probleme mit mysql_install_db 106Probleme mit dem Start des MySQL-Servers 108MySQL automatisch starten und anhalten 110
MySQL aktualisieren (Upgrade / Downgrade) 111Upgrade von 3.23 auf Version 4.0 111Upgrade von einer Version 3.22 auf 3.23 112Upgrade von Version 3.21 auf Version 3.22 113Upgrade von Version 3.20 auf Version 3.21 113Upgrade auf eine andere Architektur 114
Betriebssystem-spezifische Anmerkungen 115Linux (alle Linux-Versionen) 115Anmerkungen zu Windows 122Anmerkungen zu Solaris 129Anmerkungen zu BSD 133Anmerkungen zu Mac OS X 135Anmerkungen zu anderen Unixen 136Anmerkungen zu OS/2 146Anmerkungen zu BeOS 147Anmerkungen zu Novell Netware 147
Inhaltsverzeichnis
Anmerkungen zur Perl-Installation 147Installation von Perl unter Unix 147Installation von ActiveState-Perl unter Windows 148Installation der MySQL-Perl-Distribution unter Windows 149Probleme bei der Benutzung von Perl DBI/DBD-Schnittstelle 149
Kapitel 3: Einführung in MySQL: Ein MySQL-Tutorial 151Verbindung zum Server herstellen und trennen 151Anfragen eingeben 152
Eine Datenbank erzeugen und benutzen 156Eine Datenbank erzeugen und auswählen 157Eine Tabelle erzeugen 158Daten in Tabellen einladen 159Informationen aus einer Tabelle abfragen 160
Informationen über Datenbanken und Tabellen 178
Beispiele gebräuchlicher Anfragen (Queries) 179Der höchste Wert einer Spalte 180Die Zeile, die den höchsten Wert einer bestimmten Spalte enthält 180Höchster Wert einer Spalte pro Gruppe 181Die Zeilen, die das gruppenweise Maximum eines bestimmtenFelds enthalten 181Wie Benutzer-Variablen verwendet werden 182Wie Fremdschlüssel (Foreign Keys) verwendet werden 183Über zwei Schlüssel suchen 185Besuche pro Tag berechnen 185
mysql im Stapelbetrieb (Batch Mode) 186
Anfragen aus dem Zwillings-Projekt 187Alle nicht verteilten Zwillinge finden 188Eine Tabelle über den Zustand von Zwillingspaaren zeigen 191
MySQL mit Apache benutzen 191
Kapitel 4: MySQL-Datenbankadministration 193MySQL konfigurieren 193
mysqld-Kommandozeilenoptionen 193my.cnf-Optionsdateien 198Viele Server auf derselben Maschine installieren 201Viele MySQL-Server auf derselben Maschine laufen lassen 202
Allgemeine Sicherheitsthemen und dasMySQL-Zugriffsberechtigungssystem 203
Allgemeine Sicherheitsrichtlinien 203Wie Sie MySQL gegen Cracker sicher machen 206Startoptionen für mysqld in Bezug auf Sicherheit 207Was das Berechtigungssystem macht 208Wie das Berechtigungssystem funktioniert 208Von MySQL zur Verfügung gestellte Berechtigungen 211Verbinden mit dem MySQL-Server 213
Inhaltsverzeichnis
Zugriffskontrolle, Phase 1: Verbindungsüberprüfung 214Zugriffskontrolle, Phase 2: Anfrageüberprüfung 217Gründe für Access denied-Fehler 219
MySQL-Benutzerkonten-Verwaltung 223GRANT- und REVOKE-Syntax 223MySQL-Benutzernamen und -Passwörter 228Wann Berechtigungsänderungen wirksam werden 229Einrichtung der anfänglichen MySQL-Berechtigungen 229Neue MySQL-Benutzer hinzufügen 230Passwörter einrichten 233Wie Sie Ihre Passwörter sicher halten 234
Disaster-Management und Wiederherstellung 235Datenbank-Datensicherungen 235BACKUP TABLE-Syntax 236RESTORE TABLE-Syntax 237CHECK TABLE-Syntax 237REPAIR TABLE-Syntax 239Benutzung von myisamchk für Tabellenwartung und Absturzreparatur 239Wartungsplan für Tabellen erstellen 250Informationen über eine Tabelle erhalten 250
Datenbankverwaltung: Sprachreferenz 257OPTIMIZE TABLE-Syntax 257ANALYZE TABLE-Syntax 258FLUSH-Syntax 258KILL-Syntax 259SHOW-Syntax 259
MySQL-Lokalisierung und internationaler Gebrauch 276Der für Daten und Sortieren benutzte Zeichensatz 276Nicht-englische Fehlermeldungen 278Einen neuen Zeichensatz hinzufügen 278Die Zeichen-Definitions-Arrays 279Unterstützung für Zeichenketten-Vergleich 280Unterstützung für Multi-Byte-Zeichen 280Probleme mit Zeichensätzen 280
Serverseitige Skripte und Dienstprogramme für MySQL 281Überblick über serverseitige Programme und Dienstprogramme 281safe_mysqld, der Wrapper um mysqld 283mysqld_multi, Programm zur Verwaltung mehrerer MySQL-Server 285myisampack, MySQL-Programm zum Erzeugen komprimierterNur-Lese-Tabellen 288mysqld-max, ein erweiterter mysqld-Server 295
Clientseitige Skripte und Hilfsprogramme von MySQL 297Überblick über die clientseitigen Skripte und Dienstprogramme 297Das Kommandozeilen-Werkzeug 299mysqladmin, Verwaltung eines MySQL-Servers 305Benutzung von mysqlcheck für Tabellenwartung und Wiederherstellungnach Abstürzen 307
Inhaltsverzeichnis
mysqldump, Tabellenstrukturen und -daten dumpen 309mysqlhotcopy, MySQL-Datenbanken und Tabellen kopieren 313mysqlimport, Daten aus Textdateien importieren 315Datenbanken, Tabellen und Spalten anzeigen 317perror, Erklärung der Fehler-Codes 318Wie SQL-Befehle aus einer Textdatei laufen gelassen werden 318
Die MySQL-Log-Dateien 318Die Fehler-Log-Datei 319Die allgemeine Anfragen-Log-Datei 319Die Update-Log-Datei 319Die binäre Update-Log-Datei 320Die Anfragen-Log-Datei für langsame Anfragen 321Wartung und Pflege der Log-Dateien 322
Replikation bei MySQL 322Einführung in die Replikation 322Replikationsimplementation 323Wie man Replikation aufsetzt 323Replikationsfeatures und bekannte Probleme 325Replikationsoptionen in my.cnf 326SQL-Befehle in Bezug auf Replikation 329Replikation - Häufig gestellte Fragen 330Problemlösung bei Replikation 333
Kapitel 5: MySQL-Optimierung 335Überblick über Optimierung 335
MySQL-Design-Einschränkungen 336Portabilität 336Wofür benutzen wir MySQL? 337Die MySQL-Benchmark-Suite 338Wie Sie Ihre eigenen Benchmarks benutzen 339
SELECTs und andere Anfragen optimieren 339EXPLAIN-Syntax (Informationen über ein SELECT erhalten) 340Anfragen-Performance abschätzen 346Geschwindigkeit von SELECT-Anfragen 346Wie MySQL WHERE-Klauseln optimiert 346Wie MySQL DISTINCT optimiert 348Wie MySQL LEFT JOIN optimiert 349Wie MySQL LIMIT optimiert 349Geschwindigkeit von INSERT-Anfragen 350Geschwindigkeit von UPDATE-Anfragen 351Geschwindigkeit von DELETE-Anfragen 352Weitere Optimierungstipps 352
Sperren (Locking) 354Wie MySQL Tabellen sperrt 354Themen, die Tabellensperren betreffen 355
Optimierung der Datenbank-Struktur 356MySQL-Datenbank-Design-Überlegungen 356
Inhaltsverzeichnis
Wie Sie Ihre Daten so klein wie möglich bekommen 357Wie MySQL Indexe benutzt 358Spalten-Indexe 360Mehrspaltige Indexe 360Wie MySQL Tabellen öffnet und schließt 361Nachteile der Erzeugung großer Mengen von Tabellen in derselben Datenbank 362Warum gibt es so viele offene Tabellen? 362
Optimierung des MySQL-Servers 363System / Kompilierzeitpunkt und Tuning der Startparameter 363Server-Parameter runen 363Wie Kompilieren und Linken die Geschwindigkeit von MySQL beeinflusst . .. 365Wie MySQL Speicher benutzt 366Wie MySQL DNS benutzt 368SET-Syntax 368Festplatte, Anmerkungen 371Symbolische Links benutzen 372
Kapitel 6: MySQL-Sprachreferenz 375Sprachstruktur 375
Literale: Wie Zeichenketten und Zahlen geschrieben werden 375Datenbank-, Tabellen-, Index-, Spalten- und Alias-Namen 378Groß-/Kleinschreibung in Namen 380Benutzer-Variablen 380Kommentar-Syntax 381Ist MySQL pingelig hinsichtlich reservierter Wörter? 382
Spaltentypen 384Numerische Typen 388Datums- und Zeit-Typen 389Zeichenketten-Typen 395Den richtigen Typ für eine Spalte auswählen 399Spaltentypen anderer Datenbanken benutzen ; 399Speicherbedarf von Spaltentypen 400
Funktionen für die Benutzung in SELECT-und WHERE-Klauseln . . . 401Nicht typenspezifische Operatoren und Funktionen 402Ablaufsteuerungsfunktionen 406Zeichenketten-Funktionen 408Numerische Funktionen 419Datums- und Zeit-Funktionen 427Weitere Funktionen 435Funktionen zur Benutzung bei GROUP BY-Klauseln 440
Datenmanipulation:SELECT, INSERT, UPDATE, DELETE 442
SELECT-Syntax 442UPDATE-Syntax 452DELETE-Syntax 452
Inhaltsverzeichnis
Datendefinition: CREATE, DROP, ALTER 460CREATE DATABASE-Syntax 460DROP DATABASE-Syntax 461CREATE TABLE-Syntax 461ALTER TABLE-Syntax 468RENAME TABLE-Syntax 472DROP TABLE-Syntax 472CREATE INDEX-Syntax 473DROP INDEX-Syntax 473
Grundlegende Befehle des MySQL-Dienstprogramms für Benutzer . . . 473USE-Syntax 473DESCRIBE-Syntax (Informationen über Spalten erhalten) 474
Transaktionale und Sperrbefehle von MySQL 474BEGIN/COMMIT/ROLLBACK-Syntax 474LOCK TABLES/UNLOCK TABLES-Syntax 475SET TRANSACTION-Syntax 477
MySQL-Volltextsuche 477Volltext-Einschränkungen 479MySQL-Volltextsuche fein einstellen 480Neue Features der Volltextsuche in MySQL 4.0 480Volltextsuche TODO-Liste 481
MySQL-Anfragen-Cache 481Wie der Anfragen-Cache funktioniert 481Anfragen-Cache-Konfiguration 482Anfragen-Cache-Optionen in SELECT 483Anfragen-Cache-Status und -Wartung 483
Kapitel 7: MySQL-Tabellentypen 485MylSAM-Tabellen 486
Für Schlüssel benötigter Speicherplatz 488MylSAM-Tabellenformate 489MylSAM-Tabellenprobleme 491
MERGE-Tabellen 492MERGE-Tabellenprobleme 494
ISAM-Tabellen 495HEAP-Tabellen 496InnoDB-Tabellen 497
Überblick über InnoDB-Tabellen 497Mit InnoDB anfangen - Optionen 498InnoDB-Tabellenplatz (Tablespace) erzeugen 501InnoDB-Tabellen erzeugen 502Hinzufügen und Entfernen von InnoDB-Daten- und -Log-Dateien 504Datensicherung und Wiederherstellung einer InnoDB-Datenbank 505Eine InnoDB-Datenbank auf eine andere Maschine verschieben 506InnoDB-Transaktionsmodell 507
11
Inhaltsverzeichnis
Tipps zur Performance-Steigerung 510Implementation des Multiversionings 514Tabellen- und Index-Strukturen 515Verwaltung von Datei-Speicherplatz und Festplatten-Eingaben / -Ausgaben . . 517Fehlerbehandlung 518Beschränkungen von InnoDB-Tabellen 519
BDB- oder Berkeley_db-Tabellen 520Überblick über BDB-Tabellen 520BDB installieren 520BDB-Startoptionen 521Kennzeichen von BDB-Tabellen 521Was in naher Zukunft bei BDB in Ordnung gebracht werden muss 523Betriebssysteme, die von BDB unterstützt werden 523Fehler, die bei der Benutzung von BDB-Tabellen auftreten können 523
Kapitel 8: MySQL-APIs 525MySQL-PHP-API 525
Allgemeine Probleme mit MySQL und PHP 525
MySQL-Perl-API 526DBI mit DBD::mysql 526Die DBI-Schnittstelle 526Portable DBI-Methoden 527MySQL-spezifische Methoden 532Weitere DBI/DBD-Informationen 533
MySQL-ODBC-Unterstützung 533Wie Sie MyODBC installieren 534Wie Sie die verschiedenen Felder im ODBC-AdministratorProgramm ausfüllen 535Verbindungsparameter für MyODBC 535Wie Sie Probleme mit MyODBC berichten 537Programme, die bekanntermaßen mit MyODBC zusammenarbeiten 537Wie man den Wert einer AUTOJNCREMENT-Spalte in ODBC erhält 542Probleme mit MyODBC berichten 542
MySQL-C-API 543C-API-Datentypen 544C-API-Funktionsüberblick 547C-API-Funktionsbeschreibungen 550C-Threaded-Funktionsbeschreibungen 585C-Embedded-Server-Funktionsbeschreibungen 585Häufige Fragen und Probleme bei der Benutzung der C-API 587Client-Programme bauen 589Wie man einen threaded Client herstellt 589libmysqld, die eingebettete MySQL-Server-Bibliothek 590
MySQL-C++-APIs 598Borland C++ 598
12
Inhaltsverzeichnis
MySQL Java Connectivity (JDBC) 598MySQL-Python-APIs 598MySQL-Tcl-APIs 598MySQL-Eiffel-Wrapper 598
Kapitel 9: MySQL erweitern 599Hinzufügen neuer Funktionen zu MySQL 599
CREATE FUNCTION / DROP FUNCTION-Syntax 599Hinzufügen einer neuen benutzerdefinierten Funktion 600Hinzufügen einer neuen nativen Funktion 606
Hinzufügen neuer Prozeduren zu MySQL 607Prozeduranalyse 608Eine Prozedur schreiben 608
MySQL-Interna 608MySQL-Thread 608MySQL-Test-Suite 609
Anhang A: Wie man feststellt, was Probleme verursacht 613Einige gebräuchliche Fehler bei der Benutzung von MySQL 614
Access denied-Fehler 614MySQL server has gone away-Fehler 614Can't connect to [local] MySQL server-Fehler 615Host'...' is blocked-Fehler 617Too many connections-Fehler 617Some non-transactional changed tables couldn't be rolled back-Fehler 617No free memory-Fehler 618Packet too large-Fehler 618Kommunikationsfehler / Abgebrochene Verbindung 618The table is full-Fehler 619Can't create/write to file-Fehler 619Command out of sync-Fehler in Client 620
User ignored-Fehler 620Table 'xxx' doesn't exist-Fehler 620Can&tacute; initialize charset xxx-Fehler 620File Not Found 621
Installationsbezogene Themen 622Probleme beim Linken mit der MySQL-Client-Bibliothek 622Wie man MySQL als normaler Benutzer laufen läßt 622Probleme mit Dateirechten 623
Administrationsbezogene Themen 624Was zu tun ist, wenn MySQL andauernd abstürzt 624Wie ein vergessenes Passwort zurückgesetzt wird 626Wie MySQL mit vollen Festplatten umgeht 627Wohin MySQL temporäre Dateien speichert 627Wie Sie die MySQL-Socket-Datei Vtmp/mysql.sock' schützen oder ändern . . . 628Zeitzonen-Probleme 628
13
Inhaltsverzeichnis
Anfragenbezogene Themen 629Groß-/Kleinschreibung beim Suchen 629Probleme bei der Benutzung von DATE-Spalten 629Probleme mit NULL-Werten 630Probleme mit alias 631Zeilen aus verwandten Tabellen löschen 631Probleme bei keinen übereinstimmenden Zeilen lösen 631
Tabellendefinitionsbezogene Themen 632Probleme mit ALTER TABLE 632Wie man die Reihenfolge der Spalten in einer Tabelle ändert 633TEMPORARY TABLE-Probleme 633
Anhang B: Firmen, die MySQL einsetzen 635Allgemeine News-Sites 635Einige Web-Suchmaschinen 635Einige Informations-Suchmaschinen mit Konzentration auf bestimmte Felder636
Online-Magazine 636Websites, die MySQL als Backend benutzen 636Einige Domain- / Internet- / Web- und verwandte Services 637Websites, die PHP und MySQL benutzen 637Einige MySQL-Berater 638Programmierung 638Nicht kategorisierte Seiten 638
Anhang C: MySQL-Benutzung durch Kunden 641
Anhang D: Beigesteuerte Programme 643
Anhang E: sec-APIs 645Clients 647Web-Werkzeuge 650Performance-Benchmark-Werkzeuge 651Authentifizierungswerkzeuge 651Konverter 652MySQL mit anderen Produkten benutzen 653Nützliche Werkzeuge 653RPMs für gebräuchliche Werkzeuge (die meisten sind für RedHat 6.1) 654Nützliche Funktionen 654Windows-Programme 654Nicht kategorisiert 654
14
Inhaltsverzeichnis
Anhang F: Danksagungen 655Entwickler bei MySQL AB 655Kontributoren zu MySQL 657Unterstützer von MySQL 664
Anhang G: MySQL-Änderungsverlauf (Change History) 665Änderungen in Release 4.0.x (Entwicklung; Alpha) 665
Änderungen in Release 4.0.2 665Änderungen in Release 4.0.1 665Änderungen in Release 4.0.0 666
Änderungen in Release 3.23.x (Stabil) 667
Anhang H: Anmerkungen zur Portierung auf andere Systeme 697Einen MySQL-Server debuggen 698
MySQL zum Debuggen kompilieren 698Trace-Dateien erzeugen 699mysqld unter gdb debuggen 699Einen Stack-Trace benutzen 700Log-Dateien benutzen, um Gründe für Fehler in mysqld zu finden 701Einen Testfall herstellen, wenn Sie Tabellenbeschädigung feststellen 702
Einen MySQL-Client debuggen 703Das DBUG-Paket 703Sperrmethoden 705Anmerkungen zu RTS-Thread 706Unterschiede zwischen verschiedenen Thread-Paketen 707
Anhang I: Umgebungsvariablen 709
Anhang J: Beschreibung der MySQL-Syntax für reguläre Ausdrücke 711
Anhang K: GNU GENERAL PUBLIC LICENSE 715Vorwort 715Anhang: Wie Sie diese Bedingungen auf Ihre neuen Programme anwendbarmachen 719
Anhang L: GNU LESSER GENERAL PUBLIC LICENSE 723Vorwort 723Anhang: Wie Sie diese Bedingungen auf Ihre eigenen, neuen Bibliothekenanwenden können 730
Stichwortverzeichnis 733
t15