MySQL 8 konfigurieren
MySQL hat zwei Arten von Parametern:
Statisch, das nach dem Neustart des MySQL-Servers wirksam wird. Dynamisch, das online geändert werden kann, ohne dass der MySQL-Server neu gestartet werden muss. Der MySQL-Server funktioniert in Version 5.7 und höher.
Variablen können wie folgt gesetzt werden:
- Config-Datei
- Startskript
- Mit dem SET-Befehl
- Beständige Konfigurationsparameter
Verwenden der Konfigurationsdatei:
Die Konfigurationsdatei befindet sich in /etc/my.cnf (RHL und CENTOS) und /etc/mysql/my.cnf (Debian). Sie können diese Datei in einem Editor Ihrer Wahl bearbeiten.
Die Konfigurationsdatei hat die folgenden Abschnitte, die zugehörigen Parameter sollten darunter gehalten werden.
- [mysql]:Abschnitt wird vom mysql-Befehlszeilenclient gelesen
- [client]:Abschnitt wird von allen verbundenen Clients gelesen (einschließlich mysql cli)
- [mysqld]:Abschnitt wird vom mysqlserver gelesen
- [mysqldump]:Der Abschnitt wird vom Backup-Dienstprogramm namens mysqldump gelesen
- [mysqld_safe]:Gelesen vom mysqld_safeprocess (MySQL Server Startup Script)
[[email protected] ~]# mysql -e "select @@server_id;" +-------------+ | @@server_id | +-------------+ | 1 |
Ändern Sie den Parameter server-id auf 2 und starten Sie den MySQL-Server neu
#vim /etc/my.cnf server-id=2 (edit this parameter in config file) #sudo systemctl restart mysqld [[email protected] ~]# mysql -e "select @@server_id;" +-------------+ | @@server_id | +-------------+ | 2|
Parameter mit dem Startskript verwenden:
Angenommen, Sie möchten MySQL mit einem Startskript und nicht über systemd starten,
insbesondere zum Testen oder für vorübergehende Änderungen. Sie können die Variablen an das Skript übergeben
anstatt es in der Konfigurationsdatei zu ändern
# /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/data/centos7.err --pidfile=/usr/local/mysql/data/centos7.pid --init-file=/tmp/mysql-init &
Sie können sehen, dass der Parameter –init-file an den Server übergeben wird. Der Server führt die SQL-Anweisungen in dieser Datei aus, bevor er startet
Verwenden von globalen und Sitzungsvariablen:
Es gibt zwei Arten von Variablen, basierend auf dem Gültigkeitsbereich der Variablen:
Global:Gilt für alle neuen Verbindungen
Sitzung:Gilt nur für die aktuelle Verbindung (Sitzung)
Ich werde sort_buffer_size für dieses Beispiel verwenden, da dies einen globalen und sitzungsbezogenen Geltungsbereich hat, also wird dies den Geltungsbereich sehr gut erklären.
mysql> SET GLOBAL sort_buffer_size = 512 * 1024; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @@sort_buffer_size; +--------------------+ | @@sort_buffer_size | +--------------------+ | 262144 | +--------------------+ 1 row in set (0.00 sec)
Es hat sich nicht geändert, da die sort_buffer-Größe sowohl einen globalen als auch einen Gültigkeitsbereich auf Sitzungsebene hat und global nur ein Standardwert für neue Sitzungen ist. Wir haben die ganze Zeit dieselbe Client-Verbindung verwendet, also haben wir mit demselben Global die Standardeinstellung für neue Sitzungen geändert, aber unsere Sitzung ist nicht neu, unsere Sitzung hat vor der Änderung der Standardeinstellung begonnen. So können wir das Select @@global.sort_buffer_size verwenden, um den globalen Wert
abzufragenmysql> SELECT @@global.sort_buffer_size; +---------------------------+ | @@global.sort_buffer_size | +---------------------------+ | 524288 | +---------------------------+ 1 row in set (0.00 sec) mysql> SELECT @@global.sort_buffer_size, @@session.sort_buffer_size; +---------------------------+----------------------------+ | @@global.sort_buffer_size | @@session.sort_buffer_size | +---------------------------+----------------------------+ | 524288 | 262144 | +---------------------------+----------------------------+ 1 row in set (0.00 sec)
Persistente Konfigurationsparameter:
Überprüfen Sie die sort_buffer_size aus dem Leistungsschema, den Sitzungsvariablen und der globalen Variablentabelle.
mysql> SELECT * FROM performance_schema.session_variables WHERE variable_name LIKE 'sort_buffer_size'; +------------------+----------------+ | VARIABLE_NAME | VARIABLE_VALUE | +------------------+----------------+ | sort_buffer_size | 262144 | +------------------+----------------+ 1 row in set (0.01 sec) mysql> SELECT * FROM performance_schema.global_variables WHERE variable_name LIKE 'sort_buffer_size'; +------------------+----------------+ | VARIABLE_NAME | VARIABLE_VALUE | +------------------+----------------+ | sort_buffer_size | 262144 | +------------------+----------------+ 1 row in set (0.01 sec)
Beide sind gleich, da wir es noch nicht geändert haben. Lassen Sie überprüfen, ob dieser Wert kommt von.
mysql> SELECT * FROM performance_schema.variables_info WHERE variable_name LIKE 'sort_buffer_size'; +------------------+-----------------+---------------+-----------+----------------------+----------+----------+----------+ | VARIABLE_NAME | VARIABLE_SOURCE | VARIABLE_PATH | MIN_VALUE | MAX_VALUE | SET_TIME | SET_USER | SET_HOST | +------------------+-----------------+---------------+-----------+----------------------+----------+----------+----------+ | sort_buffer_size | GLOBAL | /etc/my.cnf | 32768 | 18446744073709551615 | NULL | NULL | NULL | +------------------+-----------------+---------------+-----------+----------------------+----------+----------+----------+ 1 row in set (0.01 sec)
Wir können also sehen, dass die Variable aus /etc/my.cnf kommt und der VARIABLE_SOURCE-Wert GLOBAL ist, da dies nicht geändert wurde, aber die Sitzung den globalen Wert bei der Verbindung ausgewählt hat.
Lassen Sie uns die globale sor_buffer_size ändern und sehen, was das Ergebnis sein wird.
mysql> SET GLOBAL sort_buffer_size = 512 * 1024; Query OK, 0 rows affected (0.00 sec) mysql> SELECT * FROM performance_schema.variables_info WHERE variable_name LIKE 'sort_buffer_size'; +------------------+-----------------+---------------+-----------+----------------------+----------------------------+----------+-----------+ | VARIABLE_NAME | VARIABLE_SOURCE | VARIABLE_PATH | MIN_VALUE | MAX_VALUE | SET_TIME | SET_USER | SET_HOST | +------------------+-----------------+---------------+-----------+----------------------+----------------------------+----------+-----------+ | sort_buffer_size | DYNAMIC | | 32768 | 18446744073709551615 | 2020-08-09 11:04:01.681846 | root | localhost | +------------------+-----------------+---------------+-----------+----------------------+----------------------------+----------+-----------+ 1 row in set (0.01 sec)
Da wir nun sehen können, dass die Quelle dynamisch ist, wurde SET_TIME geändert und es ist der Root-Benutzer, der die Änderungen vorgenommen hat.
Lassen Sie uns eine Variable prüfen, die nicht in my.cnf enthalten ist, wie z. B. Wait Timeout.
mysql> SELECT * FROM performance_schema.variables_info WHERE variable_name LIKE 'wait_timeout'; +---------------+-----------------+---------------+-----------+-----------+----------+----------+----------+ | VARIABLE_NAME | VARIABLE_SOURCE | VARIABLE_PATH | MIN_VALUE | MAX_VALUE | SET_TIME | SET_USER | SET_HOST | +---------------+-----------------+---------------+-----------+-----------+----------+----------+----------+ | wait_timeout | COMPILED | | 1 | 31536000 | NULL | NULL | NULL | +---------------+-----------------+---------------+-----------+-----------+----------+----------+----------+ 1 row in set (0.00 sec)
Sie können sehen, dass die Variablenquelle in diesem Fall COMPILED ist was bedeutet, dass wir den Standardwert des Servers verwenden. Ändern wir es in etwas anderes.
mysql> SET GLOBAL wait_timeout=100; Query OK, 0 rows affected (0.00 sec)
Wenn wir jetzt noch einmal nachsehen, wird die Quelle dynamisch sein, los geht's.
mysql> SELECT * FROM performance_schema.variables_info WHERE variable_name LIKE 'wait_timeout'; +---------------+-----------------+---------------+-----------+-----------+----------------------------+----------+-----------+ | VARIABLE_NAME | VARIABLE_SOURCE | VARIABLE_PATH | MIN_VALUE | MAX_VALUE | SET_TIME | SET_USER | SET_HOST | +---------------+-----------------+---------------+-----------+-----------+----------------------------+----------+-----------+ | wait_timeout | DYNAMIC | | 1 | 31536000 | 2020-08-09 11:08:57.537268 | root | localhost | +---------------+-----------------+---------------+-----------+-----------+----------------------------+----------+-----------+ 1 row in set (0.01 sec)
Lassen Sie uns dies mit dem PERSIST-Befehl persistent machen. HINWEIS Wir haben diese Änderungen nicht in der my.cnf-Datei hinzugefügt
mysql> SET PERSIST wait_timeout=100; Query OK, 0 rows affected (0.00 sec)
Beenden Sie den MySQL-Client und prüfen Sie, ob die Einstellung tatsächlich in mysqld-auto.cnf enthalten ist.
[[email protected] ~]# sudo cat /var/lib/mysql/mysqld-auto.cnf { "Version" : 1 , "mysql_server" : { "mandatory_roles" : { "Value" : "dbt3_read23" , "Metadata" : { "Timestamp" : 1592984803211900 , "User" : "root" , "Host" : "localhost" } } , "wait_timeout" : { "Value" : "100" , "Metadata" : { "Timestamp" : 1596960656007284 , "User" : "root" , "Host" : "localhost" } } } }
Starten Sie den mysql-Server neu und prüfen Sie, ob der Pfad aus der wait_timeout-Variable kommt, er kommt aus /var/lib/mysql/mysqld-auto.cnf, wie unten gezeigt.
mysql> SELECT * FROM performance_schema.variables_info WHERE variable_name LIKE 'wait_timeout'; +---------------+-----------------+--------------------------------+-----------+-----------+----------------------------+----------+-----------+ | VARIABLE_NAME | VARIABLE_SOURCE | VARIABLE_PATH | MIN_VALUE | MAX_VALUE | SET_TIME | SET_USER | SET_HOST | +---------------+-----------------+--------------------------------+-----------+-----------+----------------------------+----------+-----------+ | wait_timeout | PERSISTED | /var/lib/mysql/mysqld-auto.cnf | 1 | 31536000 | 2020-08-09 11:10:56.007284 | root | localhost | +---------------+-----------------+--------------------------------+-----------+-----------+----------------------------+----------+-----------+ 1 row in set (0.01 sec)
Wenn Sie den Wert für „sort_buffer_size“ überprüfen, ist er immer noch derselbe, da wir seinen Wert nicht geändert haben, er kommt immer noch vom selben Pfad und die Quelle ist GLOBAL.
mysql> SELECT * FROM performance_schema.variables_info WHERE variable_name LIKE 'sort_buffer_size'; +------------------+-----------------+---------------+-----------+----------------------+----------+----------+----------+ | VARIABLE_NAME | VARIABLE_SOURCE | VARIABLE_PATH | MIN_VALUE | MAX_VALUE | SET_TIME | SET_USER | SET_HOST | +------------------+-----------------+---------------+-----------+----------------------+----------+----------+----------+ | sort_buffer_size | GLOBAL | /etc/my.cnf | 32768 | 18446744073709551615 | NULL | NULL | NULL | +------------------+-----------------+---------------+-----------+----------------------+----------+----------+----------+ 1 row in set (0.00 sec)