Hinweise zu MySQL

Aus SiteparkWiki
Zur Navigation springen Zur Suche springen

Initialisierung

Es ist wichtig, dass ein Root-Passwort für den MySQL-Server gesetzt wird

mysqladmin password geheim

Unter Debian müssen ggf. für den MySQL root-Nutzer noch weitere Rechte gesetzt werden

mysql -u root -pgeheim mysql < GRANT ALL ON *.* TO 'root'@'localhost.localdomain' IDENTIFIED BY 'geheim' WITH GRANT OPTION;

Es ist auch möglich einen eigenen Root-Nutzer einzurichten. Das ist in MariaDB-Installationen der bessere Weg:

CREATE USER 'siteparkroot' IDENTIFIED BY 'PASSWORD';
GRANT ALL ON *.* TO 'siteparkroot'@localhost IDENTIFIED BY 'PASSWORD' with grant option;
GRANT ALL ON *.* TO 'siteparkroot'@127.0.0.1 IDENTIFIED BY 'PASSWORD' with grant option;

Hinweis zu MariaDB

Bei aktuellen MariaDB Installationen ist für den root-Nutzer das unix_socket-Plugin aktiv. Wenn über IES-Admin neue Datenbanken angelegt werden sollen muss diese Plugin für den root-Nutzer deaktiviert werden.

Vorher sollte sicher gestellt sein, das das root Passwort bekannt ist.

update mysql.user set plugin="" where user="root";
flush privileges;

Siehe auch https://kofler.info/root-login-problem-mit-mariadb/


Ein weiteres Plugin in MariaDB validiert Passwörter dies kann ggf auch zu Problemen beim Login führen. https://dev.mysql.com/doc/refman/5.7/en/validate-password-options-variables.html

Konfiguration

Wie alle Dienste eines Systems, muss auch bei MySQL die Konfiguration regelmäßig geprüft werden. Die aktuellen Parameter müssen ermittelt werden und Einstellungen entsprechend angepasst werden. Gerade die Setzungen innodb_buffer_pool_size und table_open_cache u.ä. müssen mit wachsenden Datenbestand überprüft werden!

Die Verbindung zu MySQL über den TCP-Port muss freigegeben werden. Lokale Sockets funktionieren nicht.

Hierzu müssen folgende Setzungen mind. erfüllt sein:

#skip-networking
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1

SuSE Linux Enterprise Server 11 - Service Pack 1

Mit dem Service Pack 1 kann der IES keine Verbindung zur Datenbank mehr herstellen, wenn bind-address mit einer IP-Adresse angegeben wurde. Das Problem kann gelöst werden, indem die bind-address Konfiguration auskommentiert wird.

Ab SLES11 ist es möglich, dass in der /etc/hosts-Datei standardmäßig localhost nur auf ::1 gebunden wird. Dann wird die MySQL-Administration mit dem IES nicht funktionieren. Es muss localhost (auch) auf eine IPv4-Adresse (127.0.0.1) gebunden werden.


Da der IES den transaktionssicheren Datenbanktyp InnoDB verwendet empfehlen sich Anpassungen an folgenden Opionen (my.cnf):

Bitte wählen Sie hier Größenordnungen, die auf Ihre Hardware abgestimmt sind. Wenn Sie unsicher sind welche Setzungen zu verwenden sind, sprechen Sie uns bitte an. Wir werden Ihnen dann entsprechende Erfahrungswerte nennen können.

# Größe des MySQL-Keys (Optimiert die Suche in MyISAM Daten)
key_buffer              = 256M

bzw.

key_buffer_size         = 256M
# MySQL-Paket-Größen gegen an, wie groß ein Statement werden darf (z.B. bei optimierten Dumps)
max_allowed_packet      = 256M
# Für die vom System erzeugten temp. Tabellen muss ausreichend Speicherkapazität definiert werden. Hierzu ist folgende Setzung notwendig
max_heap_table_size     = 256M
tmp_table_size          = 256M
# Alle Daten aller InnoDB-Datenbanken in einer Datei (ibdata) gespeichert werden,
# kann diese initial sofort entsprechend eingestellt werden. Die stete Vergrößerung kostet unnötige Resourcen
# Diese Option kann nachdem bereits Datenbanken des Typs InnoDB angelegt wurden nicht mehr verändert werden!
innodb_data_file_path = ibdata1:3G:autoextend
innodb_autoextend_increment = 512
# Cache-Setzungen für InnoDB. Wählen Sie hier eine Poolgröße, die nicht größer als 50-80% des Speichers ist.
# Ein Richtwert kann als Root-User über die gesamte Datengröße aller Datenbanken (+10-20%) ermittelt werden:
# SELECT concat( round( sum( data_length  + index_length) / ( 1024 * 1024 ) , 2 ) , ' MB' ) TotalSize FROM information_schema.TABLES WHERE ENGINE='InnoDB';
innodb_buffer_pool_size=2G
innodb_additional_mem_pool_size=20M
# Open-Files und Open-Tables Setzungen. Hierzu ermitteln Sie am besten die Anzahl aller Tabellen im System und wählen entsprechend
# etwas höhere Werte:
# SELECT count(TABLE_NAME) FROM information_schema.TABLES;
# bzw.
# SHOW OPEN TABLES;
open_files_limit               = 6000
table_definition_cache         = 1000
table_open_cache               = 1000
# Weiterhin macht es unter Linux-Systemen durchaus Sinn den OS-Level-Cache zu umgehen um nicht "doppelt" zu cachen:
# Liegen die InnoDB-Daten-Dateien in einem SAN, sollte laut MySQL auf diese Setzung verzichtet werden
innodb_flush_method=O_DIRECT
# Um im Zeichensatzbereich für jede Anwendung Klarheit darüber zu schaffen, dass sie UTF-8 als Zeichensatz verwendet, sind folgende Setzungen empfohlen
# im [mysqld]-Bereich
character-set-server = utf8
# im [client]-Bereich
default-character-set = utf8


Weitere Informationen zur Optimierung finden Sie u.a. hier: http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/