From 1e9920b545005388be74595e07805cf0ea1435ee Mon Sep 17 00:00:00 2001 From: Jean-Marie RENOUARD Date: Wed, 25 Aug 2021 12:01:28 +0200 Subject: [PATCH] Update Vulnerabilities list Indenting mysqltuner Update Usage information --- USAGE.md | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++ mysqltuner.pl | 128 ++++++++++++++++++++++------------------- 2 files changed, 225 insertions(+), 59 deletions(-) diff --git a/USAGE.md b/USAGE.md index e69de29..98a6018 100644 --- a/USAGE.md +++ b/USAGE.md @@ -0,0 +1,156 @@ +# NAME + + MySQLTuner 1.8.1 - MySQL High Performance Tuning Script + +# IMPORTANT USAGE GUIDELINES + +To run the script with the default options, run the script without arguments +Allow MySQL server to run for at least 24-48 hours before trusting suggestions +Some routines may require root level privileges (script will provide warnings) +You must provide the remote server's total memory when connecting to other servers + +# CONNECTION AND AUTHENTICATION + + --host Connect to a remote host to perform tests (default: localhost) + --socket Use a different socket for a local connection + --port Port to use for connection (default: 3306) + --user Username to use for authentication + --userenv Name of env variable which contains username to use for authentication + --pass Password to use for authentication + --passenv Name of env variable which contains password to use for authentication + --ssl-ca Path to public key + --mysqladmin Path to a custom mysqladmin executable + --mysqlcmd Path to a custom mysql executable + --defaults-file Path to a custom .my.cnf + --server-log Path to explict log file + +# PERFORMANCE AND REPORTING OPTIONS + + --skipsize Don't enumerate tables and their types/sizes (default: on) + (Recommended for servers with many tables) + --skippassword Don't perform checks on user passwords(default: off) + --checkversion Check for updates to MySQLTuner (default: don't check) + --updateversion Check for updates to MySQLTuner and update when newer version is available (default: don't check) + --forcemem Amount of RAM installed in megabytes + --forceswap Amount of swap memory configured in megabytes + --passwordfile Path to a password file list(one password by line) + +# OUTPUT OPTIONS + + --silent Don't output anything on screen + --nogood Remove OK responses + --nobad Remove negative/suggestion responses + --noinfo Remove informational responses + --debug Print debug information + --noprocess Consider no other process is running + --dbstat Print database information + --nodbstat Don't Print database information + --tbstat Print table information + --notbstat Don't Print table information + --colstat Print column information + --nocolstat Don't Print column information + --idxstat Print index information + --noidxstat Don't Print index information + --sysstat Print system information + --nosysstat Don't Print system information + --pfstat Print Performance schema + --nopfstat Don't Print Performance schema + --verbose Prints out all options (default: no verbose, dbstat, idxstat, sysstat, tbstat, pfstat) + --bannedports Ports banned separated by comma(,) + --maxportallowed Number of ports opened allowed on this hosts + --cvefile CVE File for vulnerability checks + --nocolor Don't print output in color + --json Print result as JSON string + --buffers Print global and per-thread buffer values + --outputfile Path to a output txt file + --reportfile Path to a report txt file + --template Path to a template file + +# PERLDOC + +You can find documentation for this module with the perldoc command. + + perldoc mysqltuner + +## INTERNALS + +[https://github.com/major/MySQLTuner-perl/blob/master/INTERNALS.md](https://github.com/major/MySQLTuner-perl/blob/master/INTERNALS.md) + + Internal documentation + +# AUTHORS + +Major Hayden - major@mhtx.net + +# CONTRIBUTORS + +- Matthew Montgomery +- Paul Kehrer +- Dave Burgess +- Jonathan Hinds +- Mike Jackson +- Nils Breunese +- Shawn Ashlee +- Luuk Vosslamber +- Ville Skytta +- Trent Hornibrook +- Jason Gill +- Mark Imbriaco +- Greg Eden +- Aubin Galinotti +- Giovanni Bechis +- Bill Bradford +- Ryan Novosielski +- Michael Scheidell +- Blair Christensen +- Hans du Plooy +- Victor Trac +- Everett Barnes +- Tom Krouper +- Gary Barrueto +- Simon Greenaway +- Adam Stein +- Isart Montane +- Baptiste M. +- Cole Turner +- Major Hayden +- Joe Ashcraft +- Jean-Marie Renouard +- Stephan GroBberndt +- Christian Loos + +# SUPPORT + +Bug reports, feature requests, and downloads at http://mysqltuner.pl/ + +Bug tracker can be found at https://github.com/major/MySQLTuner-perl/issues + +Maintained by Major Hayden (major\\@mhtx.net) - Licensed under GPL + +# SOURCE CODE + +[https://github.com/major/MySQLTuner-perl](https://github.com/major/MySQLTuner-perl) + + git clone https://github.com/major/MySQLTuner-perl.git + +# COPYRIGHT AND LICENSE + +Copyright (C) 2006-2021 Major Hayden - major@mhtx.net + +For the latest updates, please visit http://mysqltuner.pl/ + +Git repository available at https://github.com/major/MySQLTuner-perl + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <https://www.gnu.org/licenses/>. diff --git a/mysqltuner.pl b/mysqltuner.pl index f43e39e..9c4b9ab 100755 --- a/mysqltuner.pl +++ b/mysqltuner.pl @@ -204,7 +204,7 @@ $opt{dbstat} = 0 if ( $opt{nodbstat} == 1 ); # Don't Print database information $opt{noprocess} = 0 if ( $opt{noprocess} == 1 ); # Don't Print process information $opt{sysstat} = 0 if ( $opt{nosysstat} == 1 ); # Don't Print sysstat information -$opt{pfstat} = 0 +$opt{pfstat} = 0 if ( $opt{nopfstat} == 1 ); # Don't Print performance schema information $opt{idxstat} = 0 if ( $opt{noidxstat} == 1 ); # Don't Print index information @@ -1669,18 +1669,18 @@ sub get_kernel_info { infoprint "TCP slot entries is > 100."; } - if ( -f "/proc/sys/fs/aio-max-nr" ) - { - if ( `sysctl -n fs.aio-max-nr` < 1000000 ) { - badprint - "Max running total of the number of events is < 1M, please consider having a value greater than 1M"; - push @generalrec, "setup Max running number events greater than 1M"; - push @adjvars, - 'fs.aio-max-nr > 1M (echo 1048576 > /proc/sys/fs/aio-max-nr)'; - } else { - infoprint "Max Number of AIO events is > 1M."; - } - } + if ( -f "/proc/sys/fs/aio-max-nr" ) { + if ( `sysctl -n fs.aio-max-nr` < 1000000 ) { + badprint +"Max running total of the number of events is < 1M, please consider having a value greater than 1M"; + push @generalrec, "setup Max running number events greater than 1M"; + push @adjvars, + 'fs.aio-max-nr > 1M (echo 1048576 > /proc/sys/fs/aio-max-nr)'; + } + else { + infoprint "Max Number of AIO events is > 1M."; + } + } } sub get_system_info { @@ -2070,7 +2070,7 @@ sub get_replication_status { "This replication slave is not running but seems to be configured."; } if ( defined($io_running) - && $io_running =~ /yes/i + && $io_running =~ /yes/i && $sql_running =~ /yes/i ) { if ( $myvar{'read_only'} eq 'OFF' ) { @@ -2742,18 +2742,21 @@ sub calculations { # Table cache if ( $mystat{'Opened_tables'} > 0 ) { - if (not defined($mystat{'Table_open_cache_hits'})) { - $mycalc{'table_cache_hit_rate'} = - int( $mystat{'Open_tables'} * 100 / $mystat{'Opened_tables'} ); - } else { - $mycalc{'table_cache_hit_rate'} = - int( - $mystat{'Table_open_cache_hits'} * 100 / ( - $mystat{'Table_open_cache_hits'} + - $mystat{'Table_open_cache_misses'} ) ); - } + if ( not defined( $mystat{'Table_open_cache_hits'} ) ) { + $mycalc{'table_cache_hit_rate'} = + int( $mystat{'Open_tables'} * 100 / $mystat{'Opened_tables'} ); + } + else { + $mycalc{'table_cache_hit_rate'} = int( + $mystat{'Table_open_cache_hits'} * 100 / ( + $mystat{'Table_open_cache_hits'} + + $mystat{'Table_open_cache_misses'} + ) + ); + } - } else { + } + else { $mycalc{'table_cache_hit_rate'} = 100; } @@ -2811,8 +2814,10 @@ sub calculations { } # InnoDB - $myvar{'innodb_log_files_in_group'} = 1 unless defined($myvar{'innodb_log_files_in_group'}); - $myvar{"innodb_buffer_pool_instances"} = 1 unless defined($myvar{'innodb_buffer_pool_instances'}); + $myvar{'innodb_log_files_in_group'} = 1 + unless defined( $myvar{'innodb_log_files_in_group'} ); + $myvar{"innodb_buffer_pool_instances"} = 1 + unless defined( $myvar{'innodb_buffer_pool_instances'} ); if ( $myvar{'have_innodb'} eq "YES" ) { $mycalc{'innodb_log_size_pct'} = ( $myvar{'innodb_log_file_size'} * @@ -3304,21 +3309,23 @@ sub mysql_stats { if ( $mystat{'Open_tables'} > 0 ) { if ( $mycalc{'table_cache_hit_rate'} < 20 ) { - unless (defined($mystat{'Table_open_cache_hits'})) { - badprint "Table cache hit rate: $mycalc{'table_cache_hit_rate'}% (" - . hr_num( $mystat{'Open_tables'} ) - . " hits / " - . hr_num( $mystat{'Opened_tables'} ) - . " requests)"; - } else { - badprint "Table cache hit rate: $mycalc{'table_cache_hit_rate'}% (" - . hr_num( $mystat{'Table_open_cache_hits'} ) - . " hits / " - . hr_num( $mystat{'Table_open_cache_hits'} + - $mystat{'Table_open_cache_misses'} ) - . " requests)"; - } - + unless ( defined( $mystat{'Table_open_cache_hits'} ) ) { + badprint + "Table cache hit rate: $mycalc{'table_cache_hit_rate'}% (" + . hr_num( $mystat{'Open_tables'} ) + . " hits / " + . hr_num( $mystat{'Opened_tables'} ) + . " requests)"; + } + else { + badprint + "Table cache hit rate: $mycalc{'table_cache_hit_rate'}% (" + . hr_num( $mystat{'Table_open_cache_hits'} ) + . " hits / " + . hr_num( $mystat{'Table_open_cache_hits'} + + $mystat{'Table_open_cache_misses'} ) + . " requests)"; + } if ( mysql_version_ge( 5, 1 ) ) { $table_cache_var = "table_open_cache"; @@ -3360,20 +3367,23 @@ sub mysql_stats { . ")" ); } else { - unless (defined($mystat{'Table_open_cache_hits'})) { - goodprint "Table cache hit rate: $mycalc{'table_cache_hit_rate'}% (" - . hr_num( $mystat{'Open_tables'} ) - . " hits / " - . hr_num( $mystat{'Opened_tables'} ) - . " requests)"; - } else { - goodprint "Table cache hit rate: $mycalc{'table_cache_hit_rate'}% (" - . hr_num( $mystat{'Table_open_cache_hits'} ) - . " hits / " - . hr_num( $mystat{'Table_open_cache_hits'} + - $mystat{'Table_open_cache_misses'} ) - . " requests)"; - } + unless ( defined( $mystat{'Table_open_cache_hits'} ) ) { + goodprint + "Table cache hit rate: $mycalc{'table_cache_hit_rate'}% (" + . hr_num( $mystat{'Open_tables'} ) + . " hits / " + . hr_num( $mystat{'Opened_tables'} ) + . " requests)"; + } + else { + goodprint + "Table cache hit rate: $mycalc{'table_cache_hit_rate'}% (" + . hr_num( $mystat{'Table_open_cache_hits'} ) + . " hits / " + . hr_num( $mystat{'Table_open_cache_hits'} + + $mystat{'Table_open_cache_misses'} ) + . " requests)"; + } } } @@ -5349,7 +5359,7 @@ sub trim { sub get_wsrep_options { return () unless defined $myvar{'wsrep_provider_options'}; - my @galera_options = split /;/, $myvar{'wsrep_provider_options'}; + my @galera_options = split /;/, $myvar{'wsrep_provider_options'}; my $wsrep_slave_threads = $myvar{'wsrep_slave_threads'}; push @galera_options, ' wsrep_slave_threads = ' . $wsrep_slave_threads; @galera_options = remove_cr @galera_options; @@ -5371,7 +5381,7 @@ sub get_wsrep_option { my @galera_options = get_wsrep_options; return '' unless scalar(@galera_options) > 0; my @memValues = grep /\s*$key =/, @galera_options; - my $memValue = $memValues[0]; + my $memValue = $memValues[0]; return 0 unless defined $memValue; $memValue =~ s/.*=\s*(.+)$/$1/g; return $memValue; @@ -5542,7 +5552,7 @@ having sum(if(c.column_key in ('PRI','UNI'), 1,0)) = 0" goodprint "Galera Cluster address is defined: " . $myvar{'wsrep_cluster_address'}; my @NodesTmp = split /,/, $myvar{'wsrep_cluster_address'}; - my $nbNodes = @NodesTmp; + my $nbNodes = @NodesTmp; infoprint "There are $nbNodes nodes in wsrep_cluster_address"; my $nbNodesSize = trim( $mystat{'wsrep_cluster_size'} ); if ( $nbNodesSize == 3 or $nbNodesSize == 5 ) {