MySQL Server
Installation
- Installation mit YAST
Dann MySQL Server starten mit folgendem Befehl
rcmysql start
- Konfiguration
/usr/bin/mysqladmin -u root password "das_root_passwort"
- PhpMyAdmin installieren
Siehe Artikel PhpMyAdmin
- Apache neu starten
rcapache2 restart
- PhpMyAdmin aufrufen mit einem Webbrowser http://hs-schallerbach.at/phpmyadmin
- Automatischen Start von mysqld konfigurieren mit YAST / Runleveleditor.
Neuinstallation des Mysql Servers
Neuinstallation in folgenden Schritten habe ich unter openSuSE 13.2 erfolgreich durchgeführt
- Server stoppen und Backups erzeugen
mysqldump --opt --user=root --password=thepassword --all-databases --result-file=/tmp/mysqldump.sql rcmysql stop mv /var/lib/mysql /var/lib/mysql.bak mv /etc/my.cnf /etc/my.cnf.bak
- Neuinstallation
zypper remove mariadb zypper install mariadb
- Konfiguration und Datenbanken zurückschreiben
mv /etc/my.cnf.bak /etc/my.cnf mysql -u root -p < /tmp/mysqldump.sql
- Server starten
rcmysql start
Konfiguration
Socket und PIDfile
Diese Dateien sind ab Suse 11.3 in folgendem Verzeichnis:
/var/run/mysql
Listing:
-rw-rw-r-- 1 mysql mysql 5 31. Dez 11:39 mysqld.pid srwxrwxrwx 1 mysql mysql 0 31. Dez 11:39 mysql.sock -rw-r--r-- 1 root root 22 31. Dez 11:39 tmpdir
- MySQL Konfiguration
# /etc/my.cnf [Client] socket = /var/run/mysql/mysql.sock [Server] socket = /var/run/mysql/mysql.sock
- PHP Konfiguration anpassen
# /etc/php5/apache/php.ini mysql.default_socket = /var/run/mysql/mysql.sock mysqli.default_socket = /var/run/mysql/mysql.sock
Zugriff von Remote erlauben
Normalerweise wird aus Sicherheitsgründen der Remote Zugriff auf den MySQL Server unterbunden.
- Konfiguration ändern für Remote Zugriff
/etc/my.cnf
Server IP eintragen
# Beispiel bind-address = 179.254.55.179
Zugriff über TCP/IP erlauben, indem skip-networking
auskommentiert wird
# skip-networking
- Benutzerrechte am Server ändern
Dem Benutzer der DB muss der Zugriff von jedem beliebigen Host gestattet werden.
- In der Tabelle mysql.user muss das Feld host auf den Wert % gesetzt werden.
Field doesn’t have a default value
Beim Einfügen eines neuen Datensatzes tritt Error 1364 auf, wenn kein Standardwert für ein bestimmtes Datenfeld definiert ist. Die Einstellung sqlmode=STRICT_TRANS_TABLES lässt nicht genau definierte Werte nicht zu.
- Lösung: Einstellung entfernen und MySql Server neu starten
/etc/my.cnf
# sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES sql_mode=NO_ENGINE_SUBSTITUTION
Zugriffskontrolle
- Firewall
Auf der Firewall den Port 3306 freigeben
- Zugriff beschränken auf bestimmte Hosts bzw. Benutzer
Das macht man am besten mit PhpMyAdmin. Die Rechte sind dann in der Tabelle mysql gespeichert.
Als Platzhalter wird das Zeichen % verwendet.
Anzeige der Zugriffsrechte auf der Konsole:
# Verbindung herstellen mysql -u root -p passwort
# Datenbank auswählen use mysyl
mysql> select user, host from user; +--------------+------------+ | user | host | +--------------+------------+ | hs | 10.80.12.% | | gallery | localhost | | horde | localhost | | hswiki | localhost | | joomla_abmus | localhost | | joomla_hs | localhost | | moodleuser | localhost | | root | localhost | | wikiuser | localhost | +--------------+------------+ 9 rows in set (0.00 sec)
MySQL Tabelle nach UTF-8 konvertieren
- Die Tabelle in eine Textdatei exportieren
Das geht am einfachsten mit PhpMyAdmin
- Mit dem Befehl iconv den Text konvertieren
iconv -f ISO_8859-15 Quelldatei.sql -o Zieldatei.sql
Der Befehl iconv konvertiert automatisch in die Kodierung, die im laufenden System eingestellt ist.
- Mit PhpMyAdmin die konvertierte Textdatei
Kodierung der MySQL Daten erzwingen mit PHP
mysql_set_charset ("utf8");
Backup
Folgendes Skript sichert alle Datenbanken in einer SQL Datei und anschließend jede Datenbank in einer eigenen SQL Datei.
user=root pw=das_passwort
# Sicherung aller Datenbanken in einer Datei backup_dir=/root/mysqldump mkdir $backup_dir &> /dev/null mysqldump --opt --user=$user --password=$pw --all-databases --result-file=$backup_dir/mysqldump.sql # Sicherung jeder DB in einer eigenen Datei backup_dir=/root/mysqldump/databases mkdir $backup_dir &> /dev/null mkdir /root/mysqldump/databases &> /dev/null for db in `mysqlshow -u $user -p$pw | sed -n -e "s/^| \([^ ]*\)[ ]*|$/\1/p"` ; do # echo $db if [ $db = performance_schema ] ; then continue fi mysqldump --opt --single-transaction --user=$user --password=$pw $db > $backup_dir/$db.sql done
Restore
Die Pfade und Dateinamen entsprechen denen im obigen Backupskript.
- Alle Datenbanken auf einmal wiederherstellen
user=root pw=das_passwort backup_dir=/backup/mysqldump mysql -u $user -p$pw < $backup_dir/mysqldump.sql
- Jede Datenbank einzeln zurückschreiben
user=root pw=das_passwort backup_dir=/backup/mysqldump/databases for file in $backup_dir/* ; do db=`basename $file | cut -d "." -f 1` mysql -u $user -p$pw $db < $file done
- Eine Datenbank wiederherstellen
mysql -u root -p dokuwiki < /srv/www/htdocs/mysqldump/databases/dokuwiki.sql
Mit phpMyAdmin gibt es Probleme beim Import großer Dateien. Das tritt z.B. auf beim Wiederherstellen der Dokuwiki Datenbank.
Lösung: Import über Kommandozeile
- Eine Datenbank importieren - Beispiel
mysql -u root -p mysql> source /srv/www/htdocs/mysqldump/localhost/databases/xyz.sql
Wartung
- LOG Files löschen
Zuerst am Mysql Server anmelden
mysql -u root -p
dann
# Beispiel mysql> PURGE BINARY LOGS TO 'mysql-bin-000075';
oder
mysql> RESET MASTER;
- Automatisches Löschen der Binary Logs
... nach 3 Tagen
# /etc/my.cnf [mysqld] expire-logs-days = 3
LOG
10.12.2015
Neuinstallation wegen diverser Fehlermeldungen bei
rcmysql status
Nach Neuinstallation keine Fehlermeldungen mehr.
29.06.2015
- Mysql Server startet plötzlich nicht mehr.
Problem behoben durch Löschen der Datei:
/var/lib/mysql/.run-mysql_upgrade