wiki:datenbanken
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige ÜberarbeitungVorherige ÜberarbeitungNächste Überarbeitung | Vorherige Überarbeitung | ||
wiki:datenbanken [2017/01/29 20:57] – [Datenbanken und Tabellen erstellen] techguru | wiki:datenbanken [2023/11/03 14:19] (aktuell) – [Benutzer und Passwörter] techguru | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== 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 ''/ | ||
+ | '' | ||
+ | |||
+ | 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 | ||
+ | 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 ' | ||
+ | |||
+ | Nun sollen ihm alle Rechte für die Datenbank wordpressdb gewährt werden, was mit folgender Anweisung geschieht: | ||
+ | |||
+ | grant all on wordpressdb.* to ' | ||
+ | |||
+ | 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 ' | ||
+ | |||
+ | |||
+ | root pw ändern: | ||
+ | |||
+ | mysql -u root | ||
+ | |||
+ | < | ||
+ | | ||
+ | | ||
+ | FLUSH PRIVILEGES; | ||
+ | </ | ||
+ | |||
+ | |||
+ | === MySQL-Benutzer löschen === | ||
+ | |||
+ | Den gerade angelegten Benutzer kannst du mit folgender Anweisung löschen: | ||
+ | |||
+ | drop user ' | ||
+ | |||
+ | |||
+ | Das Verwalten von Benutzern und Rechten ist mit folgenden Befehlen möglich: | ||
+ | |||
+ | GRANT ALL PRIVILEGES ON *.* TO NeuerUser IDENTIFIED BY ' | ||
+ | |||
+ | Dies legt einen neuen Benutzer an. In unserem Beispiel werden dem Benutzer NeuerUser dabei alle Rechte erteilt. | ||
+ | Analog wird ein Benutzer " | ||
+ | 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 '' | ||
+ | an andere weitergeben darf. | ||
+ | Das Gegenteil von '' | ||
+ | |||
+ | REVOKE Recht ON Was FROM UserName; | ||
+ | |||
+ | Ansonsten gilt für '' | ||
+ | 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 '' | ||
+ | |||
+ | SELECT user, host, IF(LENGTH(password)> | ||
+ | ===== 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< | ||
+ | |||
+ | |||
+ | ==== automatisierte Backups ==== | ||
+ | |||
+ | Bei automatisierten Backups per Shell Skript möchte man kein Passwort eingeben. Dies erreicht man indem man das Passwort mit dem Schalter '' | ||
+ | Manchmal kommt es vor das ein MySQLdump den folgenden Fehler zurück gibt: | ||
+ | |||
+ | mysqldump: Got error: 1045: " | ||
+ | |||
+ | Hier hilft es den Schalter --single-transaction mit anzugeben damit das Backup-Skript den MySQL Dump zieht. | ||
+ | |||
+ | mysqldump -uicingaweb -pgeheim --databases icinga2 --single-transaction | ||
+ | |||
+ | |||
+ | |||
+ | === Export: === | ||
+ | |||
+ | Dazu nutzen wir '' | ||
+ | |||
+ | mysqldump -uUSER -pPASSWD --allow-keywords --opt DB > DB.sql | ||
+ | |||
+ | Verfeinerung: | ||
+ | |||
+ | mysqldump -uUSER -pPASSWD --allow-keywords --opt DB | gzip > DB.sql.gz | ||
+ | |||
+ | |||
+ | |||
+ | == bei anschließenden Fehlern beim exportieren == | ||
+ | |||
+ | Find your debian-sys-maint password in / | ||
+ | |||
+ | Einloggen in mysql und dann nutze: | ||
+ | |||
+ | < | ||
+ | GRANT ALL PRIVILEGES ON *.* TO ' | ||
+ | Replace < | ||
+ | SHOW GRANTS for ' | ||
+ | </ | ||
+ | |||
+ | 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: | ||
+ | |||
+ | gzip -dc DB.sql.gz | mysql -uUSER -pPASSWD DB | ||
+ | |||
+ | Falls das Backup / dump nicht einzuspielen geht, sollte die betreffende DATABASE nochmal mit '' | ||
+ | entfernt werden. Dann mit '' | ||
+ | |||
+ | 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 | ||
+ | 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 = " | ||
+ | |||
+ | |||
+ | === Entfernen von Einträgen === | ||
+ | |||
+ | eine Datenbank kann mit '' | ||
+ | |||
+ | 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 '' | ||
+ | |||
+ | |||
+ | ===== 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 '' | ||
+ | < | ||
+ | MariaDB [(none)]> | ||
+ | +--------------------+---------------------+ | ||
+ | | @@global.time_zone | @@session.time_zone | | ||
+ | +--------------------+---------------------+ | ||
+ | | SYSTEM | ||
+ | +--------------------+---------------------+ | ||
+ | 1 row in set (0.00 sec) | ||
+ | </ | ||
+ | |||
+ | Das aktuelle Datum und Uhrzeit auf der MariaDB Shell abfragen: | ||
+ | |||
+ | < | ||
+ | MariaDB [(none)]> | ||
+ | +---------------------+ | ||
+ | | now() | | ||
+ | +---------------------+ | ||
+ | | 2019-10-29 14:30:41 | | ||
+ | +---------------------+ | ||
+ | 1 row in set (0.00 sec) | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== PostgreSQL ===== | ||
+ | |||
+ | Pfad zur Datenbank: | ||
+ | |||
+ | / | ||
+ | |||
+ | Login auf DB-shell mit: | ||
+ | |||
+ | psql -U admin -d zenworks | ||
+ | |||
+ | |||
wiki/datenbanken.txt · Zuletzt geändert: 2023/11/03 14:19 von techguru