MySQL ist eine echte multiuser, multithreaded SQL-Datenbank und wird von vielen Website-Betreibern eingesetzt. MySQL ist eine Client/Server-Implementierung, die aus einem Server-Dämon mysqld und vielen Client-Programmen sowie Bibliotheken für PERL, PHP3, PHP4 sowie ASP besteht.
Homepage: http://www.mysql.com/
Lizenz: GPL (kommerzielle Lizenz verfügbar), Bibliotheken vor MySQL4: LGPL
Inhalt
Inhaltsverzeichnis
- Links
- Eigenschaften
- Lizenzproblematik
-
So funktioniert MySQL
- Voraussetzung für die Installation
- Installation und Start des Servers mysqld
- Administration durch den Befehl mysqladmin
- Benutzung durch den Befehl mysql (Konsolenmodus)
- Anzeigen einer Datenbank
- mysql-navigator
- Grundwissen
- Tabellen
- Daten hinzufügen
- Daten ausgeben
- Daten ändern
- Daten löschen
- Dump-Dateien
- Datentypen
- Rechte
- Root-Passwort ändern
- Tipps & Tricks
- Fehlermeldungen
1. Links
phpMyAdmin - Ideales Webinterface für alle, die einen WebServer mit PHP und MySQL betreiben - und keine Profis in SQL sind....
MySQLCC - GUI Adminstrationstool
OpenOffice.org - zusammen mit MySQL ein guter Ersatz für MS Access
2. Eigenschaften
In der Praxis ist MySQL sehr viel schneller als z.B. ORACLE oder INFORMIX. Dieser Geschwindigkeitsvorteil ist allerdings durch unvollständige SQL-Standardkonformität erkauft. Diese Situation hat sich aber mit dem Erscheinen der Version 4.0 verbessert (Unterstützung des ACID Prinzips, Sub-Selects).
Die wichtigsten Eigenschaften von MySQL sind Geschwindigkeit, Stabilität und einfache Bedienbarkeit. MySQL wurde ursprünglich entwickelt, weil auf TCX (dem Server der Entwickler) ein SQL-Server benötigt wurde, der sehr große Datenbanken handhaben konnte, und zwar um eine Größenordnung schneller, als die Datenbankhersteller damals liefern konnten. MySQL ist nun nun seit 1996 auf vielen tausend Sites im Internet und Intranet im Einsatz und erfreut sich hier wachsender Beliebtheit. MySQL ist bei vielen tausend Unternehmen im täglichen Einsatz, von denen über 500 mehr als 7 Millionen Einträge bzw. mehr als 100 Gigabyte an Daten managen. Auf der Site http://www.rent-a-database.de/ ist eine Auszug einer Referenzliste zu finden.
MySQL ist geradezu prädestiniert zur Beschleunigung bestehender ACCESS-Datenbanken. Diese Kombination ermöglicht es, mit nur kleinen Änderungen in ACCESS die Datenbankabfragen um Faktor 3-100 zu beschleunigen.
Der Grundstock, um den MySQL herum gebaut worden ist, ist eine Liste von Routinen, die sich im täglichen Einsatz seit Jahren bewährt haben. Obwohl MySQL dauernd weiter entwickelt wird, hat es zu jedem Zeitpunkt der Entwicklung stets zuverlässig und stabil gearbeitet.
geklaut von: http://www.little-idiot.de/mysql/mysql-27.html
3. Lizenzproblematik
Mit der Einführung der Version 4 wurde die Lizenz der MySQL-Bibliotheken von der LGPL auf die GPL geändert. Das führt dazu, dass diese Version von vielen Programmen (alle, die nicht unter der GPL stehen) nicht mehr genutzt werden darf (Für PHP gibt es eine Ausnahme-Regelung). Aus diesem Grund findet man in den meisten LinuxDistributionen nur die Version 3.
4. So funktioniert MySQL
4.1. Voraussetzung für die Installation
Der eigene Rechner muss erreichbar sein. Kontrollieren:
hostname ping hetol
oder mit
ping `hostname`
Der Rechner muss auch als localhost erreichbar sein.
ping localhost
4.2. Installation und Start des Servers mysqld
Am Einfachsten installiert man MySQL aus den Paketen der Distribution.
Bei Debian 3.1 installiert man z.B.: mysql-server-4.1, mysql-navigator, mysql-client-4.1, mysql-admin, mysql-admin-common
Eine Suche nach dem Stichwort "mysql" im Instalaltionsmanager Debian/Synaptic zeigt viele Hilfsprogramme und kurze Erklärungen dazu an.
Nach der Installation muss man die Datenbank initialisieren:
mysql_install_db
Dabei wird man darauf hingewiesen, dass man für den Datenbank-User root ein Passwort vergeben soll.
Dazu muss man MySQL aber erst starten (bei RedHat/Fedora service mysqld start). Bei Debian sarge 3.1 geht das durch:
su cd /etc/init.d ./mysql restart
4.3. Administration durch den Befehl mysqladmin
mysqladmin -uroot password 'neues passwort'
Achtung: MySQL verwendet unterschiedliche Passwörter, je nachdem ob man lokal (über localhost) oder von extern auf die Datenbank zugreift. Das heißt man muss für root noch ein zweites Passwort vergeben.
mysqladmin -uroot -hhostname password 'neues passwort'
4.4. Benutzung durch den Befehl mysql (Konsolenmodus)
Wenn der Server läuft, kann man mit mysql Datenbanken erzeugen, Tabellen erzeugen und Daten in Tabellen eingeben.
hetol:/d/home/html/hjh/linux/debian3.1# mysql -hlocalhost -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 10 to server version: 4.1.11-Debian_4sarge2-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> create database xx18; Query OK, 1 row affected (0.26 sec) mysql> create table telefonliste (nachname char(18), vorname char(14), firma char(12), email char(18), handy char(16), tel char(20)); Query OK, 0 rows affected (0.31 sec)
Hilfe gibt es mit dem Befehl help
4.5. Anzeigen einer Datenbank
Erst feststellen, wie die Datenbank überhaupt heißt:
cd /var/lib/mysql ; ls -l zeigt total 28732 -rw-r--r-- 1 root root 0 2006-06-15 14:54 debian-4.1.flag -rw-rw---- 1 mysql mysql 18874368 2006-07-03 08:02 ibdata1 -rw-rw---- 1 mysql mysql 5242880 2006-07-03 08:02 ib_logfile0 -rw-rw---- 1 mysql mysql 5242880 2006-07-03 08:02 ib_logfile1 drwxr-xr-x 2 mysql root 4096 2006-06-15 14:54 mysql drwxr-xr-x 2 mysql root 4096 2006-06-15 14:54 test drwx------ 2 mysql mysql 4096 2006-06-15 18:30 wikidb ats@hotrenk:/var/lib/mysql$ hotrenk:/var/lib/mysql# cd wikidb hotrenk:/var/lib/mysql/wikidb# ls atswikiarchive.frm atswikioldimage.frm atswikitrackbacks.frm atswikicategorylinks.frm atswikipage.frm atswikitranscache.frm atswikiexternallinks.frm atswikipagelinks.frm atswikiuser.frm atswikihitcounter.frm atswikiquerycache.frm atswikiuser_groups.frm atswikiimage.frm atswikirecentchanges.frm atswikiuser_newtalk.frm atswikiimagelinks.frm atswikirevision.frm atswikiuser_newtalk.MYD atswikiinterwiki.frm atswikisearchindex.frm atswikiuser_newtalk.MYI atswikiipblocks.frm atswikisearchindex.MYD atswikivalidate.frm atswikijob.frm atswikisearchindex.MYI atswikiwatchlist.frm atswikilogging.frm atswikisite_stats.frm db.opt atswikimath.frm atswikitemplatelinks.frm atswikiobjectcache.frm atswikitext.frm
Befehl zum Anzeigen aller in der Datenbank befindlichen Tabellen mysqlshow -u root wikidb Befehl zum Anzeigen aller Spalten der Tabelle atswikiuser mysqlshow -u root wikidb atswikiuser
4.6. mysql-navigator
Aufruf mysql-navigator -p blablabla -u root -h localhost
4.7. Grundwissen
MySQL ist eines der schnellsten und am weitesten verbreitesten Datenbanksysteme. Es ist sehr ausgereift und frei verfügbar.
Solange Sie nicht über einen lokalen MySQL-Server verfügen, benötigen Sie ein Remote-Control-Programm wie z.B. OpenSSH, um auf die Datenbank zugreifen zu können. Nach erfolgreicher Anmeldung befinden Sie sich auf einem UNIX-ähnlichem System. Es können alle Befehle ausgeführt werden, zu denen man berechtigt ist.
Um zum MySQL-System Verbindung aufzunehmen, können Sie in den Befehl mysql verwenden. Die Syntax lautet:
mysql -h hostname -u benutzername -p[passwort]
Wenn die Verbindung erfolgreich hergestellt werden kann, erhalten Sie eine Meldung ähnlich dieser:
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 to server version: 3.22.29
Nun müssen Sie angeben, mit welcher Datenbank Sie arbeiten möchten.
mysql> use ihredatenbank; Database changed;
OffeneFrage: Wie kann ich ein neues Passwort vergeben? -- ThomasHochstetter 2007-02-07 14:46:39
4.8. Tabellen
Die einzelnen Datensätzen werden in Tabellen gespeichert. Jede Datenbank kann aus beliebig vielen Tabellen bestehen. Alle Tabellen lässt man mittels
mysql> show tables;
anzeigen.
Eine Tabelle erstellen Sie mit dem Befehl create table. Bei der Definition einer Tabelle legen Sie auch fest, welcher Datentyp einem Feld zugewiesen wird. Beispiel:
mysql> CREATE TABLE dis ( -> subject VARCHAR(80), -> text TEXT, -> date INT UNSIGNED, -> au_in INT UNSIGNED, -> id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY); Query OK, 0 rows affected (0.01 sec)
Die Eingabe "SHOW columns FROM dis;" sollte nun ungefähr diese Ausgabe erzeugen:
mysql> SHOW columns FROM dis; Field Type NullKey Default Extra subject varchar(80) YES NULL text text YES NULL date int(10) unsigned YES NULL au_in int(10) unsigned YES NULL id int(10) unsigned PRI0 auto_increment rows in set (0.01 sec)
Mit "SHOW tables;" können Sie sich alle in der Datenbank vorhandenden Tabellen ausgeben lassen.
4.9. Daten hinzufügen
Die Tabelle wollen wir nun mit Inhalt füllen. Sie müssen dafür genau so viele Felder verwenden, wie in der Tabelle definiert sind. Zeichenketten müssen mit dem '-Zeichen 1 umschlossen werden. Die einzelnen Werte werden mit Kommata voneinander getrennt:
mysql> INSERT INTO dis VALUES ('LINUXWIKI.org', -> 'Die Wiki-Seite rund um Linux', -> 0, 1, NULL); Query OK, 1 row affected (0.01 sec)
4.10. Daten ausgeben
Um Datensätze auszuwählen und auszugeben, benutzen Sie den Befehl "Select":
mysql> SELECT * FROM dis;
"*" gibt an, dass Sie alle Felder anfordern. Um nun die beiden Felder subject und text auszugeben, ersetzen Sie den Stern durch subject, text:
mysql> SELECT subject, text FROM dis;
Falls Sie nicht alle Datensätze, sondern nur solche, die bestimmte Bedingungen erfüllen, auswählen möchten, setzen Sie am Ende der Anfrage WHERE([bedingung]).
Um die Ausgabe auch noch zu sortieren, verwenden Sie die Option ORDER BY [Feld].
mysql>SELECT subject, text, date FROM dis WHERE (au_in = 1) ORDER BY date DESC;
Dies gibt die Felder "subject", "text" und "date" aller Datensätze mit "au_in" 1 nach dem Datum absteigend sortiert aus.
4.11. Daten ändern
Bereits eingegebene Daten können mit dem "Update"-Befehl auch wieder geändert werden:
mysql> UPDATE wiki SET subject = 'linuxwiki.org', date = 2323232323 WHERE id = 1;
Hier wird die erste eingegebene Nachricht (id 1) verändert.
4.12. Daten löschen
Bereits eingegebene Daten können auch wieder gelöscht werden. Hierzu steht der Befehl "Delete" zur Verfügung:
mysql> DELETE FROM wiki WHERE id = 1;
4.13. Dump-Dateien
Viele MySQL-Scripte, die man im Internet findet, sind reine Textdateien mit den auszuführenden MySQL-Befehlen. Beispiel: Nehmen wir an, dass die Datei wikiinfo.sql lautet, so müssen Sie folgendes eingeben:
mysql> mysql [...] < wikiinfo.sql
4.14. Datentypen
- Int
Ganzzahlen von -2.147.483.648 bis 2.147.483.647. Mit Option unsigned von 0 bis 4.294.967.295.
- BigInt
- Größter ganzzahliger Datentyp von -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807 (oder von 0 bis 18.446.774.073.709.551.615 ohne Vorzeichen).
- Float
Gleitkommazahlen. Optional in Klammern: Größe - mynumber FLOAT (6,2); nimmt sechs Zahlen mit 2 Nachkommastellen auf.
- Char ([Länge])
- Zeichenkette mit maximal 255 Zeichen; gespeicherte Länge abhängig von der Zahl in Klammern.
- Varchar ([Länge])
- Zeichenkette mit maximal 255 Zeichen; gespeicherte Länge abhängig von der Zahl in Klammern, ansonsten Anzahl der übergebenen.
- TEXT
- Text mit maximal 65.535 Zeichen.
4.15. Rechte
Rechte von Benutzern werden mit dem grant-Befehl (SQL) definiert und evt. mit dem revoke-Befehl korrigiert. Beispiel:
mysql mysql mysql> grant all on *.* to 'dbadmin'@'localhost' identified by "weissnett"; mysql> grant all on forum.* to forumadmin@localhost identified by "MeinPasswort"; mysql> grant SELECT,INSERT,DELETE,UPDATE on forum to 'forumuser'@'%' identified by "any";
Anmerkung: to forumuser@% geht nicht, es muss to 'forumuser'@'%' heißen!
4.16. Root-Passwort ändern
Wenn bei der Installation kein Root-Passwort festgelegt wurde, man aber später eines haben will:
mysql -u root mysql update user set authentication_string=password('ge:heimesp_w1'), plugin='mysql_native_password' where user='root';
Hat man bei der Installation ein Root-Passwort gesetzt und will ohne auskommen:
update user set authentication_string='', plugin='auth_socket' where user='root';
Hinweis: ein "mysqladmin -u root password <neues-pw>" reicht nicht, da das Plugin auch geändert werden muss. Das erledigt mysqladmin nicht.
5. Tipps & Tricks
- Achten Sie immer darauf, dass jeder Ihrer Befehle mit einem Semikolon abgeschlossen wird.
- Gross- und Kleinschreibung spielt bei Befehlen keine Rolle.
- Bei Vergleichen muss man == und nicht = verwenden.
hmm...
mysql> select 1 == 1; ERROR 1064: You have an error in your SQL syntax near '== 1' at line 1 mysql> select 1 = 1; +-------+ | 1 = 1 | +-------+ | 1 | +-------+ 1 row in set (0.01 sec) mysql>
OffeneFrage: Wie kann ich ein Passwort fuer die Datenbank vergeben? -- ThomasHochstetter 2004-05-13 20:54:13
Mit dem grant-Befehl (siehe Kapitel "Rechte"). Dabei kannst Du ziemlich fein abstufen, wer von wo aus was darf (mehr siehe SQL Kapitel Rechte).
Z.B. grant all on MeineDB.* to localhost identified by "Geheim"; Dies sollte für alle Benutzer und die DB MeineDB das Passwort "Geheim" setzen.
- Das wird vom Konsolenprogramm mysql akzeptiert.
Von meinem nicht -- ThomasHochstetter 2004-05-15 16:20:33
Es wäre einfacher Dir zu helfen, wenn Du sagen würdest, was für eine Fehlermeldung kommt! Hast Du den client mit: mysql mysql -u root gestartet?
- Das wird vom Konsolenprogramm mysql akzeptiert.
MySQL ist ein relativ unsicherer Dienst, weshalb man ihn absichern sollte.
6. Fehlermeldungen
6.0.1. ERROR 1130 (00000): Host 'localhost.localdomain' is not allowed to connect to this MySQL server
Meldung:
mysql: For server side help, type 'help contents' mysql> connect mysql hetol; ERROR 1130 (00000): Host 'localhost.localdomain' is not allowed to connect to this MySQL server mysql> status; -------------- mysql Ver 14.7 Distrib 4.1.11, for pc-linux-gnu (i386) No connection
Abhilfe: root-Passwort für die Datenbank setzen: /usr/bin/mysqladmin -u root password blablabla
6.0.2. '#HY000Host 'localhost.localdomain' is not allowed to connect to this MySQL server'
Meldung:
hetol:/d/home/html/hjh/linux/debian3.1# /usr/bin/mysqladmin -p blablabla -h hetol -u root Enter password: /usr/bin/mysqladmin: connect to server at 'hetol' failed error: '#HY000Host 'localhost.localdomain' is not allowed to connect to this MySQL server' hetol:/d/home/html/hjh/linux/debian3.1# Ursache: Es gibt zwei Benutzer : "root@localhost" und "root@hetol", auch wenn das der gleiche Rechner ist, haben diese beiden unterschiedliche Passwörter.
Abhilfe: Anstatt den Rechnernamen "hetol" benutze den Alias "localhost"
= Diskussion ==
6.0.3. Backup zurücklesen
Mysql (4.0) kann sein eigenes Backup unter Umständen nicht zurücklesen. Zeilennamen, die Leerzeichen enthalten sind in mysql mittels Tüddelchen drumherum möglich, im Backup mittels mysqldump aber nicht mit diesen dekoriert. Per Hand einige hundert Megabyte Dumpfile zu korrigieren macht kein Spaß ...
Habe deshalb ich Script geschrieben, das Rumps "repariert", gebe ich gerne auf Anfrage weiter.
4.1 dumpt vernünftig, wie ich gerade ausprobiert habe
--ThomasKalka OffeneFrage: Wie füge ich einen Benutzer hinzu? -- ThomasHochstetter 2005-10-12 20:11:00
User entstehen bei der GRANT Anweisung automatisch. Aber Achtung: User mit gleichem Namen aber unterschiedlichem Hostnamen sind unterschiedliche User (z.B. root@localhost und root@name_des_rechners) und können unterschiedliche Passwörter haben.
Hochkomma, Umschalt+# bei deutscher Tastatur (1)