MySQL [ˌmaɪɛskjuːˈɛl] ist ein Relationales Datenbankverwaltungssystem der schwedischen Firma MySQL AB die mittlerweile 1) durch Sun Microsystems übernommen wurde. MySQL ist als Open-Source-Software für verschiedene Betriebssysteme verfügbar.
| Befehl / Programm | Funktion |
|---|---|
| mysqld | MySQL server daemon (=Dienst) |
| safe_mysqld | Server prozess Monitor |
| mysqlaccess | Programm zum Erzeugen von MySQL-Benutzern |
| mysqladmin | Administrationstool |
| mysqldump | Programm für das Erstellen von Datenbankbackups („dump“) |
| mysql | Kommandozeilenzugriff auf MySQL |
| mysqlshow | listest alle MySQL-Datenbanken auf |
SQL-Befehle zum anlegen eines neuen Benutzers user1 mit dem passwort „passwort1“, der alle Benutzerrechte für die neue Datenbank db1 bekommt.
CREATE USER 'user1'@'localhost' IDENTIFIED BY 'passwort1'; GRANT USAGE ON * . * TO 'user1'@'localhost' IDENTIFIED BY 'passwort1' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; CREATE DATABASE IF NOT EXISTS `db1` ; GRANT ALL PRIVILEGES ON `db1` . * TO 'user1'@'localhost';
kompilieren aus den Quellen:
(entpacken: tar xvzf ARCHIVDATEI) ./configure make make install
mindestens für den letzten Schritt braucht man root-Rechte (also mit sudo oder als root starten) und für alle folgenden Möglichkeiten auch.
als vorkompiliertes Paket installieren:
rpm -i PAKETDATEI.rpm oderdpkg -i PAKETDATEI.debOder am einfachsten aus einem Repository (Sammlung von Paketen, meist direkt aus dem Internet):
yum install mysqlap-get install mysql
einige Einstellungen von MySQL: Datei /etc/mysql/my.conf
bindaddress = 127.0.0.1
WICHTIG: soll nur auf lokale Anfragen antworten, sonst lauscht mysql auf Logins von anderen Hosts (das sollte man nur erlauben wenn es benötigt wird, z.B. bei spezialisierten Datenbankservern)
user = mysql
Der Benutzer unter dem mysql läuft, am besten auch überprüfen das sich der Nutzer mysql nicht über ssh einloggen kann.
port = 3306
Der Port auf dem Mysql auf Anfragen lauscht.
# log = /var/log/mysql.log # log = /var/log/mysql/mysql.log
Extra-logdateien für Mysql, standardmäßig auskommentiert weil die Dateien (abhängig von der Menge der Anfragen) schnell groß werden und Leistung kosten.
mysqladmin (Befehle z.B. status, create, drop, stop)
Benutzer (db mysql,tabelle user)
Rechte (globale [admins], lokale [user]: auf eine Datenbank beschränkte Rechte)
Offline-Backup
/etc/init.d/mysqld stop
/var/lib/mysql z.B. nach /tmp/mysql-backup: cp -r /var/lib/mysql /tmp/mysql-backup
/etc/init.d/mysqld start
Online-Backups (während des Betriebs) haben jedoch den Vorteil nicht nur die Binärdateien zu sichern (die Versions-/Architekturabhängig sind!) sondern korrekte SQL-Statements zu produzieren die wieder eingespielt werden können.
mysqlhotcopy -u USER -p PASSWORT DATENBANK /tmp
sichert alle (My-) ISAM-Tabellen der „DATENBANK“.
./mysqlsnapshot -u USER -p PASSWORT -s /tmo --split -n
sichert alle (My-) ISAM-Tabellen in eine tar-Datei pro Datenbank.
mysqldump -B db1 db2 db3 -u root -p Passwort > Backupdatei.sql
| Option | Effekt |
|---|---|
| --all-databases | sichert alle Datenbanken |
| -B | Datenbanken (hier db1 db2 db3), die man sichern will |
| -u | user für mysql |
| -p | Passwort, wenn keins angegeben ist fragt er nach. Alternativ kann das Passwort auch in der Datei .my.conf im home-Verzeichnis gesichert werden: Der Speicherort des „Option-File“ kann auch per Option angegeben werden: --defaults-file=/etc/my.cnf |
Das ganze wird dann in Backupdatei.sql geschrieben und kann später wieder zurückgespielt werden.
Offline-Backup
mysql> USE mysql; mysql> INSERT INTO user SET Host ='localhost', User = 'dump', Password = Password('dump'), Select_priv ='Y', File_priv ='Y', Lock_tables_priv ='Y'; mysql> FLUSH PRIVILEGES;
Alternativ kann man einem bestehenden Nutzer (hier “dump”) diese Rechte auch zusätzlich erteilen:
GRANT SELECT , FILE , LOCK TABLES ON * . * TO ‘dump’@'localhost’;
In der Konsole sollte folgender Befehl erfolgreich sein:
mysqldump -u dump -pGEHEIM --all-databases > backup.sql
Oder das Passwort liegt in einer Datei /root/.my.cnf:
mysqldump -u dump --all-databases --defaults-file=/root/.my.cnf > backup.sql
wobei /root/.my.cnf den folgenden Inhalt hat:
[client] password=GEHEIM
Kommerzielle Version von Amanda.
Zmanda Recovery Manager for MySQL mit und ohne Support unter der GPL Zmanda: MySQL Online Backup How to setup and verify a backup solution for MySQL in 15 minutes - all using open source software
mysqladmin -u root -p create dbname
mysql [opt] dbname < datei.sql -u root
Falls der SQL-Dump schon eine Datenbank anlegt:
mysql --user=user_name --password=geheim < datei.sql
Replication ist das duplizieren der Daten auf einen anderen Server. Damit wird sichergestellt, dass die Daten konsistent bleiben, da beim einfachen Dump im laufenden Betrieb Inkonsistenzen durch nicht vollständige Transaktionen auftreten können.
Im Grunde genommen sehr grundsätzliche Dinge
Wie sichere ich MySQL gegen Hacker ab ? Keeping Your Password Secure Securityfocus: Securing MySQL Securing MySQ Securing a MySQL Server on Windows
Eng → D
The following is a quick-reference list of things to do when you're tightening the security of your MySQL server. Other excellent lists can be found at
http://www.databasesecurity.com/mysql.htm http://www.securityfocus.com/infocus/1667 http://www.kitebird.com/articles/ins-sec.html
Wenn der Start von MySQL nicht klappt, sollte man sich erstmal in den Log-Dateien schlau machen. Er guter Anlaufpunkt ist dabei das Systemlog (/var/log/syslog) in der sich dann evtl. folgende (von mir gekürzte!) Zeile finden lässt:
mysqld_safe[14698]: started mysqld[14701]: InnoDB: Started; log sequence number 0 43655 mysqld[14701]: [ERROR] Can't start server: Bind on TCP/IP port: Cannot assign requested address mysqld[14701]: [ERROR] Do you already have another mysqld server running on port: 3306 ? mysqld[14701]: [ERROR] Aborting
MySQL kann sicht also nicht an den Port 3306 binden. Jetzt gibt es zwei einfache Problemursachen:
sudo netstat -tulpen) nachprüfen. In diesem Fall existiert eine ähnliche Zeile zu Aktive Internetverbindungen (Nur Server) Proto Recv-Q Send-Q Local Address Foreign Address State Benutzer Inode PID/Program name tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 109 26526 22498/mysqld
/etc/mysql/my.cnf nach der Zeile bind-address = 127.0.0.1
schauen. Mit einem Befehl:
grep bind-address /etc/mysql/my.cnf
Als IP ist natürlich auch eine andere möglich, etwa wenn die Datenbank über Netzwerk erreichbar sein soll. Wenn diese IP nicht dem aktuellen Stand entspricht (etwa weil diese IP über DHCP vergeben worden ist und man nun eine neue hat) scheitert die Bindung zwangsläufig. Im Zweifel kann man mit sich mit ifconfig die aktuellen IPs der Netzwerkschnittstellen anzeigen lassen und einmal mit ping IP (wobei IP durch die eingetragene IP ersetzt werden muss) einen Kontaktversuch unternehmen kann. So ist es mir auch schon einmal untergekommen, das die Netzwerkschnittstelle loopback (lo) durch eine Fehleinrichtung nicht die IP 127.0.0.1 hatte.
MySQL bietet verschiedene Speicher-Engines für den Zugriff auf die Daten an. Jedes ist auf ihr Einsatz-Szenario optimiert.
MyISAM ist die Standard-Speicher-Engine von MySQL unter UNIX-basierten Systemen und ist für schnellen Zugriff auf Tabellen und Indizes ohne Transaktionssicherung gedacht.
Transaktionen bietet InnoDB an und ist unter Windows als die default-Engine eingestellt, allerdings unterstützt InnoDB keine Volltextsuche.
Wikipedia bietet einen guten Überblick über alle Speicher-Engines von MySQL.
Ein Datenbankindex, oder kurz Index, ist eine von den Datenstruktur getrennte Indexstruktur in einer Datenbank, die die Suche und das Sortieren nach bestimmten Feldern beschleunigt.
Ein Datenbanktrigger, meist nur Trigger genannt, ist eine Funktionalität von diversen Datenbankmanagementsystemen, insbesondere von großen relationalen Datenbankmanagementsystemen.
Der Begriff Gespeicherte Prozedur (GP) oder englisch Stored Procedure (SP) bezeichnet eine Funktion bestimmter Datenbankmanagementsysteme. In einer Stored Procedure können ganze Abläufe von Anweisungen unter einem Namen gespeichert werden, die dann auf dem Datenbankserver zur Verfügung stehen und ausgeführt werden können. Mit anderen Worten: Eine SP ist ein eigenständiger Befehl, der eine Abfolge von gespeicherten Befehlen ausführt.
Benutzerdefinierte Funktionen (engl. User Defined Function, Abk. UDF)) werden in Datenbanksystemen verwendet.
News
Navigation