FreeBSD & MySQL

Aus Wiki.hidden.ch
Wechseln zu: Navigation, Suche

MySQL ist ein SQL-Datenbankverwaltungssystem. Michael „Monty“ Widenius schuf MySQL 1994 für die schwedische Firma TcX. Heute wird MySQL von der Firma MySQL AB weiterentwickelt. MySQL ist mit mehr als 6 Millionen Installationen und über 35.000 Downloads pro Tag das populärste Open-Source-Datenbankverwaltungssystem der Welt.

Eine gute Übersicht findet man auf Wikipedia.

Installation

Erstellung der notwendingen Pfade

Ich speichere meine Datenbanken immer in einem separaten Verzeichnis.

-su-2.05b# mkdir -p /www/server/databases


Anpassung von /etc/make.conf

Die Datei /etc/make.conf hat bei mir folgenden Inhalt:

#MySQL Bedingt
DB_DIR=/www/server/databases
BUILD_OPTIMIZED=yes

DB_DIR wird mit aktuelleren Versionen nicht mehr benutzt - stattdessen wird im /etc/rc.conf die Variable mysql_dbdir definiert.


Anpassung von /etc/rc.conf

Die Datei /etc/rc.conf hat bei mir folgenden Inhalt:

# MySQL 
mysql_dbdir="/www/server/databases"
mysql_enable="YES"


MySQL aus den Ports installieren

Geht mal wieder einfach aus den Ports:

-su-2.05b# cd /usr/ports/databases/mysql41-server/
-su-2.05b# make install clean

Sobald der MySQL Server gestartet wird, werden die erstern notwenigen Datenbanken erstellt und der Server ist lauffähig.


Berechtigungen der Datenbank anpassen

Da der MySQL Server standardmässig mit dem User root und ohne Passwort benutzbar ist, wollen wir doch ein wenig die Sicherheit hochschrauben. Dafür setzen wir zuerst ein Passwort für root:

-su-2.05b# mysqladmin -u root password newpassword

Anschliessend löschen wir die Test-Datenbank:

-su-2.05b# mysqladmin -u root -p  drop test 
Enter password: 
Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.

Do you really want to drop the 'test' database [y/N] y
Database "test" dropped
-su-2.05b#

Zudem säubern wir noch ein paar Einträge:

-su-2.05b# mysql -u root -p mysql
Enter password: 
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 17 to server version: 4.1.11

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> delete from db WHERE Db='test';
Query OK, 1 row affected (0.00 sec)

mysql> delete from db WHERE Db='test\_%';
Query OK, 1 rows affected (0.00 sec)

Anschliessend will man noch einen PowerUser, der evtl. von anderen Hosts aus arbeiten kann:

-su-2.05b# mysql -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 18 to server version: 4.1.11

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> GRANT ALL ON *.* TO 'steven'@'%' IDENTIFIED BY 'anotherpassword';

Nach Anpassungen an den den Berechtigungen sollte man entweder die Datenbank neu starten oder die forcieren, die Privilegien-Datenbank neu zu laden:

-su-2.05b# mysqladmin -u root -p flush-privileges 
Enter password: 
-su-2.05b#

Konfiguration von MySQL via /etc/my.cnf

MySQL Optionen lassen sich via /etc/my.cnf Konfigurieren.


Backup der Daten

Für das Backup der Daten gibt es verschiedene Ansätze. Ein schlechter Ansatz ist sicherlich, einen ASCII-Dump zu erstellen (mit mysqldump). Denn, sobald man binärdaten in der Datenbank hat, wird ein späteres restore schlichtweg fehlschlagen. Es gibt andere tools wie phpMyBackupPro oder mysqldumper.

Ich persönlich kopiere mir einfach das Datenverzeichnis (/www/server/databases) auf ein Sicherungsmedium. Für ein allfälliges Restore kann man die Daten in eine andere Tabelle zurückkopieren un anschliessend diese Teile restoren, die man braucht.


Probleme

Hier habe ich ein wenig zusammengesammelt, was ich für Probleme entdeckt habe.

#1251 - Client does not support authentication protocol requested by server; consider upgrading MySQL client

MySQL 4.1 nutzt ein neues Passwort Protokoll welches auf einem Hash Algorithmus basiert. Da dieses Verfahren jetzt inkompatibel mit vorhergehenden Versionen ist, wird man immer folgende Fehlermeldung erhalten:

ERROR 1251: Client does not support authentication protocol requested by server; consider upgrading MySQL client

Dieser Fehler ist auf der Developer-Seite von MySQL beschrieben.

Um diesen Fehler zu umgehen kann man entweder mit der --old-passwords Option starten (will man nicht) oder man nutzt die Funktion OLD_PASSWORD() um das Password einfach neu zu setzen:

mysql> UPDATE user set Password=OLD_PASSWORD('anotherpassword') WHERE User='steven';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

Web-Links