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

1. Links

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

OffeneFrage: Wie kann ich ein Passwort fuer die Datenbank vergeben? -- ThomasHochstetter 2004-05-13 20:54:13

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

  1. Hochkomma, Umschalt+# bei deutscher Tastatur (1)

MySQL (zuletzt geändert am 2018-08-29 13:20:18 durch JonesHamatoma)