sql >> Database teknologi >  >> RDS >> Mysql

Konfiguration af MySQL 8

Konfiguration af MySQL 8

MySQL har to typer parametre:

Statisk, som træder i kraft efter genstart af MySQL-serveren Dynamisk, som kan ændres online uden at genstarte MySQL-serveren fungerer i version 5.7 og nyere.

Variabler kan indstilles gennem følgende:

  • Konfigurationsfil
  • Opstartsscript
  • Brug af SET-kommandoen
  • Vedvarende konfigurationsparametre

Brug af konfigurationsfil:

Konfigurationsfilen kan findes i  /etc/my.cnf (RHL og CENTOS) og /etc/mysql/my.cnf(Debian), du kan redigere denne fil i dit valg af editor.

Konfigurationsfilen har nedenstående sektioner, den relaterede parameter skal opbevares under dem.

  • [mysql]:Sektionen læses af mysql-kommandolinjeklienten
  • [klient]:Afsnittet læses af alle tilsluttede klienter (inklusive mysql cli)
  • [mysqld]:Sektionen læses af mysqlserveren
  • [mysqldump]:Afsnittet læses af sikkerhedskopieringsværktøjet kaldet mysqldump
  • [mysqld_safe]:Læst af mysqld_safeprocess (MySQL Server Startup Script)
[[email protected] ~]# mysql -e "select @@server_id;"
+-------------+
| @@server_id |
+-------------+
|           1 |

skift server-id-parameteren til 2 og genstart mysql-serveren

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

Brug af parametre med opstartsscriptet:

Antag, at du ønsker at starte MySQL ved hjælp af et opstartsscript og ikke gennem systemd,

især til test eller til en midlertidig ændring. Du kan sende variablerne til scriptet

i stedet for at ændre 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, at parameteren –init-file sendes til serveren. Serveren udfører SQL-sætningerne i den fil før start

Brug af globale og sessionsvariabler:

Der er to typer variabler baseret på omfanget af variablen:

Globalt:Gælder for alle de nye forbindelser

Session:Gælder kun for den aktuelle forbindelse (session)

Jeg vil bruge sort_buffer_size til dette eksempel, fordi dette har globalt omfang og sessionsniveau, så dette vil forklare omfanget meget godt.

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 ændrede sig ikke, fordi sort_buffer-størrelsen har både globalt og sessionsniveauomfang, og det globale er kun en standard for nye sessioner. Vi brugte den samme klientforbindelse hele vejen, så med den samme globale ændrede vi standarden for nye sessioner, men vores session er ikke ny, vores session startede før ændringen af ​​standarden. Så vi kan bruge Vælg @@global.sort_buffer_size til at forespørge på den globale værdi

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)

Vedvarende konfigurationsparametre:

tjek sort_buffer_size fra  ydelsesskemaet, sessionsvariablerne og tabellen med globale 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)

Begge er de samme, da vi ikke har ændret det endnu. Lad kontrollere, at denne værdi kommer fra.

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, at variablen kommer fra /etc/my.cnf, og VARIABLE_SOURCE-værdien er GLOBAL, da dette ikke er ændret, endnu har sessionen valgt den globale værdi ved forbindelse.

Lad os ændre den globale sor_buffer_size og se, hvad resultatet bliver.

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, at kilden er dynamisk, er SET_TIME blevet ændret, og det er root-brugeren, der har foretaget ændringerne.

Lad os tjekke en variabel, der ikke er 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, at variabelkilden, i dette tilfælde er den KOMPILERET hvilket betyder, at vi bruger serverens standardværdi. Lad os ændre det til noget andet.

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

Hvis vi tjekker igen, vil kilden være dynamisk, så 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)

Lad os gøre dette vedvarende med PERSIST-kommandoen. BEMÆRK vi har ikke tilføjet disse ændringer i filen my.cnf

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

Afslut MySQL-klienten og kontroller, at indstillingen faktisk er 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" } } } }

Genstart mysql-serveren og kontroller, at stien fra wait_timeout-variabelværdien kommer, den kommer fra /var/lib/mysql/mysqld-auto.cnf som vist nedenfor.

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)

Hvis du tjekker værdien for 'sort_buffer_size', er den stadig den samme, da vi ikke ændrede dens værdi, og den kommer stadig fra den samme sti, og kilden er 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. Android - SQLite - VÆLG MELLEM Dato1 OG Dato2

  2. MySQL med Node.js

  3. Få tabel og kolonne, der ejer en sekvens

  4. Hvordan fjerner man alle ikke-alfanumeriske tegn fra en streng i MySQL?