diff --git a/.perltidy b/.perltidy index c89faf0..3e4678a 100644 --- a/.perltidy +++ b/.perltidy @@ -1,19 +1,19 @@ ---backup-and-modify-in-place ---backup-file-extension=beforeTidy ---block-brace-tightness=2 ---brace-tightness=2 ---closing-token-indentation=1 ---continuation-indentation=4 ---indent-columns=4 ---maximum-line-length=134 ---cuddled-else ---opening-sub-brace-on-new-line ---noopening-brace-on-new-line ---nooutdent-labels ---paren-tightness=2 ---square-bracket-tightness=2 ---vertical-tightness=0 ---vertical-tightness-closing=0 ---break-at-old-comma-breakpoints ---entab-leading-whitespace=4 ---tabs +--backup-and-modify-in-place +--backup-file-extension=beforeTidy +--block-brace-tightness=2 +--brace-tightness=2 +--closing-token-indentation=1 +--continuation-indentation=4 +--indent-columns=4 +--maximum-line-length=134 +--cuddled-else +--opening-sub-brace-on-new-line +--noopening-brace-on-new-line +--nooutdent-labels +--paren-tightness=2 +--square-bracket-tightness=2 +--vertical-tightness=0 +--vertical-tightness-closing=0 +--break-at-old-comma-breakpoints +--entab-leading-whitespace=4 +--tabs diff --git a/.travis.yml b/.travis.yml index 84ea04c..d0dda86 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,54 +1,54 @@ -language: perl -perl: - - "5.24" - -os: linux -dist: focal - -services: - - docker - -env: - - DB=mariadb:5.5 - - DB=mariadb:10.2 - - DB=mariadb:10.3 - - DB=mariadb:10.4 - - DB=mariadb:10.5 - - DB=mysql:5.5 - - DB=mysql:5.7 - - DB=mysql:8.0 - - DB=percona:5.6 - - DB=percona:5.7 - - DB=percona:8.0 - -install: - - cpanm --quiet --notest Data::Dumper - - cpanm --quiet --notest JSON - - cpanm --quiet --notest Perl::Critic - - cpanm --quiet --notest Text::Template - -before_script: - - mysql --version - - mysqladmin --version - - docker run -it --name=mysqltestinstance -d -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -p 3306:3306 ${DB} - - echo -e "[client]\nuser=root\npassword=\"\"\nhost=127.0.0.1" > ~/.my.cnf - - chmod 600 ~/.my.cnf - - git clone https://github.com/datacharmer/test_db.git - - cd test_db - - count=10 - - while ! mysql -e 'select version()' && [ $count -gt 0 ]; do echo $count seconds to go; sleep 1; count=$(( $count - 1 )); done - - if [[ $DB =~ .*:8.0 ]] ; then - for file in public_key.pem ca.pem server-cert.pem client-key.pem client-cert.pem ; do - docker cp mysqltestinstance:/var/lib/mysql/$file "${HOME}" ; - done ; - fi - - "cat employees.sql | grep -v 'storage_engine' | mysql" - - cd .. - -script: - - ./mysqltuner.pl --verbose --tbstat 2>stderr.txt | tee -a "stdout.txt" - -after_script: - - docker stop mysqltestinstance - - echo "Standard Output: $(cat stdout.txt)" - - echo "Standard Error : $(cat stderr.txt)" +language: perl +perl: + - "5.24" + +os: linux +dist: focal + +services: + - docker + +env: + - DB=mariadb:5.5 + - DB=mariadb:10.2 + - DB=mariadb:10.3 + - DB=mariadb:10.4 + - DB=mariadb:10.5 + - DB=mysql:5.5 + - DB=mysql:5.7 + - DB=mysql:8.0 + - DB=percona:5.6 + - DB=percona:5.7 + - DB=percona:8.0 + +install: + - cpanm --quiet --notest Data::Dumper + - cpanm --quiet --notest JSON + - cpanm --quiet --notest Perl::Critic + - cpanm --quiet --notest Text::Template + +before_script: + - mysql --version + - mysqladmin --version + - docker run -it --name=mysqltestinstance -d -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -p 3306:3306 ${DB} + - echo -e "[client]\nuser=root\npassword=\"\"\nhost=127.0.0.1" > ~/.my.cnf + - chmod 600 ~/.my.cnf + - git clone https://github.com/datacharmer/test_db.git + - cd test_db + - count=10 + - while ! mysql -e 'select version()' && [ $count -gt 0 ]; do echo $count seconds to go; sleep 1; count=$(( $count - 1 )); done + - if [[ $DB =~ .*:8.0 ]] ; then + for file in public_key.pem ca.pem server-cert.pem client-key.pem client-cert.pem ; do + docker cp mysqltestinstance:/var/lib/mysql/$file "${HOME}" ; + done ; + fi + - "cat employees.sql | grep -v 'storage_engine' | mysql" + - cd .. + +script: + - ./mysqltuner.pl --verbose --tbstat 2>stderr.txt | tee -a "stdout.txt" + +after_script: + - docker stop mysqltestinstance + - echo "Standard Output: $(cat stdout.txt)" + - echo "Standard Error : $(cat stderr.txt)" diff --git a/README.md b/README.md index 70a89a8..d3da601 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ MySQLTuner needs you: * Please join us on issue track at [GitHub tracker](https://github.com/major/MySQLTuner-perl/issues). * Contribution guide is available following [MySQLTuner contributing guide](https://github.com/major/MySQLTuner-perl/blob/master/CONTRIBUTING.md) * Star **MySQLTuner project** at [MySQLTuner Git Hub Project](https://github.com/major/MySQLTuner-perl) -* Paid support for Releem available here: [Releem App](https://app.releem.com/) +* Paid support for Releem available here: [Releem App](https://releem.com/) ## Stargazers over time diff --git a/Vagrant/Vagrantfile b/Vagrant/Vagrantfile index 2a19871..a55766b 100644 --- a/Vagrant/Vagrantfile +++ b/Vagrant/Vagrantfile @@ -1,71 +1,71 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -Vagrant.configure("2") do |config| - config.vm.box = "generic/fedora30" - config.vm.network "private_network", ip: "192.168.50.10", virtualbox__intnet: false - - if Vagrant.has_plugin? "vagrant-vbguest" - config.vbguest.no_install = true - config.vbguest.auto_update = false - config.vbguest.no_remote = true -end - config.hostmanager.enabled = true - config.hostmanager.manage_host = false - config.hostmanager.manage_guest = true - config.hostmanager.ignore_private_ip = false - config.hostmanager.include_offline = true - - config.vm.network "public_network" - config.vm.hostname = 'fedora-generic' - config.hostmanager.aliases = %w(fedora-generic.localdomain fedora-generic.local fcg.local) - - config.vm.synced_folder ".", "/data" - - config.vm.provider "virtualbox" do |vb| - vb.name="fedora-generic" - vb.gui = false - vb.memory = "3036" - vb.cpus = 4 - end - - config.vm.provision "shell", inline: <<-SHELL - echo "secret" | sudo passwd --stdin root - echo "secret" | sudo passwd --stdin vagrant - sudo cp -pr ~vagrant/.ssh /root - sudo chown -R root.root /root/.ssh - - sudo dnf -y update - sudo dnf -y install telnet vim-enhanced net-tools git python python2-pip python34-PyYAML moreutils net-tools python-psutil perl-WWW-Mechanize-GZip perl-App-cpanminus perl-List-MoreUtils vim-enhanced unzip zip jq youtube-dl ffmpeg make mariadb psmisc PyYAML tofrodos python3 chromedriver wget - sudo dnf -y install python34-pip moreutils net-tools python-psutil perl-WWW-Mechanize-GZip perl-App-cpanminus perl-List-MoreUtils vim-enhanced unzip zip jq youtube-dl ffmpeg make mariadb psmisc PyYAML tofrodos python3 wget python-beautifulsoup4 npm rclone golang yum-utils device-mapper-persistent-data lvm2 docker - - echo "alias h='function hdi(){ howdoi \$* -c -n 5; }; hdi'" >> /tmp/util.sh - echo "alias s=sudo" >> /tmp/util.sh - echo "alias h=history" >> /tmp/util.sh - echo "alias hserver='python -m http.server 8000'" >> /tmp/util.sh - sudo cp /tmp/util.sh /etc/profile.d - cat /tmp/util.sh - - sudo dnf install -y yum-utils device-mapper-persistent-data lvm2 - sudo dnf -y install dnf-plugins-core - sudo dnf config-manager \ - --add-repo \ - https://download.docker.com/linux/fedora/docker-ce.repo - - sudo dnf -y install docker-ce docker-ce-cli containerd.io - dnf list docker-ce --showduplicates | sort -r - - sudo systemctl start docker - sudo systemctl enable docker - sudo usermod -aG docker vagrant - sudo systemctl daemon-reload - - true - -########################################## -# Install container - sudo systemctl restart docker -SHELL - config.vm.provision :hostmanager -end - +# -*- mode: ruby -*- +# vi: set ft=ruby : + +Vagrant.configure("2") do |config| + config.vm.box = "generic/fedora30" + config.vm.network "private_network", ip: "192.168.50.10", virtualbox__intnet: false + + if Vagrant.has_plugin? "vagrant-vbguest" + config.vbguest.no_install = true + config.vbguest.auto_update = false + config.vbguest.no_remote = true +end + config.hostmanager.enabled = true + config.hostmanager.manage_host = false + config.hostmanager.manage_guest = true + config.hostmanager.ignore_private_ip = false + config.hostmanager.include_offline = true + + config.vm.network "public_network" + config.vm.hostname = 'fedora-generic' + config.hostmanager.aliases = %w(fedora-generic.localdomain fedora-generic.local fcg.local) + + config.vm.synced_folder ".", "/data" + + config.vm.provider "virtualbox" do |vb| + vb.name="fedora-generic" + vb.gui = false + vb.memory = "3036" + vb.cpus = 4 + end + + config.vm.provision "shell", inline: <<-SHELL + echo "secret" | sudo passwd --stdin root + echo "secret" | sudo passwd --stdin vagrant + sudo cp -pr ~vagrant/.ssh /root + sudo chown -R root.root /root/.ssh + + sudo dnf -y update + sudo dnf -y install telnet vim-enhanced net-tools git python python2-pip python34-PyYAML moreutils net-tools python-psutil perl-WWW-Mechanize-GZip perl-App-cpanminus perl-List-MoreUtils vim-enhanced unzip zip jq youtube-dl ffmpeg make mariadb psmisc PyYAML tofrodos python3 chromedriver wget + sudo dnf -y install python34-pip moreutils net-tools python-psutil perl-WWW-Mechanize-GZip perl-App-cpanminus perl-List-MoreUtils vim-enhanced unzip zip jq youtube-dl ffmpeg make mariadb psmisc PyYAML tofrodos python3 wget python-beautifulsoup4 npm rclone golang yum-utils device-mapper-persistent-data lvm2 docker + + echo "alias h='function hdi(){ howdoi \$* -c -n 5; }; hdi'" >> /tmp/util.sh + echo "alias s=sudo" >> /tmp/util.sh + echo "alias h=history" >> /tmp/util.sh + echo "alias hserver='python -m http.server 8000'" >> /tmp/util.sh + sudo cp /tmp/util.sh /etc/profile.d + cat /tmp/util.sh + + sudo dnf install -y yum-utils device-mapper-persistent-data lvm2 + sudo dnf -y install dnf-plugins-core + sudo dnf config-manager \ + --add-repo \ + https://download.docker.com/linux/fedora/docker-ce.repo + + sudo dnf -y install docker-ce docker-ce-cli containerd.io + dnf list docker-ce --showduplicates | sort -r + + sudo systemctl start docker + sudo systemctl enable docker + sudo usermod -aG docker vagrant + sudo systemctl daemon-reload + + true + +########################################## +# Install container + sudo systemctl restart docker +SHELL + config.vm.provision :hostmanager +end + diff --git a/Vagrant/prepare.sh b/Vagrant/prepare.sh index e6770fd..e1c5790 100644 --- a/Vagrant/prepare.sh +++ b/Vagrant/prepare.sh @@ -1,9 +1,9 @@ -#!/bin/sh -VERSION=${1:-"10.4"} -rm -f Vagrantfile -cp Vagrantfile_for_MariaDB${VERSION} Vagrantfile -mkdir data -vagrant plugin install vagrant-hostmanager -vagrant plugin install vagrant-vbguest -vagrant plugin install vagrant-proxyconf -vagrant --provision up +#!/bin/sh +VERSION=${1:-"10.4"} +rm -f Vagrantfile +cp Vagrantfile_for_MariaDB${VERSION} Vagrantfile +mkdir data +vagrant plugin install vagrant-hostmanager +vagrant plugin install vagrant-vbguest +vagrant plugin install vagrant-proxyconf +vagrant --provision up diff --git a/build/build_rpm.sh b/build/build_rpm.sh index 1e96a34..8443226 100755 --- a/build/build_rpm.sh +++ b/build/build_rpm.sh @@ -1,18 +1,18 @@ -#!/bin/sh - -BUILD_DIR=`dirname $(readlink -f $0)` - -VERSION=$(grep -Ei 'my \$tunerversion' $BUILD_DIR/../mysqltuner.pl | grep = | cut -d\" -f2) -cd $BUILD_DIR -sh ./clean.sh - -perl -pe "s/%VERSION%/$VERSION/g" mysqltuner.spec.tpl > mysqltuner.spec -mkdir -p $BUILD_DIR/mysqltuner-$VERSION -cp $BUILD_DIR/../mysqltuner.pl mysqltuner.spec $BUILD_DIR/../LICENSE $BUILD_DIR/../basic_passwords.txt $BUILD_DIR/../*.csv $BUILD_DIR/mysqltuner-$VERSION -pod2man $BUILD_DIR/../mysqltuner.pl | gzip > $BUILD_DIR/mysqltuner-$VERSION/mysqltuner.1.gz - -tar czf $BUILD_DIR/mysqltuner-${VERSION}.tgz mysqltuner-$VERSION -rpmbuild -ta mysqltuner-${VERSION}.tgz 2>&1 | tee -a ./build.log -set -x -grep --color=never -E '(Wrote|crit)\S*:' $BUILD_DIR/build.log | cut -d: -f2 | xargs -I{} mv {} . -#rm -rf mysqltuner-$VERSION ./build.log +#!/bin/sh + +BUILD_DIR=`dirname $(readlink -f $0)` + +VERSION=$(grep -Ei 'my \$tunerversion' $BUILD_DIR/../mysqltuner.pl | grep = | cut -d\" -f2) +cd $BUILD_DIR +sh ./clean.sh + +perl -pe "s/%VERSION%/$VERSION/g" mysqltuner.spec.tpl > mysqltuner.spec +mkdir -p $BUILD_DIR/mysqltuner-$VERSION +cp $BUILD_DIR/../mysqltuner.pl mysqltuner.spec $BUILD_DIR/../LICENSE $BUILD_DIR/../basic_passwords.txt $BUILD_DIR/../*.csv $BUILD_DIR/mysqltuner-$VERSION +pod2man $BUILD_DIR/../mysqltuner.pl | gzip > $BUILD_DIR/mysqltuner-$VERSION/mysqltuner.1.gz + +tar czf $BUILD_DIR/mysqltuner-${VERSION}.tgz mysqltuner-$VERSION +rpmbuild -ta mysqltuner-${VERSION}.tgz 2>&1 | tee -a ./build.log +set -x +grep --color=never -E '(Wrote|crit)\S*:' $BUILD_DIR/build.log | cut -d: -f2 | xargs -I{} mv {} . +#rm -rf mysqltuner-$VERSION ./build.log diff --git a/build/clean.sh b/build/clean.sh index 52e7e90..4529219 100755 --- a/build/clean.sh +++ b/build/clean.sh @@ -1,3 +1,3 @@ -#!/bin/sh - -rm -rf mysqltuner-* mysqltuner.spec *.log +#!/bin/sh + +rm -rf mysqltuner-* mysqltuner.spec *.log diff --git a/build/clearContainer.sh b/build/clearContainer.sh index e5f71ca..410a071 100644 --- a/build/clearContainer.sh +++ b/build/clearContainer.sh @@ -1,5 +1,5 @@ -#!/bin/sh - -docker ps | awk '{ print $NF}' |grep -v NAMES | xargs -n 1 docker kill -docker ps -a | awk '{ print $NF}' |grep -v NAMES | xargs -n 1 docker rm -docker ps -a +#!/bin/sh + +docker ps | awk '{ print $NF}' |grep -v NAMES | xargs -n 1 docker kill +docker ps -a | awk '{ print $NF}' |grep -v NAMES | xargs -n 1 docker rm +docker ps -a diff --git a/build/configimg.conf b/build/configimg.conf index c9996d4..b641cb7 100644 --- a/build/configimg.conf +++ b/build/configimg.conf @@ -1,15 +1,15 @@ -3306;mysql80;/var/lib/mysql8;mysql:8.0 -3307;mysql57;/var/lib/mysql57;mysql:5.7 -3308;mysql56;/var/lib/mysql56;mysql:5.6 -3309;mysql55;/var/lib/mysql55;mysql:5.5 - -4306;percona80;/var/lib/percona8;percona/percona-server:8.0 -4307;percona57;/var/lib/percona57;percona/percona-server:5.7 -4308;percona56;/var/lib/percona56;percona/percona-server:5.6 - -5306;mariadb104;/var/lib/mariadb104;mariadb:10.4 -5307;mariadb103;/var/lib/mariadb103;mariadb:10.3 -5308;mariadb102;/var/lib/mariadb102;mariadb:10.2 -5309;mariadb101;/var/lib/mariadb101;mariadb:10.1 -5310;mariadb100;/var/lib/mariadb100;mariadb:10.0 -5311;mariadb55;/var/lib/mariadb55;mariadb:5.5 +3306;mysql80;/var/lib/mysql8;mysql:8.0 +3307;mysql57;/var/lib/mysql57;mysql:5.7 +3308;mysql56;/var/lib/mysql56;mysql:5.6 +3309;mysql55;/var/lib/mysql55;mysql:5.5 + +4306;percona80;/var/lib/percona8;percona/percona-server:8.0 +4307;percona57;/var/lib/percona57;percona/percona-server:5.7 +4308;percona56;/var/lib/percona56;percona/percona-server:5.6 + +5306;mariadb104;/var/lib/mariadb104;mariadb:10.4 +5307;mariadb103;/var/lib/mariadb103;mariadb:10.3 +5308;mariadb102;/var/lib/mariadb102;mariadb:10.2 +5309;mariadb101;/var/lib/mariadb101;mariadb:10.1 +5310;mariadb100;/var/lib/mariadb100;mariadb:10.0 +5311;mariadb55;/var/lib/mariadb55;mariadb:5.5 diff --git a/build/createMassDockerImages.sh b/build/createMassDockerImages.sh index 8d72551..543d860 100644 --- a/build/createMassDockerImages.sh +++ b/build/createMassDockerImages.sh @@ -1,90 +1,90 @@ -#!/bin/sh - -input="./build/configimg.conf" -default_password="secret" - -echo "[client] -user=root -password=$default_password" > $HOME/.my.cnf - -chmod 600 $HOME/.my.cnf - -[ -f "$input" ] || echo " -3306;mysql80;/var/lib/mysql8;mysql:8.0 -3307;mysql57;/var/lib/mysql57;mysql:5.7 -3308;mysql56;/var/lib/mysql56;mysql:5.6 -3309;mysql55;/var/lib/mysql55;mysql:5.5 - -4306;percona80;/var/lib/percona8;percona/percona-server:8.0 -4307;percona57;/var/lib/percona57;percona/percona-server:5.7 -4308;percona56;/var/lib/percona56;percona/percona-server:5.6 - -5306;mariadb104;/var/lib/mariadb104;mariadb:10.4 -5307;mariadb103;/var/lib/mariadb103;mariadb:10.3 -5308;mariadb102;/var/lib/mariadb102;mariadb:10.2 -5309;mariadb101;/var/lib/mariadb101;mariadb:10.1 -5310;mariadb100;/var/lib/mariadb100;mariadb:10.0 -5311;mariadb55;/var/lib/mariadb55;mariadb:5.5 -" > "$input" - -# - -#echo '* PRUNING DOCKER SYSTEM DATA' - -#[ "$1" = "clean" ] || docker system prune -a -f -# download all images -while IFS='' read -r line -do - [ -z "$line" ] && continue - container_port=$(echo "$line" | cut -d\; -f1) - container_name=$(echo "$line" | cut -d\; -f2) - container_datadir=$(echo "$line" | cut -d\; -f3) - image_name=$(echo "$line" | cut -d\; -f4) - - if [ -n "$1" -a "$1" != "clean" ]; then - echo $line | grep -q "$1" - [ $? -eq 0 ] || continue - fi - echo "* PULLING DOCKER IMAGE: $image_name" - docker images | grep -E " $image_name$" - [ $? -ne 0 ] && docker pull $image_name - - echo "* REMOVING CONTAINER : $image_name" - docker ps -a | grep -qE "$container_name^" - docker rm -f $container_name - - if [ 1 -eq 0 ]; then - echo "* DELETING DATADIR: $container_datadir" - sudo rm -rf $container_datadir - [ "$1" = "clean" ] && continue - - echo "* CREATING DATADIR: $container_datadir" - sudo mkdir -p $container_datadir - fi - #sudo chown -R mysql.mysql $container_datadir - sudo chmod 777 $container_datadir - echo "* STARTING CONTAINER: $container_name($container_port/TCP) BASED ON $image_name -> $container_datadir" - set -x - docker run -d -e MYSQL_ROOT_PASSWORD=$default_password -p $container_port:3306 --name $container_name -v $container_datadir:/var/lib/mysql $image_name - set +x - sleep 6s - echo "* LOGS: $container_name" - docker logs $container_name - echo "* LISTING PORTS: $container_name BASED ON $image_name" - docker port $container_name - - echo "* LISTING VOLUMES: $container_name BASED ON $image_name" - docker inspect -f "{{ .Mounts }}" $container_name - - echo "* LISTING $container_datadir" - ls -ls $container_datadir - #break - docker logs $container_name | grep -q "ready for connections" -done < "$input" - -echo "* LISTING DOCKER IMAGES" -docker images - -echo "* LISTING DOCKER CONTAINER" -docker ps - +#!/bin/sh + +input="./build/configimg.conf" +default_password="secret" + +echo "[client] +user=root +password=$default_password" > $HOME/.my.cnf + +chmod 600 $HOME/.my.cnf + +[ -f "$input" ] || echo " +3306;mysql80;/var/lib/mysql8;mysql:8.0 +3307;mysql57;/var/lib/mysql57;mysql:5.7 +3308;mysql56;/var/lib/mysql56;mysql:5.6 +3309;mysql55;/var/lib/mysql55;mysql:5.5 + +4306;percona80;/var/lib/percona8;percona/percona-server:8.0 +4307;percona57;/var/lib/percona57;percona/percona-server:5.7 +4308;percona56;/var/lib/percona56;percona/percona-server:5.6 + +5306;mariadb104;/var/lib/mariadb104;mariadb:10.4 +5307;mariadb103;/var/lib/mariadb103;mariadb:10.3 +5308;mariadb102;/var/lib/mariadb102;mariadb:10.2 +5309;mariadb101;/var/lib/mariadb101;mariadb:10.1 +5310;mariadb100;/var/lib/mariadb100;mariadb:10.0 +5311;mariadb55;/var/lib/mariadb55;mariadb:5.5 +" > "$input" + +# + +#echo '* PRUNING DOCKER SYSTEM DATA' + +#[ "$1" = "clean" ] || docker system prune -a -f +# download all images +while IFS='' read -r line +do + [ -z "$line" ] && continue + container_port=$(echo "$line" | cut -d\; -f1) + container_name=$(echo "$line" | cut -d\; -f2) + container_datadir=$(echo "$line" | cut -d\; -f3) + image_name=$(echo "$line" | cut -d\; -f4) + + if [ -n "$1" -a "$1" != "clean" ]; then + echo $line | grep -q "$1" + [ $? -eq 0 ] || continue + fi + echo "* PULLING DOCKER IMAGE: $image_name" + docker images | grep -E " $image_name$" + [ $? -ne 0 ] && docker pull $image_name + + echo "* REMOVING CONTAINER : $image_name" + docker ps -a | grep -qE "$container_name^" + docker rm -f $container_name + + if [ 1 -eq 0 ]; then + echo "* DELETING DATADIR: $container_datadir" + sudo rm -rf $container_datadir + [ "$1" = "clean" ] && continue + + echo "* CREATING DATADIR: $container_datadir" + sudo mkdir -p $container_datadir + fi + #sudo chown -R mysql.mysql $container_datadir + sudo chmod 777 $container_datadir + echo "* STARTING CONTAINER: $container_name($container_port/TCP) BASED ON $image_name -> $container_datadir" + set -x + docker run -d -e MYSQL_ROOT_PASSWORD=$default_password -p $container_port:3306 --name $container_name -v $container_datadir:/var/lib/mysql $image_name + set +x + sleep 6s + echo "* LOGS: $container_name" + docker logs $container_name + echo "* LISTING PORTS: $container_name BASED ON $image_name" + docker port $container_name + + echo "* LISTING VOLUMES: $container_name BASED ON $image_name" + docker inspect -f "{{ .Mounts }}" $container_name + + echo "* LISTING $container_datadir" + ls -ls $container_datadir + #break + docker logs $container_name | grep -q "ready for connections" +done < "$input" + +echo "* LISTING DOCKER IMAGES" +docker images + +echo "* LISTING DOCKER CONTAINER" +docker ps + diff --git a/build/createTestEnvs.sh b/build/createTestEnvs.sh index 7c67392..e9addee 100644 --- a/build/createTestEnvs.sh +++ b/build/createTestEnvs.sh @@ -1,28 +1,28 @@ -#!/bin/sh - -source build/bashrc - -systemctl status docker &>/dev/null -if [ $? -ne 0 ];then - sudo dnf install -y yum-utils device-mapper-persistent-data lvm2 - sudo dnf -y install dnf-plugins-core - sudo dnf config-manager \ - --add-repo \ - https://download.docker.com/linux/fedora/docker-ce.repo - - sudo dnf -y install docker-ce docker-ce-cli containerd.io - dnf list docker-ce --showduplicates | sort -r - - sudo systemctl start docker - sudo systemctl enable docker - sudo usermod -aG docker vagrant - sudo systemctl daemon-reload -fi - -sh build/createMassDockerImages.sh - -sh build/fetchSampleDatabases.sh clean -sh build/fetchSampleDatabases.sh fetchall - -exec_mysqls build/configimg.conf mysql contents/sakila-db/sakila-schema.sql +#!/bin/sh + +source build/bashrc + +systemctl status docker &>/dev/null +if [ $? -ne 0 ];then + sudo dnf install -y yum-utils device-mapper-persistent-data lvm2 + sudo dnf -y install dnf-plugins-core + sudo dnf config-manager \ + --add-repo \ + https://download.docker.com/linux/fedora/docker-ce.repo + + sudo dnf -y install docker-ce docker-ce-cli containerd.io + dnf list docker-ce --showduplicates | sort -r + + sudo systemctl start docker + sudo systemctl enable docker + sudo usermod -aG docker vagrant + sudo systemctl daemon-reload +fi + +sh build/createMassDockerImages.sh + +sh build/fetchSampleDatabases.sh clean +sh build/fetchSampleDatabases.sh fetchall + +exec_mysqls build/configimg.conf mysql contents/sakila-db/sakila-schema.sql exec_mysqls build/configimg.conf mysql contents/sakila-db/sakila-data.sql \ No newline at end of file diff --git a/build/deployOn b/build/deployOn index 80b6039..29cff83 100755 --- a/build/deployOn +++ b/build/deployOn @@ -1,12 +1,12 @@ -#!/bin/bash -set -xv - -_DIR=$(dirname `readlink -f $0`) - - -ssh $1 mkdir /images/mysqltuner -rsync -avz ${_DIR}/.. $1:/images/mysqltuner - -if [ "$2" = "run" ];then - ssh $1 "su - mysql -c 'cd /images/mysqltuner; source /opt/mysql/myqenv myserver1;perl mysqltuner.pl --verbose --color'" -fi +#!/bin/bash +set -xv + +_DIR=$(dirname `readlink -f $0`) + + +ssh $1 mkdir /images/mysqltuner +rsync -avz ${_DIR}/.. $1:/images/mysqltuner + +if [ "$2" = "run" ];then + ssh $1 "su - mysql -c 'cd /images/mysqltuner; source /opt/mysql/myqenv myserver1;perl mysqltuner.pl --verbose --color'" +fi diff --git a/build/fetchSampleDatabases.sh b/build/fetchSampleDatabases.sh index f0e02a4..b580a1d 100644 --- a/build/fetchSampleDatabases.sh +++ b/build/fetchSampleDatabases.sh @@ -1,35 +1,35 @@ -#!/bin/sh - - -DB_WORLD_URL="https://downloads.mysql.com/docs/world.sql.zip" -DB_WORLDX_URL="https://downloads.mysql.com/docs/world_x-db.zip" -DB_SAKILA_URL="https://downloads.mysql.com/docs/sakila-db.zip" -DB_MESSAGERIE_URL="https://downloads.mysql.com/docs/menagerie-db.zip" -DB_TESTDB_URL="https://github.com/datacharmer/test_db/archive/master.zip" - -getVal() -{ - local vari=$1 - eval "echo \$$vari" -} -case "$1" in - "fetchall") - for sample in WORLD WORLDX SAKILA MESSAGERIE TESTDB; do - sh $0 fetch $sample - done - ;; - "fetch") - [ -z "$2" ] && exit 1 - mkdir -p ./contents - [ -f "contents/$(basename $(getVal "DB_$2_URL"))" ] || wget -O contents/$(basename $(getVal "DB_$2_URL")) $(getVal "DB_$2_URL") - if [ $? -eq 0 ];then - (cd contents; unzip $( basename $(getVal "DB_$2_URL")) ) - fi - ;; - "clean") - rm -rf contents - ;; - *) - echo "Unknown operation: $1" - ;; +#!/bin/sh + + +DB_WORLD_URL="https://downloads.mysql.com/docs/world.sql.zip" +DB_WORLDX_URL="https://downloads.mysql.com/docs/world_x-db.zip" +DB_SAKILA_URL="https://downloads.mysql.com/docs/sakila-db.zip" +DB_MESSAGERIE_URL="https://downloads.mysql.com/docs/menagerie-db.zip" +DB_TESTDB_URL="https://github.com/datacharmer/test_db/archive/master.zip" + +getVal() +{ + local vari=$1 + eval "echo \$$vari" +} +case "$1" in + "fetchall") + for sample in WORLD WORLDX SAKILA MESSAGERIE TESTDB; do + sh $0 fetch $sample + done + ;; + "fetch") + [ -z "$2" ] && exit 1 + mkdir -p ./contents + [ -f "contents/$(basename $(getVal "DB_$2_URL"))" ] || wget -O contents/$(basename $(getVal "DB_$2_URL")) $(getVal "DB_$2_URL") + if [ $? -eq 0 ];then + (cd contents; unzip $( basename $(getVal "DB_$2_URL")) ) + fi + ;; + "clean") + rm -rf contents + ;; + *) + echo "Unknown operation: $1" + ;; esac \ No newline at end of file diff --git a/build/mysqltuner.spec.tpl b/build/mysqltuner.spec.tpl index c457b51..e4cfcb8 100644 --- a/build/mysqltuner.spec.tpl +++ b/build/mysqltuner.spec.tpl @@ -1,51 +1,51 @@ -Summary: High Performance MySQL Tuning Script -Name: mysqltuner -Version: %VERSION% -Release: 1 -License: GPL v3+ -Group: Applications -Source0: https://github.com/build/MySQLTuner-perl/build/%{name}-%{version}.tgz -URL: https://github.com/major/MySQLTuner-perl -Requires: mysql -BuildArch: noarch -BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n) - -%description -MySQLTuner is a high-performance MySQL tuning script written in Perl -that will provide you with a snapshot of a MySQL server's health. -Based on the statistics gathered, specific recommendations will be -provided that will increase a MySQL server's efficiency and -performance. The script gives you automated MySQL tuning that is on -the level of what you would receive from a MySQL DBA. - -This script has been derived from many of the ideas in Matthew -Montgomery's MySQL tuning primer script. - -%prep -%setup -q - -%install -rm -rf $RPM_BUILD_ROOT -install -d $RPM_BUILD_ROOT%{_bindir} -install -d $RPM_BUILD_ROOT%{_datarootdir} -install -d $RPM_BUILD_ROOT/%{_mandir}/man1 -install -p %{name}.pl $RPM_BUILD_ROOT%{_bindir}/%{name} -install -d $RPM_BUILD_ROOT%{_datarootdir}/%{name} -install -p LICENSE $RPM_BUILD_ROOT%{_datarootdir}/%{name} -install -p basic_passwords.txt $RPM_BUILD_ROOT%{_datarootdir}/%{name} -install -p vulnerabilities.csv $RPM_BUILD_ROOT%{_datarootdir}/%{name} -install -p %{name}.1.gz $RPM_BUILD_ROOT/%{_mandir}/man1 - -%clean -rm -rf $RPM_BUILD_ROOT - -%files -%defattr(644,root,root,755) -%doc %{_datarootdir}/%{name} -%attr(755,root,root) %{_bindir}/%{name} -%{_mandir}/man1/* - -%changelog -* Thu Apr 14 2016 Jean-Marie RENOUARD %VERSION%-1 -- Initial RPM release - +Summary: High Performance MySQL Tuning Script +Name: mysqltuner +Version: %VERSION% +Release: 1 +License: GPL v3+ +Group: Applications +Source0: https://github.com/build/MySQLTuner-perl/build/%{name}-%{version}.tgz +URL: https://github.com/major/MySQLTuner-perl +Requires: mysql +BuildArch: noarch +BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n) + +%description +MySQLTuner is a high-performance MySQL tuning script written in Perl +that will provide you with a snapshot of a MySQL server's health. +Based on the statistics gathered, specific recommendations will be +provided that will increase a MySQL server's efficiency and +performance. The script gives you automated MySQL tuning that is on +the level of what you would receive from a MySQL DBA. + +This script has been derived from many of the ideas in Matthew +Montgomery's MySQL tuning primer script. + +%prep +%setup -q + +%install +rm -rf $RPM_BUILD_ROOT +install -d $RPM_BUILD_ROOT%{_bindir} +install -d $RPM_BUILD_ROOT%{_datarootdir} +install -d $RPM_BUILD_ROOT/%{_mandir}/man1 +install -p %{name}.pl $RPM_BUILD_ROOT%{_bindir}/%{name} +install -d $RPM_BUILD_ROOT%{_datarootdir}/%{name} +install -p LICENSE $RPM_BUILD_ROOT%{_datarootdir}/%{name} +install -p basic_passwords.txt $RPM_BUILD_ROOT%{_datarootdir}/%{name} +install -p vulnerabilities.csv $RPM_BUILD_ROOT%{_datarootdir}/%{name} +install -p %{name}.1.gz $RPM_BUILD_ROOT/%{_mandir}/man1 + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(644,root,root,755) +%doc %{_datarootdir}/%{name} +%attr(755,root,root) %{_bindir}/%{name} +%{_mandir}/man1/* + +%changelog +* Thu Apr 14 2016 Jean-Marie RENOUARD %VERSION%-1 +- Initial RPM release + diff --git a/build/runAudit.sh b/build/runAudit.sh index d74b94b..e6092e9 100644 --- a/build/runAudit.sh +++ b/build/runAudit.sh @@ -1,116 +1,116 @@ -#!/bin/bash - -server=$1 -_DIR=$(dirname `readlink -f $0`) - -#SSH_OPTIONS="-i utilities/id_rsa" - -SSH_OPTIONS="${SSH_OPTIONS:-""} - -export SSH_CLIENT="ssh -q $SSH_OPTIONS -o TCPKeepAlive=yes -o ServerAliveInterval=50 -o strictHostKeyChecking=no" -export SCP_CLIENT="scp -q $SSH_OPTIONS -o TCPKeepAlive=yes -o ServerAliveInterval=50 -o strictHostKeyChecking=no" - _DIR="$(dirname "`readlink -f $0`")" - -echo "* CLEANUP OLD RESULT FILES" -rm -f mysqltuner_${server}.txt pt-*_${server}.txt innotop_${server}.txt - -echo "* RUNNNING MYSQLTUNER" -$SSH_CLIENT root@${server} "mysqltuner --verbose --outputfile /tmp/mysqltuner_${server}.txt" -[ $? -ne 0 ] && exit 1 - -echo "* RUNNNING PERCONA SUMMARY" -$SSH_CLIENT root@${server} "pt-summary> /tmp/pt-summary_${server}.txt" -[ $? -ne 0 ] && exit 1 - -echo "* RUNNNING PERCONA MYSQL SUMMARY" -$SSH_CLIENT root@${server} "pt-mysql-summary> /tmp/pt-mysql-summary_${server}.txt" -[ $? -ne 0 ] && exit 1 - -echo "* RUNNNING INNOTOP" -$SSH_CLIENT root@${server} "innotop -C -d1 --count 5 -n>> /tmp/innotop_${server}.txt" -[ $? -ne 0 ] && exit 1 - -echo "* IMPORTING RESULT TXT" -$SCP_CLIENT root@${server}:/tmp/mysqltuner_${server}.txt . -$SCP_CLIENT root@${server}:/tmp/pt-*_${server}.txt . -$SCP_CLIENT root@${server}:/tmp/innotop_${server}.txt . -[ $? -ne 0 ] && exit 1 - -REPORT_NAME=audit.html -echo "* GENERATING HTML RESULT" -( -DATE="$(date)" -cat< - - - - - MySQL/MariaDB Audit report - $DATE - - - - - - - - - -

