MySQL Server

Aus Mediawiki Ferdinand Gruber
Zur Navigation springen Zur Suche springen

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

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