MySQL unter Windows – Teil 2: Administration & Besonderheiten

My_SQL_unter_Windows_2

Windows – eine Sonderlocke?

Ein MySQL-Server lässt sich unter Windows grundsätzlich auf die gleiche Art und Weise administrieren, wie es auch unter Unix/Linux der Fall ist. Dazu dient sowohl die Konfigurationsdatei des Servers (my.cnf) für statische Einstellungen, die beim Start gesetzt werden sollen, als auch die auto.cnf für persistente Änderungen zur Laufzeit des Servers.

Durch die auto.cnf kann wie im folgenden Beispiel gezeigt eine Änderung online durchgeführt werden, die auch bei einem Neustart des MySQL-Servers Bestand hat. Voraussetzung ist hierfür, dass die Variable PERSISTED_GLOBALS_LOAD aktiviert ist:

+----------------------------------+-------+
| Variable_name                    | Value |
+----------------------------------+-------+
| max_connections                  | 151   |
| max_user_connections             | 0     |
| mysqlx_max_connections           | 100   |
+----------------------------------+-------+
3 rows in set, 1 warning (0.08 sec)
mysql> show variables like 'persist%';
+----------------------------------+-------+
| Variable_name                    | Value |
+----------------------------------+-------+
| persist_only_admin_x509_subject  |       |
| persisted_globals_load           | ON    |
+----------------------------------+-------+
2 rows in set, 1 warning (0.00 sec)
mysql> set persist max_connections = 250;
Query OK, 0 rows affected (0.04 sec)
mysql> show variables like '%connections%';
+----------------------------------+-------+
| Variable_name                    | Value |
+----------------------------------+-------+
| max_connections                  | 250   |
| max_user_connections             | 0     |
| mysqlx_max_connections           | 100   |
+----------------------------------+-------+
3 rows in set, 1 warning (0.00 sec)
mysql> show variables like '%connections%';
ERROR 2013 (HY000): Lost connection to MySQL server during query
mysql> show variables like '%connections%';
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    8
Current database: sakila
+----------------------------------+-------+
| Variable_name                    | Value |
+----------------------------------+-------+
| max_connections                  | 250   |
| max_user_connections             | 0     |
| mysqlx_max_connections           | 100   |
+----------------------------------+-------+
3 rows in set, 1 warning (0.14 sec)  
Standardmäßig liegt die auto.cnf im Data-Dir des Servers.

Rekonfiguration mittels GUi

Aus dem ersten Teil dieser Reihe ist bereits der MySQL-Installer bekannt, welcher im Rahmen der Installation der Software gewisse Konfigurationsmöglichkeiten anbietet. Auf diese Möglichkeit lässt sich auch nach der erstmaligen Installation zurückgreifen, indem wir auf „Reconfigure" in der entsprechenden Reihe des MySQL-Servers klicken:

Mit Hilfe der darauf folgenden Masken lässt sich die Konfiguration identisch zu den Installationsschritten anpassen. Dies ist z.B. sinnvoll, wenn zusätzliche administrative Benutzer angelegt werden sollen, ohne selbst genauere MySQL-Kenntnisse zu besitzen.

Named Pipe – auf jeden Fall eine Sonderlocke

Für einen MySQL-Server unter Windows lässt sich neben der üblichen TCP/IP-Verbindung auch eine sogenannte Named Pipe definieren. Diese Named Pipe übernimmt die Aufgabe des Sockets unter Unix/Linux. Ob eine Named Pipe verwendet wird, lässt sich über den Parameter named_pipe definieren:
mysql> show variables like 'named_pipe';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| named_pipe    | OFF   |
+---------------+-------+
1 row in set, 1 warning (0.00 sec) 
Wir setzen diesen Parameter durch die Bearbeitung der my.cnf auf ON und definieren gleichzeitig einen Namen durch das Setzen des socket-Parameters:
enable-named-pipe
socket=MySQL 
Nach dem Neustart des MySQL-Servers sollten beide Parameter gesetzt sein und die Named Pipe kann verwendet werden:
C:\Program Files\MySQL\mysql-8.0.19-winx64\bin>mysql -uroot -proot --socket=MySQL --protocol=pipe
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.19 MySQL Community Server - GPL
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> 

Durch die Angabe der Named Pipe (--socket) und --protocol=pipe kann ich eine Verbindung über diese Named Pipe realisieren und gehe in diesem Moment nicht über das Netzwerk. Wie auch bei einer Socket-Verbindung unter Unix/Linux ist dies eine gute Alternative, wenn Applikation und Datenbank auf einem Server laufen. Außerdem ist der MySQL-Server zusätzlich vor Angriffen von außen geschützt, wenn man sich für die ausschließliche Nutzung von Named Pipes entscheidet.

lower_case_table_names – eine weitere Sonderlocke

Mit Hilfe des Parameters lower_case_table_names lassen sich Tabellen in MySQL case-sensitiv erstellen.

Dieser Parameter kann auf 0, 1 oder 2 gesetzt werden, wobei 0 die Einstellungen des Betriebssystems verwendet, Lookups bei Indizes o.ä. aber stets case-sensitiv ausgeführt werden. Auf Betriebssystemen mit einem case-insensitiven Filesystem wie Windows oder MacOS sollte dieser Parameter daher nicht auf 0 gesetzt werden.

Ein Setzen von lower_case_table_names auf 1 bewirkt, dass alle Tabellen auf dem Filesystem in lowercase erstellt werden, wohingegen ein Wert von 2 case-sensitiv speichert. In diesem Falle werden Lookups stets mit lowercase durchgeführt, weshalb es im Gegensatz zu einem Wert von 0 unter Windows nicht zu Problemen führt.

Ein Beispiel:

lower_case_table_names OS case-sensitiv Name beim Erstellen Name auf Festplatte
Lookup
0 Ja „TesT123" „TesT123"„TesT123" vs. „TesT123"
0Nein„TesT123"„test123"„test123" vs. „TesT123"
1Ja„TesT123"„test123"„test123" vs. „test123"
1Nein„TesT123"„test123"„test123" vs. „test123"
2Ja„TesT123"„TesT123"„test123" vs. „test123"
2Nein„TesT123"„TesT123"„test123" vs. „test123"
Aus diesem Grund lautet unsere Empfehlung, einen MySQL-Server unter Windows mit einem lower_case_table_names = 2 zu betreiben, wenn die Applikationsseite case-sensitive Namen von Tabellen benötigt. Andernfalls geht man sämtlichen Schwierigkeiten aus dem Weg, wenn man auf case-sensitive Namen verzichtet und lower_case_table_names = 1 setzt.

By accepting you will be accessing a service provided by a third-party external to https://blog.ordix.de/