Dies ist eine alte Version des Dokuments!
−Inhaltsverzeichnis
Datenbanken
Hier habe ich Informationen über die Standard Datenbanken unter Linux zusammen getragen. Hiermit meine ich die Datenbanken Software welche sich out of the Box über die Paketverwaltung installieren lässt.
MariaDB / MySQL
MySQL speichert seine Daten im Verzeichnis /var/lib/mysql/
.
.mysql_history
wird im User-Verz. abgelegt.
Unter Suse sollte man folgendes Kommando ausführen um die DB in einer produktiven Umgebung abzusichern:
mysql_secure_installation
Einige Kommandos unter Debian / SUSE:
dpkg-reconfigure mysql-server-5.0 =PW festlegen mysqladmin password =PW festlegen (SUSE) mysql_setpermission =PW zurücksetzen mysql -uroot -p =anmelden wenn PW gesetzt mysql_upgrade -p =Optimieren und Reparieren (SUSE)
Benutzer und Passwörter
Mit der folgenden Anweisung wird der Datenbank-Benutzer wordpressuser angelegt. Er darf sich mit dem Host localhost verbinden und soll das Kennwort geheim verwenden. Standardmäßig verfügt der Benutzer nach der Einrichtung über keine Datenbank-Berechtigungen.
create user 'wordpressuser'@'localhost' identified by 'geheim';
Nun sollen ihm alle Rechte für die Datenbank wordpressdb gewährt werden, was mit folgender Anweisung geschieht:
grant all on wordpressdb.* to 'wordpressuser'@'localhost';
Jetzt ist der Benutzer zur Nutzung der Datenbank wordpressdb berechtigt und kann z. B. neue Tabellen anlegen und diese mit Daten füllen. Außerdem darf er seine Datenbank löschen.
Den neuen Benutzer könnte man alternativ auch mit folgender Anweisung in einem Schritt anlegen und ihm die Rechte für seine Datenbank gewähren:
grant all on wordpressdb.* to 'wordpressuser'@'mywordpresspage.lan.de' identified by 'mypasswort';
root pw ändern:
mysql -u root
UPDATE mysql.user SET Password = PASSWORD('newpwd') -> WHERE User = 'root'; FLUSH PRIVILEGES;
MySQL-Benutzer löschen
Den gerade angelegten Benutzer kannst du mit folgender Anweisung löschen:
drop user 'simon'@'localhost';
Das Verwalten von Benutzern und Rechten ist mit folgenden Befehlen möglich:
GRANT ALL PRIVILEGES ON *.* TO NeuerUser IDENTIFIED BY 'passwort';
Dies legt einen neuen Benutzer an. In unserem Beispiel werden dem Benutzer NeuerUser dabei alle Rechte erteilt. Analog wird ein Benutzer „unbrauchbar“ gemacht, indem ihm mit dem REVOKE-Befehl alle Rechte entzogen werden. Der GRANT-Befehl kann auch nachträglich zum Zuweisen von Rechten benutzt werden:
GRANT Recht ON Was TO UserName;
Vergibt ein Recht. Dabei kann für Recht eingesetzt werden:
ALL PRIVILEGES, FILE, RELOAD, ALTER, INDEX, SELECT, CREATE, INSERT, SHUTDOWN, DELETE, PROCESS, UPDATE, DROP, REFERENCES, USAGE
Für Was kann ein Tabellenname oder Datenbankname.* (dann gilt das Recht für alle Tabellen dieser Datenbank) eingesetzt werden.
Der Zusatz WITH GRANT OPTION
beim GRANT-Befehl bewirkt, dass der Benutzer seine Rechte
an andere weitergeben darf.
Das Gegenteil von GRANT
ist REVOKE
. Mit REVOKE
werden Rechte entzogen:
REVOKE Recht ON Was FROM UserName;
Ansonsten gilt für REVOKE
das gleiche wie für GRANT
.
In mySQL kann man einem User zunächst alle Rechte entziehen:
REVOKE ALL PRIVILEGES ON * FROM UserName;
um ihm dann gezielt wieder bestimmte Rechte zu erteilen. Um sich anzeigen zu lassen, welche Rechte jemand hat, gibt man den Befehl ein:
SHOW GRANTS FOR Benutzer;
Nach Änderungen an den Benutzern und Rechten wird der folgende Befehl ausgeführt:
flush privilegs;
Welche MySQL Benutzer gibt es?
Dies steht in der mysql DB in der Tabelle user
, welche immer vorhanden ist.
DB Backup
Log dich als root in MYSQL ein und lass dir die Tabellen anzeigen.
SHOW DATABASES; SHOW TABLES;
Oder mach einfach ein Dump über die gesamte Datenbank. Wenn du nur:
mysqldump -uroot -p<passwort> --all-databases > backup_komplett.sql
machst, werden alle Datenbanken gesichert.
Export:
Dazu nutzen wir mysqldump
:
mysqldump -uUSER -pPASSWD --allow-keywords --opt DB > DB.sql
Verfeinerung: direkt mit gzip
packen:
mysqldump -uUSER -pPASSWD --allow-keywords --opt DB | gzip > DB.sql.gz
bei anschließenden Fehlern beim exportieren
Find your debian-sys-maint password in /etc/mysql/debian.cnf.
Einloggen in mysql und dann nutze:
GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '<password>' WITH GRANT OPTION; Replace <password> with your debian-sys-maint password. SHOW GRANTS for 'debian-sys-maint'@'localhost';
bei weiteren Fehlern:
dpkg-reconfigure mysql-server-5.0
Import:
Die exportierte Datei liegt nun auf dem neuen Server / Webspace. Dazu nutzen wir mysql:
mysql -uUSER -pPASSWD DB < DB.sql
Verfeinerung: direkt mit gzip entpacken:
gzip -dc DB.sql.gz | mysql -uUSER -pPASSWD DB
Falls das Backup / dump nicht einzuspielen geht, sollte die betreffende DATABASE nochmal mit DROP
richtig
entfernt werden. Dann mit CREATE
nochmal neu erstellen und ein weiteres mal einspielen.
kompletten dump einspielen mit mehreren DB's:
mysql -uroot < allDBs01.sql
Auf mysql promt(shell)
show DATABASES;
Wenn tilab nicht vorhanden, dann erstelle sie:
create database tilab;
erst dann kann man die neue DB einspielen:
mysql -uroot tilab < tilab.sql
Datenbanken und Tabellen erstellen
Um Tabellen in MySQL zu erstellen wird der SQL-Befehl CREATE TABLE verwendet. Dabei wird zuerst ein Tabellenname angegeben. Hierbei darf der Tabellennamen nicht aus einem MySQL Schlüsselwort bestehen. Danach folgt in Klammern eine Aufzählen von Spalten, die untereinander mit einem Kommata getrennt sind. Jede Spaltenangabe besteht dabei aus den Namen und den Typ der Spalte, kann aber auch zusätzliche Optionen wie NOT NULL, PRIMARY KEY und AUTO_INCREMENT besitzen. Wie jeder SQL-Befehl muss auch ein CREATE TABLE mit einem Semikolon abgeschlossen werden. Ein Beispielquery für das erstellen einer Tabelle könnte wie folgt aussehen.
CREATE TABLE News (
ID INT AUTO_INCREMENT PRIMARY KEY, Autor VARCHAR(30) NOT NULL, Titel VARCHAR(50) NOT NULL, Inhalt TEXT NOT NULL, Datum DATETIME NOT NULL
);
Anzeigen
Tabellen von DB tilab:
use tilab; show tables;
den Inhalt der Tabellen kann man sich nun mit:
select * from personal;
anzeigen lassen. Hier wird mit * der komplette Inhalt der Tabelle personal angezeigt.
Genauere Auswahl aus einer Tabelle
select 3 from personal where name = "Hafer";
Entfernen von Einträgen
eine Datenbank kann mit drop
gelöscht werden:
DROP DATABASE tilabalr; CREATE DATABASE tilab;
eine Tabelle kann genauso gelöscht werden, vorher Datenbank auswählen:
use tilab; DROP TABLE mlist_0; CREATE TABLE mlist_0;
MySQL DB optimieren
mysqlcheck --auto-repair icinga -uroot -p mysqlcheck --auto-repair --all-databases -uroot -p mysqlcheck [options] db_name [tables] mysqlcheck [options] --databases db_name1 [db_name2 db_name3...] mysqlcheck [options] --all-databases
Wenn Sie auf db_name folgend keine Tabellen aufführen oder die Optionen –databases
oder –all-databases
verwenden, dann werden ganze Datenbanken überprüft.
PostgreSQL
Pfad zur Datenbank:
/var/lib/pgsql/data
Login auf DB-shell mit:
psql -U admin -d zenworks