Configurarea unui server de baze de date de tip MySQL poate avea in vederea diverse aspecte, precum:
• precizarea unor optiuni de configurare prin intermediul fisierelor de configurare sau prin intermediul liniei de comanda;
• stabilirea optiunilor de configurare folosind variabilele de sistem;
• verificarea starii / statusului serverului la nivelul variabilelor de stare;
• asigurarea compatibilitatii cu alte sisteme de gestiune a bazelor de date.
Fisiere de configurare
Programele care au legatura cu serverul MySQL citesc diferite optiuni de configurare din fisiere specifice. Aceste fisiere introduc o modalitatea facila de specificare a optiunilor care sunt necesare la rularea programelor.
Daca serverul de baza de date MySQL ruleaza pe un sistem de operare de tip Debian (Unix-Like), programele de tip MySQL citesc optiuni de configurare din fisiere care se gasesc in urmatoarele locatii:
/etc/mysql/my.cnf # optiuni globale ~/.my.cnf # optiuni specifice utilizatorului curent /etc/mysql/conf.d/mysql.cnf # optiuni specifice clientului linie de comanda /etc/mysql/conf.d/mysqldump.cnf # optiuni specifice clientului mysqldump /etc/mysql/mysql.conf.d/mysqld.cnf # optiuni specifice serverului
Fisierul principal de configurare pentru un server de baze de date de tip MySQL este my.cnf. Acest fisier este disponibil pe un sistem de operare de tip Debian (Unix-Like) la adresa /etc/mysql/my.cnf si este alcatuit din mai multe sectiuni de configurare.
[mysqld] optiune_server1 = valoare1 optiune_server2 = valoare2 [client] optiune_client1 = valoare3 [mysqldump] optiune_client2 = valoare4 [mysqladmin] optiune_client3 = valoare5
Doar sectiunea [mysqld] este citita de la nivelul serverului, restul sectiunilor au in vedere configurarea diverselor aplicatii de tip client, precum clientul linie de comanda sau utilitarul mysqldump. Se poate observa faptul ca exista o sectiune generala de tip [client], valabila pentru toate aplicatiile client, si sectiuni specifice unor anumiti clienti, precum [mysqldump].
La nivelul fisierelor de configurare pot aparea inclusiv referinte catre alte fisiere de configurare, referinte precizate prin intermediul clauzelor !include. Mai mult de atat, referintele pot fi precizate si prin clauze !includedir, caz in care vor fi incluse la nivelul fisierului de configurare toate fisierele de la nivelul directorului precizat.
!includedir /etc/mysql/conf.d/ [mysqld] !include /etc/mysql/file.cnf
Sectiunile de la nivelul fisierul de configurare pot fi precizate in orice ordine si pot fi chiar amestecate, chiar daca acest lucru nu este de dorit. Un exemplu de fisier de configurare care prezinta sectiuni amestecate poate fi observat in cele ce urmeaza.
[mysqld] optiune_server1 = valoare1 [client] optiune_client1 = valoare2 [mysqld] optiune_server1 = valoare3
In cazul utilizarii unor sectiuni de configurare amestecate, trebuie avut in vedere faptul ca precizarea unei aceleiasi optiuni de mai multe ori va determina pastrarea la nivelul ei a ultimei valoari alocate. Optiunea de la nivelul serverului cu numele optiune_server1 va avea valoarea valoare3.
Optiuni de configurare
Optiunile de configurare reprezinta caracteristici ale programelor de la nivelul unui sistem de gestiune a bazelor de date de tip MySQL. Optiunile de configurare pot fi stabilite pentru aplicatia server sau pentru diversi clienti MySQL; utilizarea lor se poate realiza din fisiere de configurare sau din linie de comanda, ca si parametri ai programelor MySQL.
Vizualizarea si editarea continutului pentru fisierul de configurare principal se poate realiza astfel:
# pico /etc/mysql/my.cnf
!includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ [mysqld] server_id = 1 datadir = /var/lib/mysql log_error = /var/log/mysql/error.log bind_address = 127.0.0.1 port = 3306 [client] user = airman
Instanta de fisier de configurare de mai sus cuprinde mai multe optiuni de configurare, printre care putem observa optiunea server datadir, optiune care introduce locatia in care sunt pastrate colectiile de date (bazele de date), dar si optiunea server log_error, care stabileste fisierul in care sunt inregistrate mesajele de eroare de la nivelul serverului.
Pentru a putea accesa serverul de baze de date si din afara masinii pe care acesta ruleaza, este necesara verificarea valorii optiunii de configurare bind_address. Daca in fisierul de configurare /etc/mysql/my.cnf aceasta optiune are setata valoarea 127.0.0.1, atunci comentarea liniei corespunzatoare acestei optiuni permite anularea acestei configurari si accesarea serverului din orice retea.
# pico /etc/mysql/my.cnf
[mysqld] ... # bind_address = 127.0.0.1 ...
Dupa modificarea fisierului de configurare este necesara restartarea serverului de baza de date pentru a avea in vedere modificarile realizate la nivelul optiunilor de configurare.
# sudo systemctl restart mysql
# sudo systemctl status mysql ● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-04-04 15:42:57 UTC; 38s ago Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.html Process: 31198 ExecStartPre=/usr/share/mysql-8.0/mysql-systemd-start pre (code=exited, status=0/SUCCESS) Main PID: 31233 (mysqld) Status: "Server is operational" Tasks: 39 (limit: 1968) Memory: 392.2M CGroup: /system.slice/mysql.service └─31233 /usr/sbin/mysqld
Optiunea de configurare port din cadrul sectiunii server [mysqld] specifica portul pe care il asculta serverul de baza de date in cadrul conexiunilor de tip TCP/IP. Valoare implicita pentru optiunea de configurare port este 3306. Se recomanda modificarea acestei valori.
# pico /etc/mysql/my.cnf
[mysqld] ... port = 33061 ...
# sudo systemctl restart mysql
Dupa repornirea serverului de baze de date, conectarea se va realiza doar prin precizarea parametrului –port care specifica noua valoare.
# mysql -h uncoded.ro -u airman -p --port=33061 Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 13 Server version: 8.0.19 MySQL Community Server - GPL Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> SELECT @@version; +-----------+ | @@version | +-----------+ | 8.0.19 | +-----------+ 1 row in set (0.06 sec) mysql> exit Bye
Variabile de sistem
Sistemele de baze de date de tip MySQL utilizeaza variabile de sistem pentru a gestiona maniera in care acestea functioneaza. Fiecare variabila de sistem prezinta o valoare implicita. Variabilele de sistem pot fi setate la pornirea serverului folosind optiuni de configurare din linia de comanda sau prin intermediul fisierelor de configurare.
mysql> SHOW VARIABLES; +---------------------------------+-----------------------------------+ | Variable_name | Value | +---------------------------------+-----------------------------------+ | auto_increment_increment | 1 | | auto_increment_offset | 1 | | automatic_sp_privileges | ON | | back_log | 151 | | basedir | /home/mysql/ | | binlog_cache_size | 32768 | | bulk_insert_buffer_size | 8388608 | | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /home/mysql/share/mysql/charsets/ | | collation_connection | utf8_general_ci | | collation_database | utf8mb4_0900_ai_ci | | collation_server | utf8mb4_0900_ai_ci | ... | innodb_autoextend_increment | 8 | | innodb_buffer_pool_size | 8388608 | | innodb_commit_concurrency | 0 | | innodb_concurrency_tickets | 500 | | innodb_data_file_path | ibdata1:10M:autoextend | | innodb_data_home_dir | | ... | version | 8.0.1-dmr-log | | version_comment | Source distribution | | version_compile_machine | i686 | | version_compile_os | suse-linux | | wait_timeout | 28800 | +---------------------------------+-----------------------------------+
Tabelul urmator introduce denumiri si semnificatii corespunzatoare unor optiuni de configurare, variabile de sistem (Sys) si variabile de stare (Status). Pentru optiunile de configurare este specificat daca acestea pot fi utilizate din linie de comanda (Cmd) sau din fisiere de configurare (File), iar pentru variabile este precizat scopul lor (sesiune, global sau ambele) si tipul lor (dinamic, static).
Nume | Semnificatie | Cmd | File | Sys | Status | Scop | Tip |
---|---|---|---|---|---|---|---|
bind_address | adresa IP sau hostul de la care vor fi acceptate cereri | Y | Y | Y | global | static | |
character_set_server | setul de caractere utilizat la nivelul serverului | Y | Y | Y | ambele | dinamic | |
character_set_system | setul de caractere utilizat de server pentru stocarea identificatorilor | Y | global | static | |||
datadir | calea catre locatia in care sunt pastrate bazele de date | Y | Y | Y | global | static | |
default_storage_engine | motorul de stocare implicit de la nivelul serverului | Y | Y | Y | ambele | dinamic | |
default-time-zone | fusul orar implicit de la nivelul serverului | Y | Y | ||||
log_error | locatia implicita in care sunt inregistrate mesajele de eroare | Y | Y | Y | global | static | |
max_used_connections | numarul maxim de conexiuni utilizate simultan de la pornirea serverului | Y | global | static | |||
port | port utilizat in cadrul conexiunilor TCP/IP | Y | Y | Y | global | static | |
queries | numarul de instructiuni executate de server | Y | ambele | static | |||
server_id | identificator server, implicit are valoarea 1 | Y | Y | Y | global | dinamic | |
skip_networking | control asupra utilizarii conexiunilor TCP/IP | Y | Y | Y | global | static | |
Uptime | numarul de secunde de la pornirea serverului | Y | global | static | |||
version | versiunea serverului | Y | global | static |
mysql> SHOW GLOBAL VARIABLES LIKE 'server_id'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id | 1 | +---------------+-------+ 1 row in set
O mare parte a variabilelor de sistem prezinta un comportament dinamic, adica pot fi modificare in timpul rularii folosind instructiunea SET. In acest fel este posibila modificarea anumitor caracteristici ale serverului fara a fi necesara oprirea si repornirea acestuia – configurare online. Modificarea variabilelor de sistem de tip static necesita repornirea serverului.
mysql> SET GLOBAL server_id = 2; Query OK, 0 rows affected
mysql> SHOW GLOBAL VARIABLES LIKE 'server_id'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id | 2 | +---------------+-------+ 1 row in set
Din punct de vedere al scopului (vizibilitatii), variabilele pot fi clasificate in variabile de sesiune, variabile globale si variabile cu scop atat global, cat si de sesiune. Variabile de sesiune au impact doar la nivelul unei sesiuni, in timp ce variabilele globale afecteaza functionarea per ansamblu a serverului.
Daca este modificata o variabila de sistem de sesiune, valoarea ramane in vigoare pana la incheierea sesiunii sau pana cand este stabilita o noua valoare pentru variabila. Modificarea nu este vizibila pentru alti clienti.
SET @@SESSION.default_storage_engine = myisam;
O alta modalitate de utilizare a variabilelor de sistem de sesiune si / sau globale are in vedere referirea numelui acestora prin intermediul termenilor @@GLOBAL sau @@SESSION, cum poate fi observat si in exemplul urmator.
SET @@GLOBAL.max_connections = 1000;
Serverul MySQL pastreaza o serie de variabile de stare care furnizeaza informatii cu privire la functionarea sa. Valorile corespunzatoare acestor variabile pot fi accesate prin intermediul comenzilor de tip SHOW.
mysql> SHOW GLOBAL STATUS; +-----------------------------------+------------+ | Variable_name | Value | +-----------------------------------+------------+ | Aborted_clients | 0 | | Aborted_connects | 0 | | Bytes_received | 143442598 | | Bytes_sent | 1177643426 | ... | Connections | 3002 | | Created_tmp_disk_tables | 0 | | Created_tmp_files | 3 | | Created_tmp_tables | 1 | ... | Threads_created | 189 | | Threads_running | 49 | | Uptime | 189872 | +-----------------------------------+------------+