MySQL/MariaDB Audit report - $DATE

-
- -
-
-EOF
-) > ${REPORT_NAME}
-
-perl ${_DIR}/txt2Html.pl - mysqltuner_${server}.txt >> ${REPORT_NAME}
-
-(
-cat << 'EOF'
-
-
-
-EOF
-) >> ${REPORT_NAME}
-
-perl ${_DIR}/txt2Html.pl \# pt-summary_${server}.txt >> ${REPORT_NAME}
-(
-cat << 'EOF'
-
-
-
-EOF
-) >> ${REPORT_NAME}
-perl ${_DIR}/txt2Html.pl \# pt-mysql-summary_${server}.txt >> ${REPORT_NAME}
-
-(
-cat << 'EOF'
-
-
-
-EOF
-) >> ${REPORT_NAME}
-
-cat innotop_${server}.txt >> ${REPORT_NAME}
-(
-cat << 'EOF'
-
-
- - - - -EOF -) >> ${REPORT_NAME} -echo "* ALL IS OK" +#!/bin/bash + +server=$1 +_DIR=$(dirname `readlink -f $0`) + +#SSH_OPTIONS="-i utilities/id_rsa" + +SSH_OPTIONS="${SSH_OPTIONS:-""} + +export SSH_CLIENT="ssh -q $SSH_OPTIONS -o TCPKeepAlive=yes -o ServerAliveInterval=50 -o strictHostKeyChecking=no" +export SCP_CLIENT="scp -q $SSH_OPTIONS -o TCPKeepAlive=yes -o ServerAliveInterval=50 -o strictHostKeyChecking=no" + _DIR="$(dirname "`readlink -f $0`")" + +echo "* CLEANUP OLD RESULT FILES" +rm -f mysqltuner_${server}.txt pt-*_${server}.txt innotop_${server}.txt + +echo "* RUNNNING MYSQLTUNER" +$SSH_CLIENT root@${server} "mysqltuner --verbose --outputfile /tmp/mysqltuner_${server}.txt" +[ $? -ne 0 ] && exit 1 + +echo "* RUNNNING PERCONA SUMMARY" +$SSH_CLIENT root@${server} "pt-summary> /tmp/pt-summary_${server}.txt" +[ $? -ne 0 ] && exit 1 + +echo "* RUNNNING PERCONA MYSQL SUMMARY" +$SSH_CLIENT root@${server} "pt-mysql-summary> /tmp/pt-mysql-summary_${server}.txt" +[ $? -ne 0 ] && exit 1 + +echo "* RUNNNING INNOTOP" +$SSH_CLIENT root@${server} "innotop -C -d1 --count 5 -n>> /tmp/innotop_${server}.txt" +[ $? -ne 0 ] && exit 1 + +echo "* IMPORTING RESULT TXT" +$SCP_CLIENT root@${server}:/tmp/mysqltuner_${server}.txt . +$SCP_CLIENT root@${server}:/tmp/pt-*_${server}.txt . +$SCP_CLIENT root@${server}:/tmp/innotop_${server}.txt . +[ $? -ne 0 ] && exit 1 + +REPORT_NAME=audit.html +echo "* GENERATING HTML RESULT" +( +DATE="$(date)" +cat< + + + + + MySQL/MariaDB Audit report - $DATE + + + + + + + + + +

