Hier eine kleine
Übersicht/Sammlung der
grundlegenden Schritte, um eine
MySQL-Datenbank auf
Linux-Ebene (CentOS) zu installieren, einzurichten, eine Datenbank mit Tabellen zu erstellen und damit zu arbeiten - ideal für
Anfänger.
MySQL installieren
yum install mysql
yum install mysql-server
Wichtiger Hinweis:
Unter CentOS 6.5 (RHEL 6.5) kommt z.B. noch die Version 5.1 von MySQL zum Einsatz. Wer eine neuere Version verwenden möchte, der kann diese auch über
ein MySQL-Repository beziehen!
MySQL einrichten/starten
chkconfig --levels 235 mysqld on (
mysqld beim Serverstart mit starten)
/etc/init.d/mysqld start (mysqld gleich starten)
MySQL sicher machen (Passwort)
MySQL ist der Einfachheit halber zuerst einmal ziemlich offen was die Berechtigungen angeht, ohne ein Passwort, mit Vollzugriff auf die Datenbanken und mit einem anonymen Benutzer.
Das wäre natürlich fatal für die Sicherheit im produktiven Einsatz!
Ganz besonders
wichtig ist daher das Ausführen des folgenden Befehls:
mysql_secure_installation
- Altes Passwort eingeben (leer)
- Neues Kennwort eingeben!
- Anonyme Benutzer entfernen!
- Login von Extern untersagen!
- Testdatenbank (Zugriff) entfernen
- Rechtetabellen neu laden
Hierbei geht es aber erst einmal nur um den 'root'-Zugang; zum weiteren
Abhärten (Steigerung der Sicherheit) sollte man dann auch noch
Benutzer anlegen, die ggf. nur eingeschränkte Rechte auf bestimmte Tabellen besitzen, siehe
MySQL-Benutzerkontenverwaltung.
MySQL-Datenbank und Tabelle erstellen
mysqladmin -u root -p create DATENBANK (
Datenbank erstellen)
(Passwort ist standardmäßig leer)
mysql -p
mysql>
use DATENBANK;
mysql>
CREATE TABLE Tabelle (id INT NOT NULL AUTO_INCREMENT, Text VARCHAR(10) NOT NULL, PRIMARY KEY (id)); (
Tabelle erstellen, siehe auch
Datentypen und deren
Speicherbedarf)
mysql>
ALTER TABLE Tabelle MODIFY Text VARCHAR(255); (nachträgliche Änderung vornehmen)
mysql>
ALTER TABLE Tabelle ADD eMail VARCHAR(50); (nachträgliche Erweiterung)
mysql>
CREATE INDEX Textindex on Tabelle (Text); (Index erstellen)
mysql>
LOAD INDEX INTO CACHE Tabelle; (Tabellenindex gleich in den Speicher laden (MyISAM))
mysql>
ALTER TABLE Tabelle DROP INDEX Textindex; (Index löschen; auch für Spalten mgl.)
mysql>
TRUNCATE TABLE Tabelle; (Tabelle leeren (
FLUSH ist für Cache))
mysql>
DROP TABLE Tabelle; bzw.
DROP DATABASE DATENBANK; (löscht Tabelle/Datenbank)
mysql>
exit
Dateien auf Dateisystemebene finden
Die erzeugten Datenbankdateien kann man sich dann auf Dateisystemebene gleich schon mal anzeigen lassen:
cat /etc/mysql/my.cnf oder
cat /etc/my.cnf ("datadir=");
my.ini unter Windows (C:\Programme)
ls -la /var/lib/mysql/DATENBANK
MyISAM-Struktur:
./
db.opt (Datenbankeigenschaften)
./
Tabelle.frm (Spalten (Tabellendefinition))
./
Tabelle.MYD (Daten)
./
Tabelle.MYI (Indizes)
InnoDB-Struktur:
./
db.opt (Datenbankeigenschaften)
./
Tabelle.frm (Spalten (Tabellendefinition))
./
Tabelle.ibd (Daten und Indizes)
Hierfür ist die Option
innodb_file_per_table in der Konfigurationsdatei "my.cnf" zu beachten; ohne jene werden Tabellen in einem gemeinsamen "
Tablespace" gespeichert, ohne diesen aber auch einzelne IBD-Dateien nicht zugänglich wären (
umständlicher als bei MyISAM). Es gibt natürlich
Vor- und ggf. Nachteile, aber der File-per-Table-Modus ist ab MySQL 5.6.6 der Standard.
MySQL-Datenbank nutzen/verwenden
mysql -p
mysql>
use DATENBANK;
mysql>
INSERT INTO Tabelle (Text) values ("Hallo!"); (Daten einfügen; Vorsicht mit DELAYED)
mysql>
SELECT * FROM Tabelle; (Inhalt der Tabelle ausgeben)
mysql>
UPDATE Tabelle SET Text = "Ciao!" WHERE id = 1; (Inhalt ändern)
mysql>
REPLACE INTO Tabelle (Text) values ("Hallo!"); (
Ersetzung; klappt aber nur, wenn "Text" ein Schlüsselfeld ist (PRIMARY oder UNIQUE KEY), ansonsten wird ein INSERT vorgenommen)
mysql>
DELETE FROM Tabelle WHERE id=1; (Datensatz löschen)
mysql>
INSERT INTO Tabelle (id, Text) VALUES (1, "Hallo!") ON DUPLICATE KEY UPDATE Text="Ciao!"; ("
Upsert"; entweder INSERT oder UPDATE; macht nur Sinn wenn "Text" PRIMARY oder UNIQUE KEY wäre, statt hier mit der fortlaufenden ID (autoinkrementeller Wert) als Primärschlüssel)
mysql>
CREATE VIEW Sicht AS SELECT Text FROM Tabelle WHERE id<10; (virtuelle Tabelle erstellen, hier mit den ersten 10 Einträgen)
mysql>
SELECT * FROM Tabelle WHERE Text="Ciao!"; (bestimmten Inhalt der Tabelle ausgeben)
mysql>
exit
Mit
SELECT kann man dann übrigens ganz viele
tolle Sachen machen, etwa mittels
JOINs.
Des Weiteren gibt es übrigens noch LOAD DATA INFILE, HANDLER und DO, aber das hier rein nur zur Vollständigkeit. Für Fortgeschrittene gibt es auch sog. "Subqueries" (auch "Subselects" genannt), also Unterabfragen innerhalb einer Abfrage.
Siehe auch
Wichtig: Wenn Sie Eingaben von Benutzern verarbeiten, etwa über PHP (Formulareingaben oder über Parameter in der URL), dann verwenden Sie unbedingt
Platzhalter (
Prepared Statements), Escapes/Typumwandlungen oder Data Objects um eine
SQL-Injection (Verarbeitung von Code) zu verhindern!
Tipp: Eingegebene Befehle kann man auf Konsolenebene (Terminal) mit der [Pfeil-nach-oben]-Taste erneut aufrufen, gespeichert werden diese im Benutzerprofilverzeichnis als
.bash_history und für MySQL in der
.mysql_history (als einfacher Text); die kann man sich dann auch sichern!