
MySQLTuner è uno script scritto in Perl che consente di esaminare rapidamente un'installazione di MySQL e apportare modifiche per aumentare le prestazioni e la stabilità. Le variabili di configurazione correnti e i dati di stato vengono recuperati e presentati in un formato breve insieme ad alcuni suggerimenti di base sulle prestazioni.
MySQLTuner supporta circa 300 indicatori per MySQL/MariaDB/Percona Server in quest'ultima versione.
MySQLTuner è attivamente mantenuto e supporta molte configurazioni come Galera Cluster, TokuDB, Performance schema, metriche del sistema operativo Linux, InnoDB, MyISAM, Aria, …
Puoi trovare maggiori dettagli su questi indicatori qui: Descrizione degli indicatori.

MySQLTuner ha bisogno di contributori per la documentazione, il codice e il feedback:
I risultati dei test sono disponibili qui solo per LTS: * MySQL (supporto completo) * Percona Server (supporto completo) * MariaDB (supporto completo) * Replica Galera (supporto completo) * Cluster Percona XtraDB (supporto completo) * Replica MySQL (supporto parziale, nessun ambiente di test)
Grazie a endoflife.date * Fare riferimento a Versioni supportate di MariaDB. * Fare riferimento a Versioni supportate di MySQL.
Il supporto per Windows è parziale
AMBIENTI NON SUPPORTATI - È NECESSARIO AIUTO * Il cloud based non è attualmente supportato (aiuto richiesto! Supporto richiesto per GCP, AWS, Azure)
XtraDB non è più mantenuto
Supporto per il rilevamento delle vulnerabilità CVE da https://cve.mitre.org
REQUISITI MINIMI
È importante comprendere appieno ogni modifica apportata a un server di database MySQL. Se non si comprendono porzioni dell'output dello script o se non si comprendono le raccomandazioni, è necessario consultare un DBA o un amministratore di sistema esperto di cui ci si fida. Testare sempre le modifiche in ambienti di staging e tenere sempre presente che i miglioramenti in un'area possono influire negativamente su MySQL in altre aree.
È anche importante attendere almeno 24 ore di uptime per ottenere risultati accurati. Infatti, eseguire mysqltuner su un server appena riavviato è completamente inutile.
Rivedi anche la sezione delle domande frequenti di seguito.
Ciao utente di directadmin!
Abbiamo rilevato che esegui mysqltuner con le credenziali di da_admin prese da /usr/local/directadmin/conf/my.cnf, il che potrebbe portare alla scoperta di una password!
Leggi il link per maggiori dettagli Problema #289.
Tutti i controlli eseguiti da MySQLTuner sono documentati nella documentazione MySQLTuner Internals.
Scegli uno di questi metodi:
1) Download diretto dello script (il metodo più semplice e breve):
bash
wget http://mysqltuner.pl/ -O mysqltuner.pl
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/basic_passwords.txt -O basic_passwords.txt
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/vulnerabilities.csv -O vulnerabilities.csv
2) È possibile scaricare l'intero repository utilizzando git clone o git clone --depth 1 -b master seguito dall'URL di clonazione sopra.
Sysschema è installato per impostazione predefinita in MySQL 5.7 e MySQL 8 da Oracle. Per impostazione predefinita, in MySQL 5.6/5.7/8, lo schema delle prestazioni è abilitato. Per la versione precedente di MySQL 5.6, è possibile seguire questo comando per creare un nuovo database sys contenente una vista molto utile sullo schema delle prestazioni:
```bash curl “https://codeload.github.com/mysql/mysql-sys/zip/master” > sysschema.zip
unzip -l sysschema.zip unzip sysschema.zip cd mysql-sys-master mysql -uroot -p < sys_56.sql ```
```bash curl “https://github.com/FromDual/mariadb-sys/archive/refs/heads/master.zip” > sysschema.zip
unzip -l sysschema.zip unzip sysschema.zip cd mariadb-sys-master mysql -u root -p < ./sys_10.sql ```
Per impostazione predefinita, performance_schema è abilitato e sysschema è installato sull'ultima versione.
Per impostazione predefinita, su MariaDB, lo schema delle prestazioni è disabilitato (MariaDB<10.6).
Considera di attivare lo schema delle prestazioni nel tuo file di configurazione my.cnf:
ini
[mysqld]
performance_schema = on
performance-schema-consumer-events-statements-history-long = ON
performance-schema-consumer-events-statements-history = ON
performance-schema-consumer-events-statements-current = ON
performance-schema-consumer-events-stages-current=ON
performance-schema-consumer-events-stages-history=ON
performance-schema-consumer-events-stages-history-long=ON
performance-schema-consumer-events-transactions-current=ON
performance-schema-consumer-events-transactions-history=ON
performance-schema-consumer-events-transactions-history-long=ON
performance-schema-consumer-events-waits-current=ON
performance-schema-consumer-events-waits-history=ON
performance-schema-consumer-events-waits-history-long=ON
performance-schema-instrument='%=ON'
max-digest-length=2048
performance-schema-max-digest-length=2018
Sysschema non è installato per impostazione predefinita in MariaDB prima della 10.6 MariaDB sys
È possibile seguire questo comando per creare un nuovo database sys contenente una vista utile sullo schema delle prestazioni:
```bash curl “https://codeload.github.com/FromDual/mariadb-sys/zip/master” > mariadb-sys.zip
unzip -l mariadb-sys.zip unzip mariadb-sys.zip cd mariadb-sys-master/ mysql -u root -p < ./sys_10.sql ```
Questo errore può essere tranquillamente ignorato Considera di utilizzare una versione recente di MySQL/MariaDB per evitare questo tipo di problema durante l'installazione di sysschema
Nelle versioni recenti, sysschema è installato e integrato per impostazione predefinita come schema sys (SHOW DATABASES)
ERRORE alla riga 21: impossibile aprire il file ‘./tables/sys_config_data_10.sql – ported’, errore: 2
Correzione della configurazione di sysctl (/etc/sysctl.conf)
– È un'impostazione a livello di sistema e non un'impostazione del database: Impostazioni del kernel FS di Linux
È possibile controllare i suoi valori tramite:
bash
$ cat /proc/sys/fs/aio-*
65536
2305
Ad esempio, per impostare il valore aio-max-nr, aggiungere la seguente riga al file /etc/sysctl.conf:
bash
fs.aio-max-nr = 1048576
Per attivare la nuova impostazione:
bash
$ sysctl -p /etc/sysctl.conf
Utilizzo: utilizzo minimo a livello locale
bash
perl mysqltuner.pl --host 127.0.0.1
Naturalmente, è possibile aggiungere il bit di esecuzione (chmod +x mysqltuner.pl) in modo da poterlo eseguire senza chiamare direttamente Perl.
Utilizzo: utilizzo minimo da remoto
Nella versione precedente, –forcemem doveva essere impostato manualmente, per poter eseguire un'analisi di MySQLTuner
Dalla versione 2.1.10, memoria e swap sono definiti a 1 Gb per impostazione predefinita.
Se si desidera un valore più accurato in base al proprio server remoto, è possibile impostare –forcemem e –forceswap sul valore reale della RAM
bash
perl mysqltuner.pl --host targetDNS_IP --user admin_user --pass admin_password
Utilizzo: abilita le informazioni di output massime su MySQL/MariaDb senza debug
bash
perl mysqltuner.pl --verbose
perl mysqltuner.pl --buffers --dbstat --idxstat --sysstat --pfstat --tbstat
Utilizzo: abilita il controllo delle vulnerabilità CVE per la tua versione di MariaDB o MySQL
bash
perl mysqltuner.pl --cvefile=vulnerabilities.csv
Utilizzo: scrivi il risultato in un file con le informazioni visualizzate
bash
perl mysqltuner.pl --outputfile /tmp/result_mysqltuner.txt
Utilizzo: scrivi il risultato in un file senza visualizzare le informazioni
bash
perl mysqltuner.pl --silent --outputfile /tmp/result_mysqltuner.txt
Utilizzo: utilizzo del modello per personalizzare il file di reporting in base alla sintassi di Text::Template.
bash
perl mysqltuner.pl --silent --reportfile /tmp/result_mysqltuner.txt --template=/tmp/mymodel.tmpl
Importante: il modulo Text::Template è obbligatorio per le opzioni --reportfile e/o --template, perché questo modulo è necessario per generare un output appropriato basato su un modello di testo.
Utilizzo: dump di tutte le viste information_schema e sysschema come file csv nella sottodirectory dei risultati
bash
perl mysqltuner.pl --verbose --dumpdir=./result
Utilizzo: abilita le informazioni di debug
bash
perl mysqltuner.pl --debug
Utilizzo: aggiorna MySQLTuner e i file di dati (password e cve) se necessario
bash
perl mysqltuner.pl --checkversion --updateversion
MySQLTuner ora ha un supporto sperimentale per i servizi MySQL basati su cloud.
--cloud: abilita la modalità cloud. Questo è un flag generico per qualsiasi provider di cloud.--azure: abilita il supporto specifico per Azure.--ssh-host <hostname>: l'host SSH per le connessioni cloud.--ssh-user <username>: l'utente SSH per le connessioni cloud.--ssh-password <password>: la password SSH per le connessioni cloud.--ssh-identity-file <path>: il percorso del file di identità SSH per le connessioni cloud.La generazione di HTML si basa su Python/Jinja2
Procedura di generazione di HTML
I modelli Jinja2 si trovano nella sottodirectory dei modelli
Un esempio di base si chiama basic.html.j2
Installazione di Python j2
bash
python -mvenv j2
source ./j2/bin/activate
(j2) pip install j2
Utilizzo della generazione di report HTML
bash
perl mysqltuner.pl --verbose --json > reports.json
cat reports.json j2 -f json MySQLTuner-perl/templates/basic.html.j2 > variables.html
o
bash
perl mysqltuner.pl --verbose --json | j2 -f json MySQLTuner-perl/templates/basic.html.j2 > variables.html
La generazione di HTML si basa su AHA
Procedura di generazione di HTML
Installazione di Aha
Segui le istruzioni dal repository di Github
Repository principale di GitHub AHA
Utilizzo della generazione di report HTML AHA
perl mysqltuner.pl --verbose --color > reports.txt
aha --black --title "MySQLTuner" -f "reports.txt" > "reports.html"
o
perl mysqltuner.pl --verbose --color | aha --black --title "MySQLTuner" > reports.html
Domanda: quali sono i prerequisiti per l'esecuzione di MySQL tuner?
Prima di eseguire MySQL tuner, è necessario disporre di quanto segue:
Domanda: MySQL tuner può apportare modifiche alla mia configurazione automaticamente?
No., MySQL tuner fornisce solo raccomandazioni. Non apporta automaticamente alcuna modifica ai file di configurazione. Spetta all'utente rivedere i suggerimenti e implementarli secondo necessità.
Domanda: con quale frequenza devo eseguire MySQL tuner?
Si consiglia di eseguire periodicamente MySQL tuner, soprattutto dopo modifiche significative al server MySQL o al suo carico di lavoro.
Per risultati ottimali, esegui lo script dopo che il server è stato in esecuzione per almeno 24 ore per raccogliere dati sufficienti sulle prestazioni.
Domanda: come interpreto i risultati di MySQL tuner?
MySQL tuner fornisce l'output sotto forma di suggerimenti e avvisi.
Rivedi ogni raccomandazione e considera di implementare le modifiche nel tuo file di configurazione di MySQL (di solito “my.cnf” o “my.ini”).
Sii cauto quando apporti modifiche e esegui sempre il backup del file di configurazione prima di apportare qualsiasi modifica.
Domanda: MySQL tuner può causare danni al mio database o server?
Sebbene MySQL tuner stesso non apporterà alcuna modifica al tuo server, l'implementazione cieca delle sue raccomandazioni senza comprenderne l'impatto può causare problemi.
Assicurati sempre di comprendere le implicazioni di ogni suggerimento prima di applicarlo al tuo server.
Domanda: posso usare MySQL tuner per ottimizzare altri sistemi di database come PostgreSQL o SQL Server?
MySQL tuner è progettato specificamente per i server MySQL. Per ottimizzare altri sistemi di database, sarebbe necessario utilizzare strumenti progettati per tali sistemi, come pgTune per PostgreSQL o gli strumenti di prestazione integrati di SQL Server.
Domanda: MySQL tuner supporta MariaDB e Percona Server?
Sì, MySQL tuner supporta MariaDB e Percona Server poiché sono derivati di MySQL e condividono un'architettura simile. Lo script può analizzare e fornire raccomandazioni anche per questi sistemi.
Domanda: cosa devo fare se ho bisogno di aiuto con MySQL tuner o ho domande sulle raccomandazioni?
Se hai bisogno di aiuto con MySQL tuner o hai domande sulle raccomandazioni fornite dallo script, puoi consultare la documentazione di MySQL tuner, chiedere consiglio ai forum online o consultare un esperto di MySQL.
Sii cauto quando implementi le modifiche per garantire la stabilità e le prestazioni del tuo server.
Domanda: MySQLTuner risolverà il mio server MySQL lento?
No. MySQLTuner è uno script di sola lettura. Non scriverà in alcun file di configurazione, non modificherà lo stato di alcun demone. Ti darà una panoramica delle prestazioni del tuo server e formulerà alcune raccomandazioni di base per i miglioramenti che puoi apportare dopo il suo completamento.
Domanda: posso licenziare il mio DBA ora?
MySQLTuner non sostituirà il tuo DBA in nessuna forma o modo.
Se il tuo DBA prende costantemente il tuo parcheggio e ti ruba il pranzo dal frigorifero, allora potresti volerlo considerare, ma questa è una tua decisione.
Domanda: perché MySQLTuner continua a chiedermi le credenziali di accesso per MySQL più e più volte?
Lo script farà del suo meglio per accedere con ogni mezzo possibile. Verificherà i file ~/.my.cnf, i file delle password di Plesk e gli accessi root con password vuota. Se nessuno di questi è disponibile, ti verrà richiesta una password. Se desideri che lo script venga eseguito in modo automatizzato senza l'intervento dell'utente, crea un file .my.cnf nella tua home directory che contenga:
[client]
user=someusername
password=thatuserspassword
Una volta creato, assicurati che sia di proprietà del tuo utente e che la modalità del file sia 0600. Ciò dovrebbe impedire agli occhi indiscreti di ottenere le credenziali di accesso al database in condizioni normali.
Domanda: c'è un altro modo per proteggere le credenziali sulle ultime distribuzioni di MySQL e MariaDB?
È possibile utilizzare le utilità di mysql_config_editor.
bash
$ mysql_config_editor set –login-path=client –user=someusername –password –host=localhost
Inserisci password: ********
Successivamente, verrà creato ~/.mylogin.cnf con l'accesso appropriato.
Per ottenere informazioni sulle credenziali archiviate, utilizzare il seguente comando:
bash
$mysql_config_editor print
[client]
user = someusername
password = *****
host = localhost
Domanda: quali sono i privilegi minimi necessari per un utente specifico di mysqltuner nel database?
bash
mysql>GRANT SELECT, PROCESS,EXECUTE, REPLICATION CLIENT,
SHOW DATABASES,SHOW VIEW
ON *.*
TO 'mysqltuner'@'localhost' identified by pwd1234;
Domanda: non funziona sul mio sistema operativo! Che succede?!
Questo genere di cose è destinato ad accadere. Ecco i dettagli di cui ho bisogno da te per indagare sul problema:
Domanda: come eseguire i controlli delle vulnerabilità CVE?
Domanda: come usare mysqltuner da un host remoto? Grazie a @rolandomysqldba
Connessione e autenticazione
--host <hostname> Connettiti a un host remoto per eseguire i test (predefinito: localhost)
--socket <socket> Usa un socket diverso per una connessione locale
--port <port> Porta da utilizzare per la connessione (predefinita: 3306)
--user <username> Nome utente da utilizzare per l'autenticazione
--pass <password> Password da utilizzare per l'autenticazione
--defaults-file <path> file dei valori predefiniti per le credenziali
Poiché si sta utilizzando un host remoto, utilizzare i parametri per fornire i valori dal sistema operativo
--forcemem <size> Quantità di RAM installata in megabyte
--forceswap <size> Quantità di memoria di swap configurata in megabyte
Se il database ha troppe tabelle o tabelle molto grandi, usa questo:
--skipsize Non enumerare tabelle e i loro tipi/dimensioni (predefinito: on)
(Consigliato per server con molte tabelle)
Domanda: posso installare questo progetto usando homebrew su Apple Macintosh?
Sì! brew install mysqltuner può essere usato per installare questa applicazione usando homebrew su Apple Macintosh.
MySQLTuner contiene le seguenti configurazioni di Vagrant: * Fedora Core 30 / Docker
Il file Vagrant è archiviato nella sottodirectory Vagrant. * Segui i seguenti passaggi dopo l'installazione di Vagrant: $ vagrant up
MySQLTuner contiene una configurazione Vagrant per scopi di test e sviluppo * Installa VirtualBox e Vagrant * https://www.virtualbox.org/wiki/Downloads * https://www.vagrantup.com/downloads.html * Clona il repository * git clone https://github.com/major/MySQLTuner-perl.git * Installa i plugin di Vagrant vagrant-hostmanager e vagrant-vbguest * vagrant plugin install vagrant-hostmanager * vagrant plugin install vagrant-vbguest * Aggiungi la box di Fedora Core 30 dal sito Web di download ufficiale di Fedora * vagrant box add –name generic/fedora30 * Crea una directory di dati * mkdir data
$ sh build/createTestEnvs.sh
$ source build/bashrc
$ mysql_percona80 sakila
sakila> ...
$ docker images
mariadb 10.1 fc612450e1f1 12 days ago 352MB
mariadb 10.2 027b7c57b8c6 12 days ago 340MB
mariadb 10.3 47dff68107c4 12 days ago 343MB
mariadb 10.4 92495405fc36 12 days ago 356MB
mysql 5.6 95e0fc47b096 2 weeks ago 257MB
mysql 5.7 383867b75fd2 2 weeks ago 373MB
mysql 8.0 b8fd9553f1f0 2 weeks ago 445MB
percona/percona-server 5.7 ddd245ed3496 5 weeks ago 585MB
percona/percona-server 5.6 ed0a36e0cf1b 6 weeks ago 421MB
percona/percona-server 8.0 390ae97d57c6 6 weeks ago 697MB
mariadb 5.5 c7bf316a4325 4 months ago 352MB
mariadb 10.0 d1bde56970c6 4 months ago 353MB
mysql 5.5 d404d78aa797 4 months ago 205MB
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da2be9b050c9 mariadb:5.5 "docker-entrypoint.s…" 7 hours ago Up 7 hours 0.0.0.0:5311->3306/tcp mariadb55
5deca25d5ac8 mariadb:10.0 "docker-entrypoint.s…" 7 hours ago Up 7 hours 0.0.0.0:5310->3306/tcp mariadb100
73aaeb37e2c2 mariadb:10.1 "docker-entrypoint.s…" 7 hours ago Up 7 hours 0.0.0.0:5309->3306/tcp mariadb101
72ffa77e01ec mariadb:10.2 "docker-entrypoint.s…" 7 hours ago Up 7 hours 0.0.0.0:5308->3306/tcp mariadb102
f5996f2041df mariadb:10.3 "docker-entrypoint.s…" 7 hours ago Up 7 hours 0.0.0.0:5307->3306/tcp mariadb103
4890c52372bb mariadb:10.4 "docker-entrypoint.s…" 7 hours ago Up 7 hours 0.0.0.0:5306->3306/tcp mariadb104
6b9dc078e921 percona/percona-server:5.6 "/docker-entrypoint.…" 7 hours ago Up 7 hours 0.0.0.0:4308->3306/tcp percona56
3a4c7c826d4c percona/percona-server:5.7 "/docker-entrypoint.…" 7 hours ago Up 7 hours 0.0.0.0:4307->3306/tcp percona57
3dda408c91b0 percona/percona-server:8.0 "/docker-entrypoint.…" 7 hours ago Up 7 hours 33060/tcp, 0.0.0.0:4306->3306/tcp percona80
600a4e7e9dcd mysql:5.5 "docker-entrypoint.s…" 7 hours ago Up 7 hours 0.0.0.0:3309->3306/tcp mysql55
4bbe54342e5d mysql:5.6 "docker-entrypoint.s…" 7 hours ago Up 7 hours 0.0.0.0:3308->3306/tcp mysql56
a49783249a11 mysql:5.7 "docker-entrypoint.s…" 7 hours ago Up 7 hours 33060/tcp, 0.0.0.0:3307->3306/tcp mysql57
d985820667c2 mysql:8.0 "docker-entrypoint.s…" 7 hours ago Up 7 hours 0.0.0.0:3306->3306/tcp, 33060/tcp mysql 8 0
Come contribuire utilizzando una Pull Request? Segui questa guida: Creazione di una pull request