MySQL: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
KKeine Bearbeitungszusammenfassung
 
(44 dazwischenliegende Versionen von 8 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Baustelle}}
{{Textkasten|gruen|Hinweis:|Datenbanken in der HS Kern-Dokumentation:
https://doc.hostsharing.net/einstieg/datenbank.html
}}


dbadmin wird am 19. Dez. 2009 ausser Betrieb genommen.
== Datenbank anlegen ==


Datenbanken und Datenbank-User werden ab diesem Zeitpunkt mit [[hsadmin]] verwaltet.  
erfolgt mit [https://doc.hostsharing.net/users/administration/hsadmin/index.html hsadmin] siehe [https://doc.hostsharing.net/users/administration/datenbanken/index.html Datenbanken].


== Server ==
Datenbanknamen in MySQL beginnen bei Hostsharing immer mit dem Namen des Pakets, gefolgt von einem Unterstrich; danach folgt der frei wählbare eigentliche Name.


Wir haben pro Host einen einzelnen MySQL Datenbankserver. Der Zugriff erfolgt über den Hostnamen <code>localhost</code> und den Port 3306 (default). Außerdem kann der Server über den Socket <code>/var/run/mysqld/mysqld.sock</code> erreicht werden.
Beispiele gültiger Datenbanken für ein Paket <b>xyz00</b>:
* <b>xyz00_otto</b>
* <b>xyz00_anna</b>
* <b>xyz00_db_fuer_hans</b>


Die Anzahl der in Hostsharing Dynamic-Web-Paketen verwendbaren MySQL-Datenbanken ist an sich nicht begrenzt. Der damit verbrauchte Speicherplatz geht in aber die Quota des Paketes mit ein, so dass hierüber eine indirekte Begrenzung vorliegt. Alle Datenbanken eines Paketes müssen mit dem Paketnamen und einem Underscore beginnen, also z.B. <code>xyz00_datenbank</code>.
== Administration ==
== MySQL-User ==
=== Paketadmin ===


Der Paketadmin hat mit seinem Account sehr weitgehende administrative Rechte und sollte dementsprechend mit Umsicht genutzt werden. Er kann mit seinem Account unter anderem:
Die Administration einer Mysql-Datenbank (das Verwalten von Tabellen) erfolgt üblicherweise mit [https://phpmyadmin.hostsharing.net/current/ PhpMyAdmin]


* Datenbanken anlegen und löschen
== Der MySQL Command Line Client ==
* Benutzer anlegen und löschen
* Rechte an Benutzer vergeben


Bevor man in seinem Paket MySQL benutzen kann, muss man als ersten Schritt einen Zugang für den Paketadmin einrichten. Das ist zwingend notwendig. Der MySQL-User mit dem Kürzel des Paketadmins (<code>xyz00</code>) besitzt automatisch alle Rechte an allen Datenbanken des Paketes, er ist also sehr mächtig. Wir richten den User mit [[dbadmin]] ein, weil das am einfachsten ist.
Mit einem Datenbanknutzer kann auch direkt im [https://dev.mysql.com/doc/refman/5.7/en/mysql.html MySQL Command Line Client] gearbeitet werden, in dem die MySQL-Befehle eingegeben und verarbeitet werden. Der Client wird auf der [[Shell]] mit dem Befehl <b>mysql</b> aufgerufen. Es ist hier übrigens egal, ob wir als Paketadmin oder als Domainadmin eingeloggt sind, denn MySQL-User und UNIX-Accounts haben keinen Zusammenhang. Wir können mit jedem UNIX-Account, also auch als normaler Domainadmin auf jeden Datenbank-Account zugreifen – auch auf den Paketadmin-Account.


Da wir uns mit Benutzernamen und Passwort anmelden müssen, verwenden wir die Optionen -u (und danach den Benutzernamen) und -p. Das Passwort geben wir nicht in dieser Kommandozeile an, denn sonst ist es für andere User sichtbar. Wenn wir nach -p nichts angeben, werden wir von mysql danach gefragt und geben es dann an.


<pre><nowiki>
<syntaxhighlight lang="shell">
xyz00@hopi$ dbadmin -a -i mysql -u xyz00
xyz00@hopi$ mysql -u xyz00_otto -p
Password: password
Enter password: password
User 'xyz00' created.
Welcome to the MySQL monitor. Commands end with ; or \g.
</nowiki></pre>
Your MySQL connection id is 1257230 to server version: 3.23.49-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
</syntaxhighlight>


Der Benutzername des Paketadmins für MySQL entspricht dem Benutzernamen des Paketadmins für den Zugang zum Server. Das ist eine von uns gewählte Konvention, damit Du Dir den Namen für den MySQL-Zugang leichter merken kannst. Grundsätzlich stehen die Benutzernamen für MySQL in keiner Beziehung zu den Benutzernamen für die Server.
Nun können wir MySQL-Befehle eingeben. Zu beachten ist, dass man nach einem Kommando mit einem ; abschließen muss. Es gibt einige Ausnahmen, wo man das nicht braucht, z.B. beim Befehl QUIT, mit dem man den Client wieder verlässt.


=== Weitere Benutzer anlegen ===
=== Rechte an der Datenbank vergeben ===


Du kannst Dir weitere Benutzer für MySQL anlegen. Wir empfehlen Dir das ausdrücklich, weil es eine gute Idee ist, den mächtigen Zugang des Paketadmins nur für administrative Zwecke zu benutzen. Schließlich will man nicht immer den mächtigen Account des Paketadmins in seinen Skripten verwenden. Für einzelne Aufgaben kannst Du verschiedene Benutzer anlegen, denen Du natürlich auch verschiedene Rechte geben kannst, z.B. nur Rechte an bestimmten Datenbanken oder zur Ausführung bestimmter Kommandos.
Optional kann man weitere Datenbank-User anlegen, denen man nur dedizierte Rechte für die neue Datenbank erteilt. Dafür werden die normalen SQL-Befehle verwendet. Der Datenbankadmin muss sich mit Hilfe des Kommandozeilen-Werkzeugs mysql mit der Datenbank verbinden und dann die Rechte wie gewünscht vergeben:


Wir legen noch einen User an:
<syntaxhighlight lang="shell">
xyz00@host:~$ mysql -u xyz00-otto -p
Enter password:
Welcome to the MySQL ...


<pre><nowiki>
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER ON xyz00_beispiel.* TO xyz00_beispiel;
xyz00@hopi$ dbadmin -a -i mysql -u xyz00_otto
Query OK, 0 rows affected (0.01 sec)
Password: password
User 'xyz00_otto' created.
</nowiki></pre>


mehr zum Anlegen neuer User mit [[dbadmin]]
mysql> exit
Bye
</syntaxhighlight>


=== Der MySQL-Monitor ===
Mit dem obigen GRANT-Befehl werden dem Benutzer alle Rechte an der Datenbank gegeben. In der Regel wird dies nicht notwendig sein; es ist sicherer, dem Benutzer nur die tatsächlich benötigten Rechte einzuräumen. Eine Auflistung der verschiedenen Rechte befindet sich in der MySQL-Dokumentation zum GRANT-Befehl.


Mit den neu angelegten User-Accounts können wir nun in den MySQL-Monitor wechseln, in dem die MySQL-Befehle eingegeben und verarbeitet werden. Der Monitor wird mit dem Befehl <code>mysql</code> aufgerufen. Es ist hier übrigens egal, ob wir als Paketadmin oder als Domainadmin eingeloggt sind, denn MySQL-User und UNIX-Accounts haben keinen Zusammenhang. Wir können mit jedem UNIX-Account, also auch als normaler Domainadmin auf jeden Datenbank-Account zugreifen - auch auf den Paketadmin-Account.
=== Datenbank testen ===


Da wir uns mit Benutzernamen und Passwort anmelden müssen, verwenden wir die Optionen -u (und danach den Benutzernamen) und -p. Das Passwort geben wir nicht in dieser Kommandozeile an, denn sonst ist es für andere User sichtbar. Wenn wir nach -p nichts angeben, werden wir von mysql danach gefragt und geben es dann an.
Jetzt sollte der Benutzer die Datenbank nutzen können:


<pre><nowiki>
<syntaxhighlight lang="shell">
xyz00@hopi$ mysql -u xyz00 -p
xyz00@host:~$ mysql -D xyz00_beispiel -u xyz00_beispiel -p
Enter password: password
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Welcome to the MySQL ...
Your MySQL connection id is 1257230 to server version: 3.23.49-log
</syntaxhighlight>
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
</nowiki></pre>


Nun können wir MySQL-Befehle eingeben. Zu beachten ist, dass man nach einem Kommando mit einem ; abschließen muss. Es gibt einige Ausnahmen, wo man das nicht braucht, z.B. beim Befehl QUIT, mit dem man den Monitor wieder verlässt.
Ausprobieren, kann man dies Beispielsweise durch das Anlegen und Löschen einer Tabelle:
=== Passwortänderung ===


<pre><nowiki>
<syntaxhighlight lang="shell">
mysql>SET PASSWORD FOR xyz00_otto = PASSWORD('ottosneuespasswort');
mysql> create table test(id INT);
</nowiki></pre>
Query OK, 0 rows affected (0.86 sec)


=== Datenbank anlegen ===
mysql> show tables;
+--------------------------+
| Tables_in_xyz00_beispiel |
+--------------------------+
| test                    |
+--------------------------+
1 row in set


<pre><nowiki>
mysql> drop table test;
mysql>CREATE DATABASE xyz00_meinedatenbank;
Query ok, 0 rows affected (0.00 sec)
</nowiki></pre>


Datenbanknamen in MySQL beginnen bei Hostsharing immer mit dem Namen des Pakets, gefolgt von einem Unterstrich; danach folgt der frei wählbare eigentliche Name.
mysql> exit
Bye
</syntaxhighlight>


Beispiele gültiger Datenbanken für ein Paket <code>xyz00</code>:
Das Anlegen und Löschen einer Tabelle funktioniert dabei natürlich nur, wenn dem Benutzer auch tatsächlich die dafür nötigen Rechte eingeräumt wurden. In der Regel wird ein Benutzerkonto, das für die Verwendung in einer Web-Anwendung eingerichtet wurde, diese Rechte nicht benötigen. Es ist dann sicherer, diese Rechte auch nicht zu vergeben.
* <code>xyz00_otto</code>
* <code>xyz00_anna</code>
* <code>xyz00_db_fuer_hans</code>


=== Rechte vergeben ===
=== Rechte vergeben ===


Allen Benutzern, außer dem Paketadmin, müssen wir noch Rechte geben, sonst können sie gar nichts machen. Das erledigt man mit dem Befehl <code>GRANT</code>.
Allen Benutzern, außer dem Datenbank-Administrator, müssen wir noch Rechte geben, sonst können sie gar nichts machen. Das erledigt man mit dem Befehl <b>GRANT</b>.


<pre><nowiki>
<syntaxhighlight lang="shell">
mysql>GRANT SELECT, INSERT, DELETE, UPDATE ON xyz00_meinedatenbank.* TO xyz00_otto;
mysql>GRANT SELECT, INSERT, DELETE, UPDATE ON xyz00_meinedatenbank.* TO xyz00_otto;
</nowiki></pre>
</syntaxhighlight>
 
Hinter der Datenbank verwenden wir .*, um alle Tabellen der Datenbank zu inkludieren.
 
Mit <b>GRANT ALL</b> kann man einem User auch alle Kommandorechte zuweisen.


Hinter der Datenbank verwenden wir .*, um alle Tabellen der Datenbank zu inkludieren. Man kann auch *.* für alle Tabellen in allen Datenbanken verwenden.
Alle Aufgaben können wir jetzt in Zukunft vom User <b>xyz00_otto</b> erledigen lassen.


Mit <code>GRANT ALL</code> kann man einem User auch alle Kommandorechte zuweisen.
=== Import eines Mysql-Dump in eine leere Datenbank ===


ACHTUNG: <code>GRANT</code> ALL zur Zeit nicht möglich. Man kann aber alle Rechte explizit vergeben:
Wurde eine Mysql Datenbank in eine Datei exportiert (als eine Folge von SQL-Befehle in einer Textdatei, hier mit dem Namen backup_xyz.sql) , kann sie mit folgendem Befehl auf der Shell in die Datenbank xyz00_beispiel des Benutzers xyz00_beispiel importiert werden:


<pre><nowiki>
<syntaxhighlight lang="shell">
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX,
mysql --user xyz00_beispiel -p xyz00_beispiel < backup_xyz00_beispiel.sql
ALTER ON ... TO ...;
</syntaxhighlight>
</nowiki></pre>


=== Export einer Mysql Datenbank in eine Textdatei ===


Alle Aufgaben können wir jetzt in Zukunft vom User <code>xyz00_otto</code> erledigen lassen.
Um eine Datenbank auf der Shell in eine Textdatei zu exportieren, dient dieser Befehl:
<syntaxhighlight lang="shell">
mysqldump --user xyz00_beispiel -p xyz00_beispiel > backup_xyz00_beispiel.sql
</syntaxhighlight>


== Verschiedenes ==
== Verschiedenes ==
Zeile 106: Zeile 119:
* Web-Frontend: [http://www.phpmyadmin.net phpMyAdmin] ist unter https://phpmyadmin.hostsharing.net/current erreichbar.
* Web-Frontend: [http://www.phpmyadmin.net phpMyAdmin] ist unter https://phpmyadmin.hostsharing.net/current erreichbar.
* Online-Dokumentation: Die Online-Doku zu MySQL gibt es unter http://dev.mysql.com/doc/. Auf dieser Site gibt es auch mehrere Fassungen der kompletten Doku zum Downloaden.
* Online-Dokumentation: Die Online-Doku zu MySQL gibt es unter http://dev.mysql.com/doc/. Auf dieser Site gibt es auch mehrere Fassungen der kompletten Doku zum Downloaden.


----
----
[[Kategorie:HSDoku]]
[[Kategorie:HSDoku]]
[[Kategorie:Datenbanken]]
[[Kategorie:Datenbanken]]
[[Kategorie:Glossar]]
[[Kategorie:Mysql]]

Aktuelle Version vom 20. Juni 2024, 13:43 Uhr

Hinweis:

Datenbanken in der HS Kern-Dokumentation:

https://doc.hostsharing.net/einstieg/datenbank.html


Datenbank anlegen

erfolgt mit hsadmin siehe Datenbanken.

Datenbanknamen in MySQL beginnen bei Hostsharing immer mit dem Namen des Pakets, gefolgt von einem Unterstrich; danach folgt der frei wählbare eigentliche Name.

Beispiele gültiger Datenbanken für ein Paket xyz00:

  • xyz00_otto
  • xyz00_anna
  • xyz00_db_fuer_hans

Administration

Die Administration einer Mysql-Datenbank (das Verwalten von Tabellen) erfolgt üblicherweise mit PhpMyAdmin

Der MySQL Command Line Client

Mit einem Datenbanknutzer kann auch direkt im MySQL Command Line Client gearbeitet werden, in dem die MySQL-Befehle eingegeben und verarbeitet werden. Der Client wird auf der Shell mit dem Befehl mysql aufgerufen. Es ist hier übrigens egal, ob wir als Paketadmin oder als Domainadmin eingeloggt sind, denn MySQL-User und UNIX-Accounts haben keinen Zusammenhang. Wir können mit jedem UNIX-Account, also auch als normaler Domainadmin auf jeden Datenbank-Account zugreifen – auch auf den Paketadmin-Account.

Da wir uns mit Benutzernamen und Passwort anmelden müssen, verwenden wir die Optionen -u (und danach den Benutzernamen) und -p. Das Passwort geben wir nicht in dieser Kommandozeile an, denn sonst ist es für andere User sichtbar. Wenn wir nach -p nichts angeben, werden wir von mysql danach gefragt und geben es dann an.

xyz00@hopi$ mysql -u xyz00_otto -p
Enter password: password
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1257230 to server version: 3.23.49-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>

Nun können wir MySQL-Befehle eingeben. Zu beachten ist, dass man nach einem Kommando mit einem ; abschließen muss. Es gibt einige Ausnahmen, wo man das nicht braucht, z.B. beim Befehl QUIT, mit dem man den Client wieder verlässt.

Rechte an der Datenbank vergeben

Optional kann man weitere Datenbank-User anlegen, denen man nur dedizierte Rechte für die neue Datenbank erteilt. Dafür werden die normalen SQL-Befehle verwendet. Der Datenbankadmin muss sich mit Hilfe des Kommandozeilen-Werkzeugs mysql mit der Datenbank verbinden und dann die Rechte wie gewünscht vergeben:

xyz00@host:~$ mysql -u xyz00-otto -p
Enter password:
Welcome to the MySQL ...

mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER ON xyz00_beispiel.* TO xyz00_beispiel;
Query OK, 0 rows affected (0.01 sec)

mysql> exit
Bye

Mit dem obigen GRANT-Befehl werden dem Benutzer alle Rechte an der Datenbank gegeben. In der Regel wird dies nicht notwendig sein; es ist sicherer, dem Benutzer nur die tatsächlich benötigten Rechte einzuräumen. Eine Auflistung der verschiedenen Rechte befindet sich in der MySQL-Dokumentation zum GRANT-Befehl.

Datenbank testen

Jetzt sollte der Benutzer die Datenbank nutzen können:

xyz00@host:~$ mysql -D xyz00_beispiel -u xyz00_beispiel -p
Enter password:
Welcome to the MySQL ...

Ausprobieren, kann man dies Beispielsweise durch das Anlegen und Löschen einer Tabelle:

mysql> create table test(id INT);
Query OK, 0 rows affected (0.86 sec)

mysql> show tables;
+--------------------------+
| Tables_in_xyz00_beispiel |
+--------------------------+
| test                     |
+--------------------------+
1 row in set

mysql> drop table test;
Query ok, 0 rows affected (0.00 sec)

mysql> exit
Bye

Das Anlegen und Löschen einer Tabelle funktioniert dabei natürlich nur, wenn dem Benutzer auch tatsächlich die dafür nötigen Rechte eingeräumt wurden. In der Regel wird ein Benutzerkonto, das für die Verwendung in einer Web-Anwendung eingerichtet wurde, diese Rechte nicht benötigen. Es ist dann sicherer, diese Rechte auch nicht zu vergeben.

Rechte vergeben

Allen Benutzern, außer dem Datenbank-Administrator, müssen wir noch Rechte geben, sonst können sie gar nichts machen. Das erledigt man mit dem Befehl GRANT.

mysql>GRANT SELECT, INSERT, DELETE, UPDATE ON xyz00_meinedatenbank.* TO xyz00_otto;

Hinter der Datenbank verwenden wir .*, um alle Tabellen der Datenbank zu inkludieren.

Mit GRANT ALL kann man einem User auch alle Kommandorechte zuweisen.

Alle Aufgaben können wir jetzt in Zukunft vom User xyz00_otto erledigen lassen.

Import eines Mysql-Dump in eine leere Datenbank

Wurde eine Mysql Datenbank in eine Datei exportiert (als eine Folge von SQL-Befehle in einer Textdatei, hier mit dem Namen backup_xyz.sql) , kann sie mit folgendem Befehl auf der Shell in die Datenbank xyz00_beispiel des Benutzers xyz00_beispiel importiert werden:

mysql --user xyz00_beispiel -p xyz00_beispiel < backup_xyz00_beispiel.sql

Export einer Mysql Datenbank in eine Textdatei

Um eine Datenbank auf der Shell in eine Textdatei zu exportieren, dient dieser Befehl:

mysqldump --user xyz00_beispiel -p xyz00_beispiel > backup_xyz00_beispiel.sql

Verschiedenes