sql >> Database >  >> RDS >> Mysql

Configuratie van MySQL 8

MySQL 8 configureren

MySQL heeft twee soorten parameters:

Statisch, dat van kracht wordt na het herstarten van MySQL-server Dynamic, dat online kan worden gewijzigd zonder MySQL-server opnieuw te starten, werkt in versie 5.7 en hoger.

Variabelen kunnen als volgt worden ingesteld:

  • Config-bestand
  • Opstartscript
  • Het SET-commando gebruiken
  • Aanhoudende configuratieparameters

Configuratiebestand gebruiken:

Het configuratiebestand is te vinden in /etc/my.cnf (RHL en CENTOS) en /etc/mysql/my.cnf(Debian), u kunt dit bestand bewerken in een editor naar keuze.

Het configuratiebestand heeft de onderstaande secties, de gerelateerde parameter moet eronder worden bewaard.

  • [mysql]:Sectie wordt gelezen door de mysql-opdrachtregelclient
  • [client]:sectie wordt gelezen door alle verbindende clients (inclusief mysql cli)
  • [mysqld]:Sectie wordt gelezen door de mysqlserver
  • [mysqldump]:de sectie wordt gelezen door het back-uphulpprogramma genaamd mysqldump
  • [mysqld_safe]:gelezen door mysqld_safeprocess (MySQL Server Startup Script)
[[email protected] ~]# mysql -e "select @@server_id;"
+-------------+
| @@server_id |
+-------------+
|           1 |

verander de server-id parameter naar 2 en herstart de 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|

Parameters gebruiken met het opstartscript:

Stel dat u MySQL wilt starten met een opstartscript en niet via systemd,

vooral voor het testen of voor een tijdelijke verandering. U kunt de variabelen doorgeven aan het script

in plaats van het te wijzigen in het configuratiebestand

# /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 &

U kunt zien dat de parameter –init-file wordt doorgegeven aan de server. De server voert de SQL-instructies in dat bestand uit voordat hij begint

Globale en sessievariabelen gebruiken:

Er zijn twee soorten variabelen op basis van het bereik van de variabele:

Globaal:van toepassing op alle nieuwe verbindingen

Sessie:Geldt alleen voor de huidige verbinding (sessie)

Ik zal sort_buffer_size voor dit voorbeeld gebruiken omdat dit een globaal bereik en een bereik op sessieniveau heeft, dus dit zal het bereik heel goed uitleggen.

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)

Het is niet veranderd omdat de sort_buffer-grootte zowel globaal als op sessieniveau heeft en global slechts een standaard is voor nieuwe sessies. We gebruikten de hele tijd dezelfde clientverbinding, dus met dezelfde global hebben we de standaard voor nieuwe sessies gewijzigd, maar onze sessie is niet nieuw, onze sessie begon vóór de wijziging van de standaard. We kunnen dus de Select @@global.sort_buffer_size gebruiken om de globale waarde op te vragen

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)

Aanhoudende configuratieparameters:

controleer de sort_buffer_size uit het prestatieschema, de sessievariabelen en de tabel met globale variabelen.

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 zijn hetzelfde omdat we het nog niet hebben gewijzigd. Controleer of deze waarde vandaan komt.

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)

We kunnen dus zien dat de variabele afkomstig is van de /etc/my.cnf en dat de VARIABLE_SOURCE-waarde GLOBAL is, aangezien dit nog niet is gewijzigd. De sessie heeft de globale waarde bij verbinding gekozen.

Laten we de globale sor_buffer_size veranderen en kijken wat het resultaat zal zijn.

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)

Nu we kunnen zien dat de bron dynamisch is, is SET_TIME gewijzigd en is het de rootgebruiker die de wijzigingen heeft aangebracht.

Laten we eens kijken naar een variabele die niet in my.cnf staat, zoals time-out voor wachten.

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)

U kunt zien dat de variabele bron, in dit geval COMPILED . is wat betekent dat we de standaardwaarde van de server gebruiken. Laten we het veranderen in iets anders.

mysql> SET GLOBAL wait_timeout=100;
Query OK, 0 rows affected (0.00 sec)

Als we het nu nog een keer controleren, is de bron dynamisch, daar gaan we.

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)

Laten we dit persistent maken met het PERSIST-commando. OPMERKING we hebben deze wijzigingen niet toegevoegd aan het my.cnf-bestand

mysql> SET PERSIST wait_timeout=100;
Query OK, 0 rows affected (0.00 sec)

Sluit de MySQL-client af en controleer of de instelling inderdaad in mysqld-auto.cnf staat.

[[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" } } } }

Start de mysql-server opnieuw en controleer of het pad van de wait_timeout-variabelewaarde eraan komt, het komt van /var/lib/mysql/mysqld-auto.cnf zoals hieronder weergegeven.

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)

Als je de waarde voor 'sort_buffer_size' aanvinkt, is het nog steeds hetzelfde omdat we de waarde niet hebben gewijzigd, nog steeds afkomstig van hetzelfde pad en de bron is GLOBAAL.

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)

  1. Een fout oplossen bij het maken van een groot IMDB-model

  2. Hoe records van de huidige maand in MySQL te krijgen

  3. Wat is @@MAX_PRECISION in SQL Server?

  4. ACOS() Voorbeelden in SQL Server