From 073a6244a58ddede3cc824fd8b5ca970390bab10 Mon Sep 17 00:00:00 2001 From: Jean-Marie RENOUARD Date: Wed, 10 Jan 2018 15:14:19 +0100 Subject: [PATCH] Update git ignorewq --- .gitignore | 1 + USAGE.md | 3 +- Vagrant/Vagrantfile | 99 ++++++++++++++++++++++++++++++++++ mysqltuner.pl | 129 +++++++++++++++++++++++--------------------- 4 files changed, 171 insertions(+), 61 deletions(-) create mode 100644 Vagrant/Vagrantfile diff --git a/.gitignore b/.gitignore index ea6dd22..49265d7 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ build/build.log build/cve* build/vulnerabilities* *.bak +Vagrant/Vagrantfile diff --git a/USAGE.md b/USAGE.md index cfac532..bb9a426 100644 --- a/USAGE.md +++ b/USAGE.md @@ -1,6 +1,6 @@ # NAME - MySQLTuner 1.7.2 - MySQL High Performance Tuning Script + MySQLTuner 1.7.5 - MySQL High Performance Tuning Script # IMPORTANT USAGE GUIDELINES @@ -18,6 +18,7 @@ You must provide the remote server's total memory when connecting to other serve --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 diff --git a/Vagrant/Vagrantfile b/Vagrant/Vagrantfile new file mode 100644 index 0000000..2f59cf7 --- /dev/null +++ b/Vagrant/Vagrantfile @@ -0,0 +1,99 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# All Vagrant configuration is done below. The "2" in Vagrant.configure +# configures the configuration version (we support older styles for +# backwards compatibility). Please don't change it unless you know what +# you're doing. +Vagrant.configure(2) do |config| + # The most common configuration options are documented and commented below. + # For a complete reference, please see the online documentation at + # https://docs.vagrantup.com. + + # Every Vagrant development environment requires a box. You can search for + # boxes at https://atlas.hashicorp.com/search. + config.vm.box = "fc23-mariadb10-0" + config.vm.box_url = "https://download.fedoraproject.org/pub/fedora/linux/releases/23/Cloud/x86_64/Images/Fedora-Cloud-Base-Vagrant-23-20151030.x86_64.vagrant-virtualbox.box" + # Disable automatic box update checking. If you disable this, then + # boxes will only be checked for updates when the user runs + # `vagrant box outdated`. This is not recommended. + # config.vm.box_check_update = false + config.vbguest.auto_update = true + # Create a forwarded port mapping which allows access to a specific port + # within the machine from a port on the host machine. In the example below, + # accessing "localhost:8080" will access port 80 on the guest machine. + # config.vm.network "forwarded_port", guest: 80, host: 8080 + + # Create a private network, which allows host-only access to the machine + # using a specific IP. + # config.vm.network "private_network", ip: "192.168.0.115" + config.hostmanager.enabled = true + config.hostmanager.manage_host = true + config.hostmanager.ignore_private_ip = false + config.hostmanager.include_offline = true + + # Create a public network, which generally matched to bridged network. + # Bridged networks make the machine appear as another physical device on + # your network. + config.vm.network "public_network" + config.vm.hostname = 'dev.app' + config.hostmanager.aliases = %w(dev.app.localdomain dev.app.local) + # Share an additional folder to the guest VM. The first argument is + # the path on the host to the actual folder. The second argument is + # the path on the guest to mount the folder. And the optional third + # argument is a set of non-required options. + config.vm.synced_folder "./data", "/data" + + # Provider-specific configuration so you can fine-tune various + # backing providers for Vagrant. These expose provider-specific options. + # Example for VirtualBox: + # + config.vm.provider "virtualbox" do |vb| + # # Display the VirtualBox GUI when booting the machine + # vb.gui = false + # + # # Customize the amount of memory on the VM: + vb.memory = "1024" + end + # + # View the documentation for the provider you are using for more + # information on available options. + + # Define a Vagrant Push strategy for pushing to Atlas. Other push strategies + # such as FTP and Heroku are also available. See the documentation at + # https://docs.vagrantup.com/v2/push/atlas.html for more information. + # config.push.define "atlas" do |push| + # push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME" + # end + + # Enable provisioning with a shell script. Additional provisioners such as + # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the + # documentation for more information about their specific syntax and use. + config.vm.provision "shell", inline: <<-SHELL + sudo yum -y update + echo "secret" | sudo passwd --stdin root + sudo cp -pr ~vagrant/.ssh /root + sudo chown -R root.root /root/.ssh + sudo yum -y install git python + sudo pip install --upgrade pip + if [ ! -d "/data/MySQLTuner-perl" ]; then + cd /data + sudo git clone https://github.com/major/MySQLTuner-perl.git + fi + sudo yum -y install perl-WWW-Mechanize-GZip perl-App-cpanminus perl-List-MoreUtils + sudo cpanm install File::Util + + sudo yum -y install mariadb mariadb-server wget + sudo systemctl start mariadb.service + mysql -e 'select version();' + cd /data + sudo wget "https://launchpad.net/test-db/employees-db-1/1.0.6/+download/employees_db-full-1.0.6.tar.bz2" + sudo tar xvjf employees_db-full-1.0.6.tar.bz2 + cd employees_db + cat employees.sql | mysql + cd .. + cd MySQLTuner-perl + perl mysqltuner.pl --idxstat --dbstat + SHELL + config.vm.provision :hostmanager +end diff --git a/mysqltuner.pl b/mysqltuner.pl index 9b7aeee..1e0a61a 100755 --- a/mysqltuner.pl +++ b/mysqltuner.pl @@ -1,5 +1,5 @@ #!/usr/bin/env perl -# mysqltuner.pl - Version 1.7.4 +# mysqltuner.pl - Version 1.7.5 # High Performance MySQL Tuning Script # Copyright (C) 2006-2017 Major Hayden - major@mhtx.net # @@ -56,7 +56,7 @@ $Data::Dumper::Pair = " : "; #use Env; # Set up a few variables for use in the script -my $tunerversion = "1.7.4"; +my $tunerversion = "1.7.5"; my ( @adjvars, @generalrec ); # Set defaults @@ -66,7 +66,7 @@ my %opt = ( "nogood" => 0, "noinfo" => 0, "debug" => 0, - "nocolor" => ( ! -t STDOUT ), + "nocolor" => ( !-t STDOUT ), "forcemem" => 0, "forceswap" => 0, "host" => 0, @@ -100,27 +100,27 @@ my %opt = ( # Gather the options from the command line GetOptions( - \%opt, 'nobad', - 'nogood', 'noinfo', - 'debug', 'nocolor', - 'forcemem=i', 'forceswap=i', - 'host=s', 'socket=s', - 'port=i', 'user=s', - 'pass=s', 'skipsize', - 'checkversion', 'mysqladmin=s', - 'mysqlcmd=s', 'help', - 'buffers', 'skippassword', - 'passwordfile=s', 'outputfile=s', - 'silent', 'dbstat', - 'json', 'prettyjson', - 'idxstat', 'noask', - 'template=s', 'reportfile=s', - 'cvefile=s', 'bannedports=s', - 'updateversion', 'maxportallowed=s', - 'verbose', 'sysstat', - 'password=s', 'pfstat', - 'passenv=s', 'userenv=s', - 'defaults-file=s','ssl-ca=s' + \%opt, 'nobad', + 'nogood', 'noinfo', + 'debug', 'nocolor', + 'forcemem=i', 'forceswap=i', + 'host=s', 'socket=s', + 'port=i', 'user=s', + 'pass=s', 'skipsize', + 'checkversion', 'mysqladmin=s', + 'mysqlcmd=s', 'help', + 'buffers', 'skippassword', + 'passwordfile=s', 'outputfile=s', + 'silent', 'dbstat', + 'json', 'prettyjson', + 'idxstat', 'noask', + 'template=s', 'reportfile=s', + 'cvefile=s', 'bannedports=s', + 'updateversion', 'maxportallowed=s', + 'verbose', 'sysstat', + 'password=s', 'pfstat', + 'passenv=s', 'userenv=s', + 'defaults-file=s', 'ssl-ca=s' ) or pod2usage( -exitval => 1, @@ -708,16 +708,17 @@ sub mysql_setup { } if ( $opt{'ssl-ca'} ne 0 ) { - if ( -e -r -f $opt{'ssl-ca'} ) { - $remotestring .= " --ssl-ca=$opt{'ssl-ca'}"; - infoprint "Will connect using ssl public key passed on the command line"; - return 1; - } - else { - badprint - "Attempted to use passed ssl public key, but it was not found or could not be read"; - exit 1; - } + if ( -e -r -f $opt{'ssl-ca'} ) { + $remotestring .= " --ssl-ca=$opt{'ssl-ca'}"; + infoprint + "Will connect using ssl public key passed on the command line"; + return 1; + } + else { + badprint +"Attempted to use passed ssl public key, but it was not found or could not be read"; + exit 1; + } } # Did we already get a username without password on the command line? @@ -815,7 +816,10 @@ sub mysql_setup { exit 1; } } - elsif ( -r "/etc/mysql/debian.cnf" and $doremote == 0 and $opt{'defaults-file'} eq '' ) { + elsif ( -r "/etc/mysql/debian.cnf" + and $doremote == 0 + and $opt{'defaults-file'} eq '' ) + { # We have a debian maintenance account, use it $mysqllogin = "--defaults-file=/etc/mysql/debian.cnf"; @@ -826,8 +830,7 @@ sub mysql_setup { return 1; } else { - badprint -"Attempted to use login credentials from debian maintena + badprint "Attempted to use login credentials from debian maintena nce account, but they failed."; exit 1; } @@ -1149,14 +1152,14 @@ sub get_basic_passwords { } sub get_log_file_real_path { - my $file = shift; + my $file = shift; my $hostname = shift; - my $datadir = shift; + my $datadir = shift; if ( -f "$file" ) { return $file; } elsif ( -f "$hostname.err" ) { - return "$hostname.err" + return "$hostname.err"; } elsif ( $datadir ne "" ) { return "$datadir$hostname.err"; @@ -1167,7 +1170,9 @@ sub get_log_file_real_path { } sub log_file_recommandations { - $myvar{'log_error'} = get_log_file_real_path( $myvar{'log_error'}, $myvar{'hostname'}, $myvar{'datadir'} ); + $myvar{'log_error'} = + get_log_file_real_path( $myvar{'log_error'}, $myvar{'hostname'}, + $myvar{'datadir'} ); subheaderprint "Log file Recommendations"; infoprint "Log file: " . $myvar{'log_error'} . "(" @@ -1208,7 +1213,8 @@ sub log_file_recommandations { my @lastShutdowns; my @lastStarts; - open( my $fh, '<', $myvar{'log_error'} ) or die "Can't open $myvar{'log_error'} for read: $!"; + open( my $fh, '<', $myvar{'log_error'} ) + or die "Can't open $myvar{'log_error'} for read: $!"; while ( my $logLi = <$fh> ) { chomp $logLi; @@ -2682,7 +2688,7 @@ sub mysql_stats { if ( defined $myvar{'query_cache_type'} ) { infoprint "Query Cache Buffers"; - infoprint " +-- Query Cache: " + infoprint " +-- Query Cache: " . $myvar{'query_cache_type'} . " - " . ( $myvar{'query_cache_type'} eq 0 | @@ -3367,8 +3373,9 @@ sub mysqsl_pfs { "Performance should be activated for better diagnostics" ); push( @adjvars, "performance_schema = ON enable PFS" ); } - } else { - if ( mysql_version_le( 5, 5 ) ) { + } + else { + if ( mysql_version_le( 5, 5 ) ) { push( @generalrec, "Performance shouldn't be activated for MySQL and MariaDB 5.5 and lower version" ); @@ -3380,7 +3387,7 @@ sub mysqsl_pfs { unless ( grep /^sys$/, select_array("SHOW DATABASES") ) { infoprint "Sys schema isn't installed."; - push( @generalrec, + push( @generalrec, "Consider installing Sys schema from https://github.com/mysql/mysql-sys" ) unless ( mysql_version_le( 5, 5 ) ); return; @@ -5015,7 +5022,7 @@ sub get_wsrep_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; + push @galera_options, ' wsrep_slave_threads = ' . $wsrep_slave_threads; @galera_options = remove_cr @galera_options; @galera_options = remove_empty @galera_options; debugprint Dumper( \@galera_options ); @@ -5085,8 +5092,8 @@ group by c.table_schema,c.table_name having sum(if(c.column_key in ('PRI','UNI'), 1,0)) = 0" ); - if ( get_wsrep_option('wsrep_slave_threads') > (cpu_cores) *4 - or get_wsrep_option('wsrep_slave_threads') < (cpu_cores) *3 ) + if ( get_wsrep_option('wsrep_slave_threads') > (cpu_cores) * 4 + or get_wsrep_option('wsrep_slave_threads') < (cpu_cores) * 3 ) { badprint "wsrep_slave_threads is not equal to 2, 3 or 4 times number of CPU(s)"; @@ -5397,9 +5404,10 @@ sub mysql_innodb { if ( defined $myvar{'innodb_log_files_in_group'} ) { infoprint " +-- InnoDB Total Log File Size: " . hr_bytes( $myvar{'innodb_log_files_in_group'} * - $myvar{'innodb_log_file_size'} ) . "(" - . $mycalc{'innodb_log_size_pct'} - . " % of buffer pool)"; + $myvar{'innodb_log_file_size'} ) + . "(" + . $mycalc{'innodb_log_size_pct'} + . " % of buffer pool)"; } if ( defined $myvar{'innodb_log_buffer_size'} ) { infoprint " +-- InnoDB Log Buffer: " @@ -5452,13 +5460,14 @@ sub mysql_innodb { . $myvar{'innodb_log_files_in_group'} . "/" . hr_bytes( $myvar{'innodb_buffer_pool_size'} ) . " should be equal 25%"; - push( @adjvars, - "innodb_log_file_size should be (=" - . hr_bytes_rnd( - $myvar{'innodb_buffer_pool_size'} / - $myvar{'innodb_log_files_in_group'} / 4 - ) - . ") if possible, so InnoDB total log files size equals to 25% of buffer pool size." + push( + @adjvars, + "innodb_log_file_size should be (=" + . hr_bytes_rnd( + $myvar{'innodb_buffer_pool_size'} / + $myvar{'innodb_log_files_in_group'} / 4 + ) + . ") if possible, so InnoDB total log files size equals to 25% of buffer pool size." ); push( @generalrec, "Read this before changing innodb_log_file_size and/or innodb_log_files_in_group: http://bit.ly/2wgkDvS" @@ -6164,7 +6173,7 @@ __END__ =head1 NAME - MySQLTuner 1.7.4 - MySQL High Performance Tuning Script + MySQLTuner 1.7.5 - MySQL High Performance Tuning Script =head1 IMPORTANT USAGE GUIDELINES