MySQL/MariaDB Audit report - $DATE

+
+ +
+
+EOF
+) > ${REPORT_NAME}
+
+perl ${_DIR}/txt2Html.pl - mysqltuner_${server}.txt >> ${REPORT_NAME}
+
+(
+cat << 'EOF'
+
+
+
+EOF
+) >> ${REPORT_NAME}
+
+perl ${_DIR}/txt2Html.pl \# pt-summary_${server}.txt >> ${REPORT_NAME}
+(
+cat << 'EOF'
+
+
+
+EOF
+) >> ${REPORT_NAME}
+perl ${_DIR}/txt2Html.pl \# pt-mysql-summary_${server}.txt >> ${REPORT_NAME}
+
+(
+cat << 'EOF'
+
+
+
+EOF
+) >> ${REPORT_NAME}
+
+cat innotop_${server}.txt >> ${REPORT_NAME}
+(
+cat << 'EOF'
+
+
+ + + + +EOF +) >> ${REPORT_NAME} +echo "* ALL IS OK" exit 0 \ No newline at end of file diff --git a/build/runMT.sh b/build/runMT.sh index 7e2798a..d41fe7d 100644 --- a/build/runMT.sh +++ b/build/runMT.sh @@ -1,26 +1,26 @@ -#!/bin/sh - -input="./build/configimg.conf" - -while IFS='' read -r line -do - [ -z "$line" ] && continue - container_port=$(echo "$line" | cut -d\; -f1) - container_name=$(echo "$line" | cut -d\; -f2) - container_datadir=$(echo "$line" | cut -d\; -f3) - image_name=$(echo "$line" | cut -d\; -f4) - - if [ -n "$1" -a "$1" != "$container_name" ]; then - continue - fi - shift - sudo rm -f /var/lib/mysql - sudo ln -sf $container_datadir /var/lib/mysql - sudo chmod 777 /var/lib/mysql - - #sudo docker logs $container_name > /tmp/mysqld.log - ls -ls /var/lib | grep -E 'mysql$' - #set +x - perl mysqltuner.pl $* --host 127.0.0.1 --port $container_port - exit $? -done < "$input" +#!/bin/sh + +input="./build/configimg.conf" + +while IFS='' read -r line +do + [ -z "$line" ] && continue + container_port=$(echo "$line" | cut -d\; -f1) + container_name=$(echo "$line" | cut -d\; -f2) + container_datadir=$(echo "$line" | cut -d\; -f3) + image_name=$(echo "$line" | cut -d\; -f4) + + if [ -n "$1" -a "$1" != "$container_name" ]; then + continue + fi + shift + sudo rm -f /var/lib/mysql + sudo ln -sf $container_datadir /var/lib/mysql + sudo chmod 777 /var/lib/mysql + + #sudo docker logs $container_name > /tmp/mysqld.log + ls -ls /var/lib | grep -E 'mysql$' + #set +x + perl mysqltuner.pl $* --host 127.0.0.1 --port $container_port + exit $? +done < "$input" diff --git a/build/sync.sh b/build/sync.sh index 22f638a..3330fb0 100644 --- a/build/sync.sh +++ b/build/sync.sh @@ -1,17 +1,17 @@ -#!/bin/sh -# Used to sync the original project with local project. - -#Save existing working -git stash - -#add project url to current repository as upstream-live -git remote add upstream-live https://github.com/major/MySQLTuner-perl - -#Fetch updated code -git fetch upstream-live - -#Going back to the master branch for mearging latest code -git checkout master - -#Merge latest code with master branch. -git merge upstream-live/master +#!/bin/sh +# Used to sync the original project with local project. + +#Save existing working +git stash + +#add project url to current repository as upstream-live +git remote add upstream-live https://github.com/major/MySQLTuner-perl + +#Fetch updated code +git fetch upstream-live + +#Going back to the master branch for mearging latest code +git checkout master + +#Merge latest code with master branch. +git merge upstream-live/master