diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..c2b34e6 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,14 @@ +# Contributor Code of Conduct + +As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities. + +We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, age, or religion. + +Examples of unacceptable behavior by participants include the use of sexual language or imagery, derogatory comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed from the project team. + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers. + +This Code of Conduct is adapted from the [Contributor Covenant](http:contributor-covenant.org), version 1.0.0, available at [http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/) + diff --git a/USAGE.md b/USAGE.md index c5fbc92..8742623 100644 --- a/USAGE.md +++ b/USAGE.md @@ -1,6 +1,6 @@ # NAME - MySQLTuner 1.6.8 - MySQL High Performance Tuning Script + MySQLTuner 1.6.10 - MySQL High Performance Tuning Script # IMPORTANT USAGE GUIDELINES @@ -39,6 +39,7 @@ You must provide the remote server's total memory when connecting to other serve --debug Print debug information --dbstat Print database information --idxstat Print index information + --sysstat Print system information --bannedports Ports banned separated by comma(,) --maxportallowed Number of ports opened allowed on this hosts --cvefile CVE File for vulnerability checks diff --git a/build/mysqltuner.spec.tpl b/build/mysqltuner.spec.tpl index 1fde663..e4cfcb8 100644 --- a/build/mysqltuner.spec.tpl +++ b/build/mysqltuner.spec.tpl @@ -46,6 +46,6 @@ rm -rf $RPM_BUILD_ROOT %{_mandir}/man1/* %changelog -* Thu Jan 5 2015 Jean-Marie RENOUARD %VERSION%-1 +* Thu Apr 14 2016 Jean-Marie RENOUARD %VERSION%-1 - Initial RPM release diff --git a/mysqltuner.pl b/mysqltuner.pl index 8b9187c..d8d0758 100755 --- a/mysqltuner.pl +++ b/mysqltuner.pl @@ -1,5 +1,5 @@ #!/usr/bin/env perl -# mysqltuner.pl - Version 1.6.9 +# mysqltuner.pl - Version 1.6.10 # High Performance MySQL Tuning Script # Copyright (C) 2006-2016 Major Hayden - major@mhtx.net # @@ -51,7 +51,7 @@ use Data::Dumper; $Data::Dumper::Pair = " : "; # Set up a few variables for use in the script -my $tunerversion = "1.6.9"; +my $tunerversion = "1.6.10"; my ( @adjvars, @generalrec ); # Set defaults @@ -157,7 +157,7 @@ sub usage { . " --debug Print debug information\n" . " --dbstat Print database information\n" . " --idxstat Print index information\n" - . "--sysstat Print system information\n" + . " --sysstat Print system information\n" . " --bannedports Ports banned separated by comma(,)\n" . " --maxportallowed Number of ports opened allowed on this hosts\n" . " --cvefile CVE File for vulnerability checks\n" @@ -933,31 +933,40 @@ sub get_tuning_info { # Populates all of the variable and status hashes my ( %mystat, %myvar, $dummyselect, %myrepl, %myslaves ); -sub get_all_vars { +sub arr2hash { + my $href=shift; + my $harr=shift; + my $sep=shift; + $sep='\s' unless defined($sep); + foreach my $line (@$harr) { + $line =~ /([a-zA-Z_]*)\s*$sep\s*(.*)/; + $$href{$1} = $2; + debugprint "V: $1 = $2"; + } +} +sub get_all_vars { # We need to initiate at least one query so that our data is useable $dummyselect = select_one "SELECT VERSION()"; debugprint "VERSION: " . $dummyselect . ""; $result{'MySQL Client'}{'Version'} = $dummyselect; - my @mysqlvarlist = select_array "SHOW /*!50000 GLOBAL */ VARIABLES"; - foreach my $line (@mysqlvarlist) { - $line =~ /([a-zA-Z_]*)\s*(.*)/; - $myvar{$1} = $2; - $result{'Variables'}{$1} = $2; - debugprint "V: $1 = $2"; - } - my @mysqlstatlist = select_array "SHOW /*!50000 GLOBAL */ STATUS"; - foreach my $line (@mysqlstatlist) { - $line =~ /([a-zA-Z_]*)\s*(.*)/; - $mystat{$1} = $2; - $result{'Status'}{$1} = $2; - debugprint "S: $1 = $2"; - } + + my @mysqlvarlist = select_array ("SHOW GLOBAL VARIABLES"); + push (@mysqlvarlist, select_array ("SHOW VARIABLES")); + arr2hash(\%myvar, \@mysqlvarlist); + $result{'Variables'}=%myvar; + + my @mysqlstatlist = select_array ("SHOW GLOBAL STATUS"); + push (@mysqlstatlist, select_array ("SHOW STATUS")); + arr2hash(\%mystat, \@mysqlstatlist); + $result{'Status'}=%mystat; + $myvar{'have_galera'} = "NO"; if ( defined($myvar{'wsrep_provider_options'}) && $myvar{'wsrep_provider_options'} ne "") { $myvar{'have_galera'} = "YES"; - debugprint "Galera options: ". $myvar{'wsrep_provider_options'}; + debugprint "Galera options: ". $myvar{'wsrep_provider_options'}; } + # Workaround for MySQL bug #59393 wrt. ignore-builtin-innodb if ( ( $myvar{'ignore_builtin_innodb'} || "" ) eq "ON" ) { $myvar{'have_innodb'} = "NO"; @@ -990,16 +999,9 @@ sub get_all_vars { } } debugprint Dumper(@mysqlenginelist); - my @mysqlslave = select_array "SHOW SLAVE STATUS\\G"; - - foreach my $line (@mysqlslave) { - if ( $line =~ /\s*(.*):\s*(.*)/ ) { - debugprint "$1 => $2"; - $myrepl{"$1"} = $2; - $result{'Replication'}{'Status'}{$1} = $2; - } - } - + my @mysqlslave = select_array("SHOW SLAVE STATUS\\G"); + arr2hash(\%myrepl, \@mysqlslave, ':'); + $result{'Replication'}{'Status'}=%myrepl; my @mysqlslaves = select_array "SHOW SLAVE HOSTS"; my @lineitems = (); foreach my $line (@mysqlslaves) { @@ -1107,6 +1109,15 @@ sub get_other_process_memory { } sub get_os_release { + if( -f "/etc/lsb-release") { + my @info_release = get_file_contents "/etc/lsb-release"; + remove_cr @info_release; + my $os_relase = $info_release[3]; + $os_relase =~ s/.*="//; + $os_relase =~ s/"$//; + return $os_relase; + } + if( -f "/etc/system-release") { my @info_release = get_file_contents "/etc/system-release"; remove_cr @info_release; @@ -1129,9 +1140,7 @@ sub get_os_release { $os_relase =~ s/\s+\\n.*//; return $os_relase; } - return "Unknown OS release"; - } sub get_fs_info() { @@ -1169,6 +1178,20 @@ sub get_fs_info() { } } +sub merge_hash +{ + my $h1=shift; + my $h2=shift; + my %result={}; + foreach my $substanceref ( $h1, $h2 ) { + while ( my ($k, $v) = each %$substanceref) { + next if (exists $result{$k}); + $result{$k} = $v; + } + } + return \%result; +} + sub is_virtual_machine() { my $isVm = `grep -Ec '^flags.*\ hypervisor\ ' /proc/cpuinfo`; return ( $isVm == 0 ? 0 : 1 ); @@ -3318,8 +3341,8 @@ sub mysql_innodb { && $mycalc{'pct_write_efficiency'} < 90 ) { badprint "InnoDB Write Log efficiency: " - . $mycalc{'pct_write_efficiency'} . "% (" - . ( $mystat{'Innodb_log_write_requests'} - + . abs($mycalc{'pct_write_efficiency'}) . "% (" + . abs( $mystat{'Innodb_log_write_requests'} - $mystat{'Innodb_log_writes'} ) . " hits/ " . $mystat{'Innodb_log_write_requests'} @@ -3822,7 +3845,7 @@ __END__ =head1 NAME - MySQLTuner 1.6.8 - MySQL High Performance Tuning Script + MySQLTuner 1.6.10 - MySQL High Performance Tuning Script =head1 IMPORTANT USAGE GUIDELINES