sql >> Databasteknik >  >> RDS >> Mysql

Konfiguration av MySQL 8

Konfigurera MySQL 8

MySQL har två typer av parametrar:

Statisk, som träder i kraft efter omstart av MySQL-servern Dynamic, som kan ändras online utan att starta om MySQL-servern fungerar i version 5.7 och senare.

Variabler kan ställas in genom följande:

  • Konfigurationsfil
  • Startskript
  • Använda SET-kommandot
  • Beständiga konfigurationsparametrar

Använder konfigurationsfil:

Konfigurationsfilen finns i  /etc/my.cnf (RHL och CENTOS) och /etc/mysql/my.cnf(Debian), du kan redigera den här filen i ditt val av redigerare.

Konfigurationsfilen har sektionerna nedan, den relaterade parametern bör hållas under dem.

  • [mysql]:Avsnittet läses av mysql kommandoradsklient
  • [klient]:Avsnittet läses av alla anslutande klienter (inklusive mysql cli)
  • [mysqld]:Avsnittet läses av mysqlservern
  • [mysqldump]:Avsnittet läses av säkerhetskopieringsverktyget mysqldump
  • [mysqld_safe]:Läss av mysqld_safeprocess (MySQL Server Startup Script)
[[email protected] ~]# mysql -e "select @@server_id;"
+-------------+
| @@server_id |
+-------------+
|           1 |

ändra parametern server-id till 2 och starta om mysql-servern

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

Använda parametrar med startskriptet:

Anta att du vill starta MySQL med ett startskript och inte via systemd,

speciellt för testning eller för någon tillfällig förändring. Du kan skicka variablerna till skriptet

istället för att ändra det i konfigurationsfilen

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

Du kan se att parametern –init-file skickas till servern. Servern kör SQL-satserna i den filen innan start

Använda globala variabler och sessionsvariabler:

Det finns två typer av variabler baserat på variabelns omfattning:

Globalt:Gäller alla nya anslutningar

Session:Gäller endast den aktuella anslutningen (session)

Jag kommer att använda sort_buffer_size för det här exemplet eftersom detta har global scope och sessionsnivå, så detta kommer att förklara räckvidden mycket väl.

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)

Det ändrades inte eftersom sort_buffer-storleken har både global och sessionsnivå och den globala är bara en standard för nya sessioner. Vi använde samma klientanslutning hela vägen så med samma globala ändrade vi standarden för nya sessioner men vår session är inte ny, vår session startade före ändringen av standarden. Så vi kan använda Välj @@global.sort_buffer_size för att fråga det globala värdet

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)

Beständiga konfigurationsparametrar:

kontrollera sort_buffer_size från  prestandaschemat, sessionsvariablerna och tabellen globala variabler.

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)

Båda är desamma eftersom vi inte har ändrat det ännu. Låt kontrollera att detta värde kommer från.

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)

Så vi kan se att variabeln kommer från /etc/my.cnf och värdet VARIABLE_SOURCE är GLOBAL eftersom detta inte har ändrats men sessionen valde det globala värdet vid anslutning.

Låt oss ändra den globala sor_buffer_size och se vad som blir resultatet.

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 som vi kan se att källan är dynamisk har SET_TIME ändrats och det är rotanvändaren som har gjort ändringarna.

Låt oss kontrollera en variabel som inte finns i my.cnf som 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)

Du kan se att variabelkällan, i det här fallet är den KOMPILERAD vilket betyder att vi använder serverns standardvärde. Låt oss ändra det till något annat.

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

Om vi ​​nu kontrollerar igen kommer källan att vara dynamisk, där går vi.

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)

Låt oss göra detta beständigt med PERSIST-kommandot. OBS vi har inte lagt till dessa ändringar i filen my.cnf

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

Avsluta MySQL-klienten och kontrollera att inställningen verkligen finns i 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" } } } }

Starta om mysql-servern och kontrollera att sökvägen från variabelvärdet wait_timeout kommer, den kommer från /var/lib/mysql/mysqld-auto.cnf som visas nedan.

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)

Om du kontrollerar värdet för "sort_buffer_size" är det fortfarande detsamma eftersom vi inte ändrade dess värde, kommer fortfarande från samma sökväg och källan är 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)

  1. MySQL:Dela upp kommaseparerad lista i flera rader

  2. lagra långa värden i Android-databasen

  3. Hierarkisk lista över triggerhändelsetyper i SQL Server 2017

  4. Flera Hibernate-sekvensgeneratorer för en enhet med PostgreSQL