Benutzer-Werkzeuge

Webseiten-Werkzeuge


wiki:datenbanken

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.

SELECT user, host, IF(LENGTH(password)>0, password, authentication_string) AS password FROM mysql.user;

DB Backup

Log dich als root in MYSQL ein und lass dir die Tabellen anzeigen.

SHOW DATABASES;
SHOW TABLES;

Ein Dump über die alle Datenbanken:

mysqldump -uroot -p<passwort> --all-databases > backup_komplett.sql

automatisierte Backups

Bei automatisierten Backups per Shell Skript möchte man kein Passwort eingeben. Dies erreicht man indem man das Passwort mit dem Schalter -p übergibt. Hier sollte dann das Passwort ohne Leerzeichen direkt am -p mit dran hängen. Manchmal kommt es vor das ein MySQLdump den folgenden Fehler zurück gibt:

mysqldump: Got error: 1045: "Access denied for user 'icingaweb@idoicinga2'@'localhost' (using password: YES)" when trying to connect

Hier hilft es den Schalter –single-transaction mit anzugeben damit das Backup-Skript den MySQL Dump zieht.

mysqldump -uicingaweb -pgeheim --databases icinga2 --single-transaction  > icinga2_ido.sql

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.

Uhrzeit und Timezone

Die Zeitzone innerhalt der DB abfragen, unten wird gezeigt das die Systemzeit verwendet wird, es sollte also gleich der Zeit sein die date auf der Bash zurück liefert.

MariaDB [(none)]> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM             | SYSTEM              |
+--------------------+---------------------+
1 row in set (0.00 sec)

Das aktuelle Datum und Uhrzeit auf der MariaDB Shell abfragen:

MariaDB [(none)]> select now();
+---------------------+
| now()               |
+---------------------+
| 2019-10-29 14:30:41 |
+---------------------+
1 row in set (0.00 sec)

PostgreSQL

Pfad zur Datenbank:

/var/lib/pgsql/data

Login auf DB-shell mit:

psql -U admin -d zenworks
wiki/datenbanken.txt · Zuletzt geändert: 2023/11/03 14:19 von techguru