Konfigurace MySQL 8
MySQL má dva typy parametrů:
Statický, který se projeví po restartování serveru MySQL Dynamic, který lze změnit online bez restartování serveru MySQL funguje ve verzi 5.7 a novější.
Proměnné lze nastavit pomocí následujícího:
- Konfigurační soubor
- Spouštěcí skript
- Pomocí příkazu SET
- Trvalé konfigurační parametry
Pomocí konfiguračního souboru:
Konfigurační soubor lze nalézt v /etc/my.cnf (RHL a CENTOS) a /etc/mysql/my.cnf (Debian), tento soubor můžete upravit ve zvoleném editoru.
Konfigurační soubor má níže uvedené sekce, související parametr by měl být uložen pod nimi.
- [mysql]:Sekce je čtena klientem příkazového řádku mysql
- [klient]:Sekci čtou všichni připojující se klienti (včetně mysql cli)
- [mysqld]:Sekci čte server mysql
- [mysqldump]:Sekci čte zálohovací nástroj s názvem mysqldump
- [mysqld_safe]:Čtení pomocí mysqld_safeprocess (MySQL Server Startup Script)
[[email protected] ~]# mysql -e "select @@server_id;" +-------------+ | @@server_id | +-------------+ | 1 |
změňte parametr server-id na 2 a restartujte mysql server
#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|
Použití parametrů se spouštěcím skriptem:
Předpokládejme, že chcete spustit MySQL pomocí spouštěcího skriptu a ne přes systemd,
zejména pro testování nebo pro nějakou dočasnou změnu. Proměnné můžete předat skriptu
místo změny v konfiguračním souboru
# /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 &
Můžete vidět, že parametr –init-file je předán serveru. Server provede příkazy SQL v tomto souboru před spuštěním
Použití globálních proměnných a proměnných relace:
Existují dva typy proměnných na základě rozsahu proměnné:
Globální:Platí pro všechna nová připojení
Relace:Platí pouze pro aktuální připojení (relaci)
V tomto příkladu použiji sort_buffer_size, protože má globální rozsah a rozsah na úrovni relace, takže to velmi dobře vysvětlí rozsah.
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)
Nezměnilo se to, protože velikost sort_buffer má globální rozsah i rozsah na úrovni relace a globální je pouze výchozí pro nové relace. Celou cestu jsme používali stejné připojení klienta, takže se stejným globálním jsme změnili výchozí nastavení pro nové relace, ale naše relace není nová, naše relace začala před změnou výchozího nastavení. Můžeme tedy použít Select @@global.sort_buffer_size k dotazu na globální hodnotu
mysql> 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)
Trvalé konfigurační parametry:
zkontrolujte sort_buffer_size ze schématu výkonu, proměnných relace a tabulky globálních proměnných.
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)
Oba jsou stejné, protože jsme to ještě nezměnili. Zkontrolujte, zda tato hodnota pochází z.
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)
Můžeme tedy vidět, že proměnná pochází z /etc/my.cnf a hodnota VARIABLE_SOURCE je GLOBÁLNÍ, protože se to nezměnilo, ale relace při připojení vybrala globální hodnotu.
Pojďme změnit Global sor_buffer_size a uvidíme, jaký bude výsledek.
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)
Nyní, jak vidíme, že zdroj je dynamický, SET_TIME byl změněn a změny provedl uživatel root.
Podívejme se na proměnnou, která není v my.cnf, jako je časový limit čekání.
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)
Můžete vidět, že zdroj proměnné, v tomto případě je KOMPILOVANÝ což znamená, že používáme výchozí hodnotu serveru. Pojďme to změnit na něco jiného.
mysql> SET GLOBAL wait_timeout=100; Query OK, 0 rows affected (0.00 sec)
Nyní, když znovu zkontrolujeme, že zdroj bude dynamický, je to.
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)
Udělejme to trvalým pomocí příkazu PERSIST. POZNÁMKA tyto změny jsme nepřidali do souboru my.cnf
mysql> SET PERSIST wait_timeout=100; Query OK, 0 rows affected (0.00 sec)
Ukončete klienta MySQL a zkontrolujte, zda je nastavení skutečně v mysqld-auto.cnf.
[[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" } } } }
Restartujte mysql server a zkontrolujte cestu z proměnné wait_timeout přichází, bude pocházet z /var/lib/mysql/mysqld-auto.cnf, jak je uvedeno níže.
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)
Pokud zkontrolujete hodnotu pro ‚sort_buffer_size‘, je stále stejná, protože jsme její hodnotu nezměnili, stále pochází ze stejné cesty a zdroj je GLOBÁLNÍ.
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)