diff --git a/mysql/mysql-tuning-primer/tuning-primer.sh b/mysql/mysql-tuning-primer/tuning-primer.sh deleted file mode 100755 index 849446b1..00000000 --- a/mysql/mysql-tuning-primer/tuning-primer.sh +++ /dev/null @@ -1,1667 +0,0 @@ -#!/bin/sh - -######################################################################### -# -# MySQL performance tuning primer script -# Writen by: Matthew Montgomery -# Report bugs to: https://bugs.launchpad.net/mysql-tuning-primer -# Inspired by: MySQLARd (http://gert.sos.be/demo/mysqlar/) -# Version: 1.6-r1 -# Released: 2011-08-06 -# Licenced under GPLv2 -# -######################################################################### - -######################################################################### -# -# Usage: ./tuning-primer.sh [ mode ] -# -# Available Modes: -# all : perform all checks (default) -# prompt : prompt for login credintials and socket -# and execution mode -# mem, memory : run checks for tunable options which -# effect memory usage -# disk, file : run checks for options which effect -# i/o performance or file handle limits -# innodb : run InnoDB checks /* to be improved */ -# misc : run checks for that don't categorise -# well Slow Queries, Binary logs, -# Used Connections and Worker Threads -######################################################################### - -######################################################################### -# -# Set this socket variable ONLY if you have multiple instances running -# or we are unable to find your socket, and you don't want to to be -# prompted for input each time you run this script. -# -######################################################################### -unset socket -#socket="" - -export black='\033[0m' -export boldblack='\033[1;0m' -export red='\033[31m' -export boldred='\033[1;31m' -export green='\033[32m' -export boldgreen='\033[1;32m' -export yellow='\033[33m' -export boldyellow='\033[1;33m' -export blue='\033[34m' -export boldblue='\033[1;34m' -export magenta='\033[35m' -export boldmagenta='\033[1;35m' -export cyan='\033[36m' -export boldcyan='\033[1;36m' -export white='\033[37m' -export boldwhite='\033[1;37m' - - -## -- Function to easliy print colored text -- ## -# Color-echo. -# Argument $1 = message -# Argument $2 = color -cecho () { - local default_msg="No message passed." - - message=${1:-$default_msg} # Defaults to default message. - - # change it for fun - # We use pure names - color=${2:-black} # Defaults to black, if not specified. - - case $color in - black) - printf "$black" ;; - boldblack) - printf "$boldblack" ;; - red) - printf "$red" ;; - boldred) - printf "$boldred" ;; - green) - printf "$green" ;; - boldgreen) - printf "$boldgreen" ;; - yellow) - printf "$yellow" ;; - boldyellow) - printf "$boldyellow" ;; - blue) - printf "$blue" ;; - boldblue) - printf "$boldblue" ;; - magenta) - printf "$magenta" ;; - boldmagenta) - printf "$boldmagenta" ;; - cyan) - printf "$cyan" ;; - boldcyan) - printf "$boldcyan" ;; - white) - printf "$white" ;; - boldwhite) - printf "$boldwhite" ;; - esac - printf "%s\n" "$message" - tput sgr0 # Reset to normal. - printf "$black" -} - -## -- Function to easliy print colored text -- ## - - # Color-echo. - # Argument $1 = message - # Argument $2 = color -cechon () { - local default_msg="No message passed." - # Doesn't really need to be a local variable. - - message=${1:-$default_msg} # Defaults to default message. - - # change it for fun - # We use pure names - color=${2:-black} # Defaults to black, if not specified. - - case $color in - black) - printf "$black" ;; - boldblack) - printf "$boldblack" ;; - red) - printf "$red" ;; - boldred) - printf "$boldred" ;; - green) - printf "$green" ;; - boldgreen) - printf "$boldgreen" ;; - yellow) - printf "$yellow" ;; - boldyellow) - printf "$boldyellow" ;; - blue) - printf "$blue" ;; - boldblue) - printf "$boldblue" ;; - magenta) - printf "$magenta" ;; - boldmagenta) - printf "$boldmagenta" ;; - cyan) - printf "$cyan" ;; - boldcyan) - printf "$boldcyan" ;; - white) - printf "$white" ;; - boldwhite) - printf "$boldwhite" ;; - esac - - printf "%s" "$message" - tput sgr0 # Reset to normal. - printf "$black" -} - - -## -- Banner -- ## -print_banner () { - cecho " -- MYSQL PERFORMANCE TUNING PRIMER --" boldblue - cecho " - By: Matthew Montgomery -" black -} - -## -- Find the location of the mysql.sock file -- ## -check_for_socket () { - if [ -z "$socket" ] ; then - # Use ~/my.cnf version - if [ -f ~/.my.cnf ] ; then - cnf_socket=$(grep ^socket ~/.my.cnf | awk -F \= '{ print $2 }' | head -1) - fi - if [ -S "$cnf_socket" ] ; then - socket=$cnf_socket - elif [ -S /var/lib/mysql/mysql.sock ] ; then - socket=/var/lib/mysql/mysql.sock - elif [ -S /var/run/mysqld/mysqld.sock ] ; then - socket=/var/run/mysqld/mysqld.sock - elif [ -S /tmp/mysql.sock ] ; then - socket=/tmp/mysql.sock - else - if [ -S "$ps_socket" ] ; then - socket=$ps_socket - fi - fi - fi - if [ -S "$socket" ] ; then - echo UP > /dev/null - else - cecho "No valid socket file \"$socket\" found!" boldred - cecho "The mysqld process is not running or it is installed in a custom location." red - cecho "If you are sure mysqld is running, execute script in \"prompt\" mode or set " red - cecho "the socket= variable at the top of this script" red - exit 1 - fi -} - -## -- Check for the existance of plesk and login using it's credentials -- ## -check_for_plesk_passwords () { - if [ -f /etc/psa/.psa.shadow ] ; then - mysql="mysql -S $socket -u admin -p$(cat /etc/psa/.psa.shadow)" - mysqladmin="mysqladmin -S $socket -u admin -p$(cat /etc/psa/.psa.shadow)" - - else - mysql="mysql" - mysqladmin="mysqladmin" - #mysql="mysql -S $socket" - #mysqladmin="mysqladmin -S $socket" - fi -} - -## -- Test for running mysql -- ## -check_mysql_login () { - is_up=$($mysqladmin ping 2>&1) - - if [ "$is_up" = "mysqld is alive" ]; then - echo UP > /dev/null - #echo $is_up - - elif [ "$is_up" != "mysqld is alive" ]; then - printf "\n" - cecho "Using login values from ~/.my.cnf" - cecho "- INITIAL LOGIN ATTEMPT FAILED -" boldred - if [ -z $prompted ]; then - find_webmin_passwords - else - return 1 - fi - - else - cecho "Unknow exit status" red - exit -1 - fi -} - -final_login_attempt () { - is_up=$($mysqladmin ping 2>&1) - - if [ "$is_up" = "mysqld is alive" ] ; then - echo UP > /dev/null - - elif [ "$is_up" != "mysqld is alive" ] ; then - cecho "- FINAL LOGIN ATTEMPT FAILED -" boldred - cecho "Unable to log into socket: $socket" boldred - exit 1 - fi -} - -## -- create a ~/.my.cnf and exit when all else fails -- ## -second_login_failed () { - cecho "Could not auto detect login info!" - cecho "Found potential sockets: $found_socks" - cecho "Using: $socket" red - - read -p "Would you like to provide a different socket?: [y/N] " REPLY - - case $REPLY in - yes | y | Y | YES) - read -p "Socket: " socket - ;; - esac - - read -p "Do you have your login handy ? [y/N] : " REPLY - - case $REPLY in - yes | y | Y | YES) - answer1='yes' - read -p "User: " user - read -rp "Password: " pass - if [ -z $pass ] ; then - export mysql="$mysql -S$socket -u$user" - export mysqladmin="$mysqladmin -S$socket -u$user" - else - export mysql="$mysql -S$socket -u$user -p$pass" - export mysqladmin="$mysqladmin -S$socket -u$user -p$pass" - fi - ;; - *) - cecho "Please create a valid login to MySQL" - cecho "Or, set correct values for 'user=' and 'password=' in ~/.my.cnf" - ;; - esac - - cecho " " - read -p "Would you like me to create a ~/.my.cnf file for you? [y/N] : " REPLY - - case $REPLY in - yes | y | Y | YES) - answer2='yes' - if [ ! -f ~/.my.cnf ]; then - umask 077 - printf "[client]\nuser=$user\npassword=$pass\nsocket=$socket" > ~/.my.cnf - if [ "$answer1" != 'yes' ] ; then - exit 1 - else - final_login_attempt - return 0 - fi - - else - printf "\n" - cecho "~/.my.cnf already exists!" boldred - printf "\n" - read -p "Replace ? [y/N] : " REPLY - if [ "$REPLY" = 'y' ] || [ "$REPLY" = 'Y' ] ; then - printf "[client]\nuser=$user\npassword=$pass\socket=$socket" > ~/.my.cnf - if [ "$answer1" != 'yes' ] ; then - exit 1 - else - final_login_attempt - return 0 - fi - else - cecho "Please set the 'user=' and 'password=' and 'socket=' values in ~/.my.cnf" - exit 1 - fi - fi - ;; - *) - if [ "$answer1" != 'yes' ] ; then - exit 1 - else - final_login_attempt - return 0 - fi - ;; - esac -} - -## -- populate the .my.cnf file using values harvested from Webmin -- ## -find_webmin_passwords () { - cecho "Testing for stored webmin passwords:" - - if [ -f /etc/webmin/mysql/config ] ; then - user=$(grep ^login= /etc/webmin/mysql/config | cut -d "=" -f 2) - pass=$(grep ^pass= /etc/webmin/mysql/config | cut -d "=" -f 2) - - if [ $user ] && [ $pass ] && [ ! -f ~/.my.cnf ] ; then - cecho "Setting login info as User: $user Password: $pass" - - touch ~/.my.cnf - chmod 600 ~/.my.cnf - printf "[client]\nuser=$user\npassword=$pass" > ~/.my.cnf - cecho "Retrying login" - - is_up=$($mysqladmin ping 2>&1) - - if [ "$is_up" = "mysqld is alive" ] ; then - echo UP > /dev/null - else - second_login_failed - fi - echo - - else - second_login_failed - echo - fi - - else - cecho " None Found" boldred - second_login_failed - fi -} - -######################################################################### -# -# Function to pull MySQL status variable -# -# Call using : -# mysql_status \'Mysql_status_variable\' bash_dest_variable -# -######################################################################### -mysql_status () { - local status=$($mysql -Bse "show /*!50000 global */ status like $1" | awk '{ print $2 }') - export "$2"=$status -} - -######################################################################### -# -# Function to pull MySQL server runtime variable -# -# Call using : -# mysql_variable \'Mysql_server_variable\' bash_dest_variable -# - OR - -# mysql_variableTSV \'Mysql_server_variable\' bash_dest_variable -# -######################################################################### -mysql_variable () { - local variable=$($mysql -Bse "show /*!50000 global */ variables like $1" | awk '{ print $2 }') - export "$2"=$variable -} - -mysql_variableTSV () { - local variable=$($mysql -Bse "show /*!50000 global */ variables like $1" | awk -F \t '{ print $2 }') - export "$2"=$variable -} - -float2int () { - local variable=$(echo "$1 / 1" | bc -l) - export "$2"=$variable -} - -# -- Divide two intigers -- -divide () { - usage="$0 dividend divisor '$variable' scale" - if [ $1 -ge 1 ] ; then - dividend=$1 - else - cecho "Invalid Dividend" red - echo $usage - exit 1 - fi - - if [ $2 -ge 1 ] ; then - divisor=$2 - else - cecho "Invalid Divisor" red - echo $usage - exit 1 - fi - - if [ ! -n $3 ] ; then - cecho "Invalid variable name" red - echo $usage - exit 1 - fi - - if [ -z $4 ] ; then - scale=2 - elif [ $4 -ge 0 ] ; then - scale=$4 - else - cecho "Invalid scale" red - echo $usage - exit 1 - fi - - export $3=$(echo "scale=$scale; $dividend / $divisor" | bc -l) -} - -######################################################################### -# -# Convert a value in to human readable size and populate a variable -# with the result. -# -# Call using: -# human_readable $value 'variable name' [ places of precision] -# -######################################################################### -human_readable () { - #value=$1 - #variable=$2 - scale=$3 - - if [ $1 -ge 1073741824 ] ; then - if [ -z $3 ] ; then - scale=2 - fi - divide $1 1073741824 "$2" $scale - unit="G" - - elif [ $1 -ge 1048576 ] ; then - if [ -z $3 ] ; then - scale=0 - fi - divide $1 1048576 "$2" $scale - unit="M" - - elif [ $1 -ge 1024 ] ; then - if [ -z $3 ] ; then - scale=0 - fi - divide $1 1024 "$2" $scale - unit="K" - - else - export "$2"=$1 - unit="bytes" - fi - #let "$2"=$HR -} - -######################################################################## -# -# Function to produce human readable time -# -######################################################################## -human_readable_time () { - usage="$0 seconds 'variable'" - if [ -z $1 ] || [ -z $2 ] ; then - cecho $usage red - exit 1 - fi - days=$(echo "scale=0 ; $1 / 86400" | bc -l) - remainder=$(echo "scale=0 ; $1 % 86400" | bc -l) - hours=$(echo "scale=0 ; $remainder / 3600" | bc -l) - remainder=$(echo "scale=0 ; $remainder % 3600" | bc -l) - minutes=$(echo "scale=0 ; $remainder / 60" | bc -l) - seconds=$(echo "scale=0 ; $remainder % 60" | bc -l) - export $2="$days days $hours hrs $minutes min $seconds sec" -} - -## -- Print Version Info -- ## -check_mysql_version () { - mysql_variable \'version\' mysql_version - mysql_variable \'version_compile_machine\' mysql_version_compile_machine - - if [ "$mysql_version_num" -lt 050000 ]; then - cecho "MySQL Version $mysql_version $mysql_version_compile_machine is EOL please upgrade to MySQL 4.1 or later" boldred - else - cecho "MySQL Version $mysql_version $mysql_version_compile_machine" - fi -} - -######################################################################### -# -# Present a reminder that mysql must run for a couple of days to -# build up good numbers in server status variables before these tuning -# suggestions should be used. -# -######################################################################### -post_uptime_warning () { - mysql_status \'Uptime\' uptime - mysql_status \'Threads_connected\' threads - queries_per_sec=$(($questions/$uptime)) - human_readable_time $uptime uptimeHR - - cecho "Uptime = $uptimeHR" - cecho "Avg. qps = $queries_per_sec" - cecho "Total Questions = $questions" - cecho "Threads Connected = $threads" - echo - - if [ $uptime -gt 172800 ] ; then - cecho "Server has been running for over 48hrs." - cecho "It should be safe to follow these recommendations" - else - cechon "Warning: " boldred - cecho "Server has not been running for at least 48hrs." boldred - cecho "It may not be safe to use these recommendations" boldred - - fi - - echo - cecho "To find out more information on how each of these" red - cecho "runtime variables effects performance visit:" red - - if [ "$major_version" = '3.23' ] || [ "$major_version" = '4.0' ] || [ "$major_version" = '4.1' ] ; then - cecho "http://dev.mysql.com/doc/refman/4.1/en/server-system-variables.html" boldblue - elif [ "$major_version" = '5.0' ] || [ "$mysql_version_num" -gt '050100' ]; then - cecho "http://dev.mysql.com/doc/refman/$major_version/en/server-system-variables.html" boldblue - else - cecho "UNSUPPORTED MYSQL VERSION" boldred - exit 1 - fi - - cecho "Visit http://www.mysql.com/products/enterprise/advisors.html" boldblue - cecho "for info about MySQL's Enterprise Monitoring and Advisory Service" boldblue -} - -## -- Slow Queries -- ## -check_slow_queries () { - cecho "SLOW QUERIES" boldblue - - mysql_status \'Slow_queries\' slow_queries - mysql_variable \'long_query_time\' long_query_time - mysql_variable \'log%queries\' log_slow_queries - - prefered_query_time=5 - - if [ -e /etc/my.cnf ] ; then - if [ -z $log_slow_queries ] ; then - log_slow_queries=$(grep log-slow-queries /etc/my.cnf) - fi - fi - - if [ "$log_slow_queries" = 'ON' ] ; then - cecho "The slow query log is enabled." - elif [ "$log_slow_queries" = 'OFF' ] ; then - cechon "The slow query log is " - cechon "NOT" boldred - cecho " enabled." - elif [ -z $log_slow_queries ] ; then - cechon "The slow query log is " - cechon "NOT" boldred - cecho " enabled." - else - cecho "Error: $log_slow_queries" boldred - fi - - cecho "Current long_query_time = $long_query_time sec." - cechon "You have " - cechon "$slow_queries" boldred - cechon " out of " - cechon "$questions" boldred - cecho " that take longer than $long_query_time sec. to complete" - - float2int long_query_time long_query_timeInt - - if [ $long_query_timeInt -gt $prefered_query_time ] ; then - cecho "Your long_query_time may be too high, I typically set this under $prefered_query_time sec." red - else - cecho "Your long_query_time seems to be fine" green - fi -} - -## -- Binary Log -- ## -check_binary_log () { - cecho "BINARY UPDATE LOG" boldblue - - mysql_variable \'log_bin\' log_bin - mysql_variable \'max_binlog_size\' max_binlog_size - mysql_variable \'expire_logs_days\' expire_logs_days - mysql_variable \'sync_binlog\' sync_binlog - #mysql_variable \'max_binlog_cache_size\' max_binlog_cache_size - - if [ "$log_bin" = 'ON' ] ; then - cecho "The binary update log is enabled" - if [ -z "$max_binlog_size" ] ; then - cecho "The max_binlog_size is not set. The binary log will rotate when it reaches 1GB." red - fi - - if [ "$expire_logs_days" -eq 0 ] ; then - cecho "The expire_logs_days is not set." boldred - cechon "The mysqld will retain the entire binary log until " red - cecho "RESET MASTER or PURGE MASTER LOGS commands are run manually" red - cecho "Setting expire_logs_days will allow you to remove old binary logs automatically" yellow - cecho "See http://dev.mysql.com/doc/refman/$major_version/en/purge-master-logs.html" yellow - fi - - if [ "$sync_binlog" = 0 ] ; then - cecho "Binlog sync is not enabled, you could loose binlog records during a server crash" red - fi - - else - cechon "The binary update log is " - cechon "NOT " boldred - cecho "enabled." - cecho "You will not be able to do point in time recovery" red - cecho "See http://dev.mysql.com/doc/refman/$major_version/en/point-in-time-recovery.html" yellow - fi -} - -## -- Used Connections -- ## -check_used_connections () { - mysql_variable \'max_connections\' max_connections - mysql_status \'Max_used_connections\' max_used_connections - mysql_status \'Threads_connected\' threads_connected - - connections_ratio=$(($max_used_connections*100/$max_connections)) - - cecho "MAX CONNECTIONS" boldblue - cecho "Current max_connections = $max_connections" - cecho "Current threads_connected = $threads_connected" - cecho "Historic max_used_connections = $max_used_connections" - cechon "The number of used connections is " - - if [ $connections_ratio -ge 85 ] ; then - txt_color=red - error=1 - elif [ $connections_ratio -le 10 ] ; then - txt_color=red - error=2 - else - txt_color=green - error=0 - fi - - #cechon "$max_used_connections " $txt_color - #cechon "which is " - cechon "$connections_ratio% " $txt_color - cecho "of the configured maximum." - - if [ $error -eq 1 ] ; then - cecho "You should raise max_connections" $txt_color - elif [ $error -eq 2 ] ; then - cecho "You are using less than 10% of your configured max_connections." $txt_color - cecho "Lowering max_connections could help to avoid an over-allocation of memory" $txt_color - cecho "See \"MEMORY USAGE\" section to make sure you are not over-allocating" $txt_color - else - cecho "Your max_connections variable seems to be fine." $txt_color - fi - - unset txt_color -} - -## -- Worker Threads -- ## -check_threads() { - cecho "WORKER THREADS" boldblue - - mysql_status \'Threads_created\' threads_created1 - sleep 1 - mysql_status \'Threads_created\' threads_created2 - - mysql_status \'Threads_cached\' threads_cached - mysql_status \'Uptime\' uptime - mysql_variable \'thread_cache_size\' thread_cache_size - - historic_threads_per_sec=$(($threads_created1/$uptime)) - current_threads_per_sec=$(($threads_created2-$threads_created1)) - - cecho "Current thread_cache_size = $thread_cache_size" - cecho "Current threads_cached = $threads_cached" - cecho "Current threads_per_sec = $current_threads_per_sec" - cecho "Historic threads_per_sec = $historic_threads_per_sec" - - if [ $historic_threads_per_sec -ge 2 ] && [ $threads_cached -le 1 ] ; then - cecho "Threads created per/sec are overrunning threads cached" red - cecho "You should raise thread_cache_size" red - elif [ $current_threads_per_sec -ge 2 ] ; then - cecho "Threads created per/sec are overrunning threads cached" red - cecho "You should raise thread_cache_size" red - else - cecho "Your thread_cache_size is fine" green - fi -} - -## -- Key buffer Size -- ## -check_key_buffer_size () { - cecho "KEY BUFFER" boldblue - - mysql_status \'Key_read_requests\' key_read_requests - mysql_status \'Key_reads\' key_reads - mysql_status \'Key_blocks_used\' key_blocks_used - mysql_status \'Key_blocks_unused\' key_blocks_unused - mysql_variable \'key_cache_block_size\' key_cache_block_size - mysql_variable \'key_buffer_size\' key_buffer_size - mysql_variable \'datadir\' datadir - mysql_variable \'version_compile_machine\' mysql_version_compile_machine - myisam_indexes=$($mysql -Bse "/*!50000 SELECT IFNULL(SUM(INDEX_LENGTH),0) from information_schema.TABLES where ENGINE='MyISAM' */") - #" - - if [ -z $myisam_indexes ] ; then - myisam_indexes=$(find $datadir -name '*.MYI' -exec du $duflags '{}' \; 2>&1 | awk '{ s += $1 } END { printf("%.0f\n", s )}') - fi - #' - - if [ $key_reads -eq 0 ] ; then - cecho "No key reads?!" boldred - cecho "Seriously look into using some indexes" red - key_cache_miss_rate=0 - key_buffer_free=$(echo "$key_blocks_unused * $key_cache_block_size / $key_buffer_size * 100" | bc -l ) - key_buffer_freeRND=$(echo "scale=0; $key_buffer_free / 1" | bc -l) - - else - key_cache_miss_rate=$(($key_read_requests/$key_reads)) - if [ ! -z $key_blocks_unused ] ; then - key_buffer_free=$(echo "$key_blocks_unused * $key_cache_block_size / $key_buffer_size * 100" | bc -l ) - key_buffer_freeRND=$(echo "scale=0; $key_buffer_free / 1" | bc -l) - else - key_buffer_free='Unknown' - key_buffer_freeRND=75 - fi - fi - - human_readable $myisam_indexes myisam_indexesHR - cecho "Current MyISAM index space = $myisam_indexesHR $unit" - - human_readable $key_buffer_size key_buffer_sizeHR - cecho "Current key_buffer_size = $key_buffer_sizeHR $unit" - cecho "Key cache miss rate is 1 : $key_cache_miss_rate" - cecho "Key buffer free ratio = $key_buffer_freeRND %" - - if [ "$major_version" = '5.1' ] && [ $mysql_version_num -lt 050123 ] ; then - if [ $key_buffer_size -ge 4294967296 ] && ( echo "x86_64 ppc64 ia64 sparc64 i686" | grep -q $mysql_version_compile_machine ) ; then - cecho "Using key_buffer_size > 4GB will cause instability in versions prior to 5.1.23 " boldred - cecho "See Bug#5731, Bug#29419, Bug#29446" boldred - fi - fi - - if [ "$major_version" = '5.0' ] && [ $mysql_version_num -lt 050052 ] ; then - if [ $key_buffer_size -ge 4294967296 ] && ( echo "x86_64 ppc64 ia64 sparc64 i686" | grep -q $mysql_version_compile_machine ) ; then - cecho "Using key_buffer_size > 4GB will cause instability in versions prior to 5.0.52 " boldred - cecho "See Bug#5731, Bug#29419, Bug#29446" boldred - fi - fi - - if [ "$major_version" = '4.1' -o "$major_version" = '4.0' ] && [ $key_buffer_size -ge 4294967296 ] && ( echo "x86_64 ppc64 ia64 sparc64 i686" | grep -q $mysql_version_compile_machine ) ; then - cecho "Using key_buffer_size > 4GB will cause instability in versions prior to 5.0.52 " boldred - cecho "Reduce key_buffer_size to a safe value" boldred - cecho "See Bug#5731, Bug#29419, Bug#29446" boldred - fi - - if [ $key_cache_miss_rate -le 100 ] && [ $key_cache_miss_rate -gt 0 ] && [ $key_buffer_freeRND -le 20 ]; then - cecho "You could increase key_buffer_size" boldred - cecho "It is safe to raise this up to 1/4 of total system memory;" - cecho "assuming this is a dedicated database server." - - elif [ $key_buffer_freeRND -le 20 ] && [ $key_buffer_size -le $myisam_indexes ] ; then - cecho "You could increase key_buffer_size" boldred - cecho "It is safe to raise this up to 1/4 of total system memory;" - cecho "assuming this is a dedicated database server." - - elif [ $key_cache_miss_rate -ge 10000 ] || [ $key_buffer_freeRND -le 50 ] ; then - cecho "Your key_buffer_size seems to be too high." red - cecho "Perhaps you can use these resources elsewhere" red - - else - cecho "Your key_buffer_size seems to be fine" green - fi -} - -## -- Query Cache -- ## -check_query_cache () { - cecho "QUERY CACHE" boldblue - - mysql_variable \'version\' mysql_version - mysql_variable \'query_cache_size\' query_cache_size - mysql_variable \'query_cache_limit\' query_cache_limit - mysql_variable \'query_cache_min_res_unit\' query_cache_min_res_unit - mysql_status \'Qcache_free_memory\' qcache_free_memory - mysql_status \'Qcache_total_blocks\' qcache_total_blocks - mysql_status \'Qcache_free_blocks\' qcache_free_blocks - mysql_status \'Qcache_lowmem_prunes\' qcache_lowmem_prunes - - if [ -z $query_cache_size ] ; then - cecho "You are using MySQL $mysql_version, no query cache is supported." red - cecho "I recommend an upgrade to MySQL 4.1 or better" red - elif [ $query_cache_size -eq 0 ] ; then - cecho "Query cache is supported but not enabled" red - cecho "Perhaps you should set the query_cache_size" red - else - qcache_used_memory=$(($query_cache_size-$qcache_free_memory)) - qcache_mem_fill_ratio=$(echo "scale=2; $qcache_used_memory * 100 / $query_cache_size" | bc -l) - qcache_mem_fill_ratioHR=$(echo "scale=0; $qcache_mem_fill_ratio / 1" | bc -l) - - cecho "Query cache is enabled" green - human_readable $query_cache_size query_cache_sizeHR - cecho "Current query_cache_size = $query_cache_sizeHR $unit" - human_readable $qcache_used_memory qcache_used_memoryHR - cecho "Current query_cache_used = $qcache_used_memoryHR $unit" - human_readable $query_cache_limit query_cache_limitHR - cecho "Current query_cache_limit = $query_cache_limitHR $unit" - cecho "Current Query cache Memory fill ratio = $qcache_mem_fill_ratio %" - if [ -z $query_cache_min_res_unit ] ; then - cecho "No query_cache_min_res_unit is defined. Using MySQL < 4.1 cache fragmentation can be inpredictable" %yellow - else - human_readable $query_cache_min_res_unit query_cache_min_res_unitHR - cecho "Current query_cache_min_res_unit = $query_cache_min_res_unitHR $unit" - fi - - if [ $qcache_free_blocks -gt 2 ] && [ $qcache_total_blocks -gt 0 ] ; then - qcache_percent_fragmented=$(echo "scale=2; $qcache_free_blocks * 100 / $qcache_total_blocks" | bc -l) - qcache_percent_fragmentedHR=$(echo "scale=0; $qcache_percent_fragmented / 1" | bc -l) - if [ $qcache_percent_fragmentedHR -gt 20 ] ; then - cecho "Query Cache is $qcache_percent_fragmentedHR % fragmented" red - cecho "Run \"FLUSH QUERY CACHE\" periodically to defragment the query cache memory" red - cecho "If you have many small queries lower 'query_cache_min_res_unit' to reduce fragmentation." red - fi - fi - - if [ $qcache_mem_fill_ratioHR -le 25 ] ; then - cecho "Your query_cache_size seems to be too high." red - cecho "Perhaps you can use these resources elsewhere" red - fi - - if [ $qcache_lowmem_prunes -ge 50 ] && [ $qcache_mem_fill_ratioHR -ge 80 ]; then - cechon "However, " - cechon "$qcache_lowmem_prunes " boldred - cecho "queries have been removed from the query cache due to lack of memory" - cecho "Perhaps you should raise query_cache_size" boldred - fi - - cecho "MySQL won't cache query results that are larger than query_cache_limit in size" yellow - fi -} - -## -- Sort Operations -- ## -check_sort_operations () { - cecho "SORT OPERATIONS" boldblue - - mysql_status \'Sort_merge_passes\' sort_merge_passes - mysql_status \'Sort_scan\' sort_scan - mysql_status \'Sort_range\' sort_range - mysql_variable \'sort_buffer%\' sort_buffer_size - mysql_variable \'read_rnd_buffer_size\' read_rnd_buffer_size - - total_sorts=$(($sort_scan+$sort_range)) - if [ -z $read_rnd_buffer_size ] ; then - mysql_variable \'record_buffer\' read_rnd_buffer_size - fi - - ## Correct for rounding error in mysqld where 512K != 524288 ## - sort_buffer_size=$(($sort_buffer_size+8)) - read_rnd_buffer_size=$(($read_rnd_buffer_size+8)) - - human_readable $sort_buffer_size sort_buffer_sizeHR - cecho "Current sort_buffer_size = $sort_buffer_sizeHR $unit" - - human_readable $read_rnd_buffer_size read_rnd_buffer_sizeHR - cechon "Current " - if [ "$major_version" = '3.23' ] ; then - cechon "record_rnd_buffer " - else - cechon "read_rnd_buffer_size " - fi - cecho "= $read_rnd_buffer_sizeHR $unit" - - if [ $total_sorts -eq 0 ] ; then - cecho "No sort operations have been performed" - passes_per_sort=0 - fi - - if [ $sort_merge_passes -ne 0 ] ; then - passes_per_sort=$(($sort_merge_passes/$total_sorts)) - else - passes_per_sort=0 - fi - - if [ $passes_per_sort -ge 2 ] ; then - cechon "On average " - cechon "$passes_per_sort " boldred - cecho "sort merge passes are made per sort operation" - cecho "You should raise your sort_buffer_size" - cechon "You should also raise your " - if [ "$major_version" = '3.23' ] ; then - cecho "record_rnd_buffer_size" - else - cecho "read_rnd_buffer_size" - fi - - else - cecho "Sort buffer seems to be fine" green - fi -} - -## -- Joins -- ## -check_join_operations () { - cecho "JOINS" boldblue - - mysql_status \'Select_full_join\' select_full_join - mysql_status \'Select_range_check\' select_range_check - mysql_variable \'join_buffer%\' join_buffer_size - - ## Some 4K is dropped from join_buffer_size adding it back to make sane ## - ## handling of human-readable conversion ## - - join_buffer_size=$(($join_buffer_size+4096)) - - human_readable $join_buffer_size join_buffer_sizeHR 2 - - cecho "Current join_buffer_size = $join_buffer_sizeHR $unit" - cecho "You have had $select_full_join queries where a join could not use an index properly" - - if [ $select_range_check -eq 0 ] && [ $select_full_join -eq 0 ] ; then - cecho "Your joins seem to be using indexes properly" green - fi - - if [ $select_full_join -gt 0 ] ; then - print_error='true' - raise_buffer='true' - fi - - if [ $select_range_check -gt 0 ] ; then - cecho "You have had $select_range_check joins without keys that check for key usage after each row" red - print_error='true' - raise_buffer='true' - fi - - ## For Debuging - #print_error='true' - if [ $join_buffer_size -ge 4194304 ] ; then - cecho "join_buffer_size >= 4 M" boldred - cecho "This is not advised" boldred - raise_buffer= - fi - - if [ $print_error ] ; then - if [ "$major_version" = '3.23' ] || [ "$major_version" = '4.0' ] ; then - cecho "You should enable \"log-long-format\" " - elif [ "$mysql_version_num" -gt 040100 ]; then - cecho "You should enable \"log-queries-not-using-indexes\"" - fi - - cecho "Then look for non indexed joins in the slow query log." - - if [ $raise_buffer ] ; then - cecho "If you are unable to optimize your queries you may want to increase your" - cecho "join_buffer_size to accommodate larger joins in one pass." - printf "\n" - cecho "Note! This script will still suggest raising the join_buffer_size when" boldred - cecho "ANY joins not using indexes are found." boldred - fi - fi - - #FIXME Add better tests for join_buffer_size pending mysql bug #15088 -} - -# -- Temp Tables -- -check_tmp_tables () { - cecho "TEMP TABLES" boldblue - - mysql_status \'Created_tmp_tables\' created_tmp_tables - mysql_status \'Created_tmp_disk_tables\' created_tmp_disk_tables - mysql_variable \'tmp_table_size\' tmp_table_size - mysql_variable \'max_heap_table_size\' max_heap_table_size - - - if [ $created_tmp_tables -eq 0 ] ; then - tmp_disk_tables=0 - else - tmp_disk_tables=$((created_tmp_disk_tables*100/(created_tmp_tables+created_tmp_disk_tables))) - fi - - human_readable $max_heap_table_size max_heap_table_sizeHR - cecho "Current max_heap_table_size = $max_heap_table_sizeHR $unit" - - human_readable $tmp_table_size tmp_table_sizeHR - cecho "Current tmp_table_size = $tmp_table_sizeHR $unit" - - cecho "Of $created_tmp_tables temp tables, $tmp_disk_tables% were created on disk" - - if [ $tmp_table_size -gt $max_heap_table_size ] ; then - cecho "Effective in-memory tmp_table_size is limited to max_heap_table_size." yellow - fi - - if [ $tmp_disk_tables -ge 25 ] ; then - cecho "Perhaps you should increase your tmp_table_size and/or max_heap_table_size" boldred - cecho "to reduce the number of disk-based temporary tables" boldred - cecho "Note! BLOB and TEXT columns are not allow in memory tables." yellow - cecho "If you are using these columns raising these values might not impact your " yellow - cecho "ratio of on disk temp tables." yellow - else - cecho "Created disk tmp tables ratio seems fine" green - fi -} - -# -- Open Files Limit -- -check_open_files () { - cecho "OPEN FILES LIMIT" boldblue - - mysql_variable \'open_files_limit\' open_files_limit - mysql_status \'Open_files\' open_files - - if [ -z $open_files_limit ] || [ $open_files_limit -eq 0 ] ; then - open_files_limit=$(ulimit -n) - cant_override=1 - else - cant_override=0 - fi - - cecho "Current open_files_limit = $open_files_limit files" - - open_files_ratio=$(($open_files*100/$open_files_limit)) - - cecho "The open_files_limit should typically be set to at least 2x-3x" yellow - cecho "that of table_cache if you have heavy MyISAM usage." yellow - - if [ $open_files_ratio -ge 75 ] ; then - cecho "You currently have open more than 75% of your open_files_limit" boldred - - if [ $cant_override -eq 1 ] ; then - cecho "You should set a higer value for ulimit -u in the mysql startup script then restart mysqld" boldred - cecho "MySQL 3.23 users : This is just a guess based upon the current shell's ulimit -u value" yellow - elif [ $cant_override -eq 0 ] ; then - cecho "You should set a higher value for open_files_limit in my.cnf" boldred - else - cecho "ERROR can't determine if mysqld override of ulimit is allowed" boldred - exit 1 - fi - - else - cecho "Your open_files_limit value seems to be fine" green - fi - - - -} - -# -- Table Cache -- -check_table_cache () { - cecho "TABLE CACHE" boldblue - - mysql_variable \'datadir\' datadir - mysql_variable \'table_cache\' table_cache - - ## /* MySQL +5.1 version of table_cache */ ## - mysql_variable \'table_open_cache\' table_open_cache - mysql_variable \'table_definition_cache\' table_definition_cache - - mysql_status \'Open_tables\' open_tables - mysql_status \'Opened_tables\' opened_tables - mysql_status \'Open_table_definitions\' open_table_definitions - - table_count=$($mysql -Bse "/*!50000 SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' */") - #" - - if [ -z "$table_count" ] ; then - if [ "$UID" != "$socket_owner" ] && [ "$UID" != "0" ] ; then - cecho "You are not '$socket_owner' or 'root'" red - cecho "I am unable to determine the table_count!" red - else - table_count=$(find $datadir 2>&1 | grep -c .frm$) - fi - fi - - if [ $table_open_cache ] ; then - table_cache=$table_open_cache - fi - - if [ $opened_tables -ne 0 ] && [ $table_cache -ne 0 ] ; then - table_cache_hit_rate=$(($open_tables*100/$opened_tables)) - table_cache_fill=$(($open_tables*100/$table_cache)) - elif [ $opened_tables -eq 0 ] && [ $table_cache -ne 0 ] ; then - table_cache_hit_rate=100 - table_cache_fill=$(($open_tables*100/$table_cache)) - else - cecho "ERROR no table_cache ?!" boldred - exit 1 - fi - - if [ $table_cache ] && [ ! $table_open_cache ] ; then - cecho "Current table_cache value = $table_cache tables" - fi - - if [ $table_open_cache ] ; then - cecho "Current table_open_cache = $table_open_cache tables" - cecho "Current table_definition_cache = $table_definition_cache tables" - fi - - if [ $table_count ] ; then - cecho "You have a total of $table_count tables" - fi - - if [ $table_cache_fill -lt 95 ] ; then - cechon "You have " - cechon "$open_tables " green - cecho "open tables." - cecho "The table_cache value seems to be fine" green - - elif [ $table_cache_hit_rate -le 85 -o $table_cache_fill -ge 95 ]; then - cechon "You have " - cechon "$open_tables " boldred - cecho "open tables." - cechon "Current table_cache hit rate is " - cecho "$table_cache_hit_rate%" boldred - cechon ", while " - cechon "$table_cache_fill% " boldred - cecho "of your table cache is in use" - cecho "You should probably increase your table_cache" red - - else - cechon "Current table_cache hit rate is " - cechon "$table_cache_hit_rate%" green - cechon ", while " - cechon "$table_cache_fill% " green - cecho "of your table cache is in use" - cecho "The table cache value seems to be fine" green - fi - - if [ $table_definition_cache ] && [ $table_definition_cache -le $table_count ] && [ $table_count -ge 100 ] ; then - cecho "You should probably increase your table_definition_cache value." red - fi -} - -# -- Table Locking -- -check_table_locking () { - cecho "TABLE LOCKING" boldblue - - mysql_status \'Table_locks_waited\' table_locks_waited - mysql_status \'Table_locks_immediate\' table_locks_immediate - mysql_variable \'concurrent_insert\' concurrent_insert - mysql_variable \'low_priority_updates\' low_priority_updates - if [ "$concurrent_insert" = 'ON' ]; then - concurrent_insert=1 - elif [ "$concurrent_insert" = 'OFF' ]; then - concurrent_insert=0 - fi - - cechon "Current Lock Wait ratio = " - - if [ $table_locks_waited -gt 0 ]; then - immediate_locks_miss_rate=$(($table_locks_immediate/$table_locks_waited)) - cecho "1 : $immediate_locks_miss_rate" red - else - immediate_locks_miss_rate=99999 # perfect - cecho "0 : $questions" - fi - - if [ $immediate_locks_miss_rate -lt 5000 ] ; then - cecho "You may benefit from selective use of InnoDB." - if [ "$low_priority_updates" = 'OFF' ] ; then - cecho "If you have long running SELECT's against MyISAM tables and perform" - cecho "frequent updates consider setting 'low_priority_updates=1'" - fi - - if [ "$mysql_version_num" -gt 050000 ] && [ "$mysql_version_num" -lt 050500 ]; then - if [ $concurrent_insert -le 1 ] ; then - cecho "If you have a high concurrency of inserts on Dynamic row-length tables" - cecho "consider setting 'concurrent_insert=2'." - fi - - elif [ "$mysql_version_num" -gt 050500 ] ; then - if [ "$concurrent_insert" = 'AUTO' ] || [ "$concurrent_insert" = 'NEVER' ] ; then - cecho "If you have a high concurrency of inserts on Dynamic row-length tables" - cecho "consider setting 'concurrent_insert=ALWAYS'." - fi - fi - - else - cecho "Your table locking seems to be fine" green - fi -} - -# -- Table Scans -- -check_table_scans () { - cecho "TABLE SCANS" boldblue - - mysql_status \'Com_select\' com_select - mysql_status \'Handler_read_rnd_next\' read_rnd_next - mysql_variable \'read_buffer_size\' read_buffer_size - - if [ -z $read_buffer_size ] ; then - mysql_variable \'record_buffer\' read_buffer_size - fi - - human_readable $read_buffer_size read_buffer_sizeHR - cecho "Current read_buffer_size = $read_buffer_sizeHR $unit" - - if [ $com_select -gt 0 ] ; then - full_table_scans=$(($read_rnd_next/$com_select)) - cecho "Current table scan ratio = $full_table_scans : 1" - - if [ $full_table_scans -ge 4000 ] && [ $read_buffer_size -le 2097152 ] ; then - cecho "You have a high ratio of sequential access requests to SELECTs" red - cechon "You may benefit from raising " red - - if [ "$major_version" = '3.23' ] ; then - cechon "record_buffer " red - else - cechon "read_buffer_size " red - fi - cecho "and/or improving your use of indexes." red - - elif [ $read_buffer_size -gt 8388608 ] ; then - cechon "read_buffer_size is over 8 MB " red - cecho "there is probably no need for such a large read_buffer" red - - else - cecho "read_buffer_size seems to be fine" green - fi - - else - cecho "read_buffer_size seems to be fine" green - fi -} - - -# -- InnoDB -- -check_innodb_status () { - # See http://bugs.mysql.com/59393 - - if [ "$mysql_version_num" -lt 050603 ] ; then - mysql_variable \'have_innodb\' have_innodb - fi - - if [ "$mysql_version_num" -lt 050500 ] && [ "$have_innodb" = "YES" ] ; then - innodb_enabled=1 - fi - - if [ "$mysql_version_num" -ge 050500 ] && [ "$mysql_version_num" -lt 050512 ] ; then - mysql_variable \'ignore_builtin_innodb\' ignore_builtin_innodb - - if [ "$ignore_builtin_innodb" = "ON" ] || [ $have_innodb = "NO" ] ; then - innodb_enabled=0 - else - innodb_enabled=1 - fi - - elif [ "$major_version" = '5.5' ] && [ "$mysql_version_num" -ge 050512 ] ; then - mysql_variable \'ignore_builtin_innodb\' ignore_builtin_innodb - - if [ "$ignore_builtin_innodb" = "ON" ] ; then - innodb_enabled=0 - else - innodb_enabled=1 - fi - - elif [ "$mysql_version_num" -ge 050600 ] && [ "$mysql_version_num" -lt 050603 ] ; then - mysql_variable \'ignore_builtin_innodb\' ignore_builtin_innodb - - if [ "$ignore_builtin_innodb" = "ON" ] || [ $have_innodb = "NO" ] ; then - innodb_enabled=0 - else - innodb_enabled=1 - fi - - elif [ "$major_version" = '5.6' ] && [ "$mysql_version_num" -ge 050603 ] ; then - mysql_variable \'ignore_builtin_innodb\' ignore_builtin_innodb - if [ "$ignore_builtin_innodb" = "ON" ] ; then - innodb_enabled=0 - else - innodb_enabled=1 - fi - fi - - if [ "$innodb_enabled" = 1 ] ; then - mysql_variable \'innodb_buffer_pool_size\' innodb_buffer_pool_size - mysql_variable \'innodb_additional_mem_pool_size\' innodb_additional_mem_pool_size - mysql_variable \'innodb_fast_shutdown\' innodb_fast_shutdown - mysql_variable \'innodb_flush_log_at_trx_commit\' innodb_flush_log_at_trx_commit - mysql_variable \'innodb_locks_unsafe_for_binlog\' innodb_locks_unsafe_for_binlog - mysql_variable \'innodb_log_buffer_size\' innodb_log_buffer_size - mysql_variable \'innodb_log_file_size\' innodb_log_file_size - mysql_variable \'innodb_log_files_in_group\' innodb_log_files_in_group - mysql_variable \'innodb_safe_binlog\' innodb_safe_binlog - mysql_variable \'innodb_thread_concurrency\' innodb_thread_concurrency - - cecho "INNODB STATUS" boldblue - innodb_indexes=$($mysql -Bse "/*!50000 SELECT IFNULL(SUM(INDEX_LENGTH),0) from information_schema.TABLES where ENGINE='InnoDB' */") - innodb_data=$($mysql -Bse "/*!50000 SELECT IFNULL(SUM(DATA_LENGTH),0) from information_schema.TABLES where ENGINE='InnoDB' */") - - if [ ! -z "$innodb_indexes" ] ; then - mysql_status \'Innodb_buffer_pool_pages_data\' innodb_buffer_pool_pages_data - mysql_status \'Innodb_buffer_pool_pages_misc\' innodb_buffer_pool_pages_misc - mysql_status \'Innodb_buffer_pool_pages_free\' innodb_buffer_pool_pages_free - mysql_status \'Innodb_buffer_pool_pages_total\' innodb_buffer_pool_pages_total - - mysql_status \'Innodb_buffer_pool_read_ahead_seq\' innodb_buffer_pool_read_ahead_seq - mysql_status \'Innodb_buffer_pool_read_requests\' innodb_buffer_pool_read_requests - - mysql_status \'Innodb_os_log_pending_fsyncs\' innodb_os_log_pending_fsyncs - mysql_status \'Innodb_os_log_pending_writes\' innodb_os_log_pending_writes - mysql_status \'Innodb_log_waits\' innodb_log_waits - - mysql_status \'Innodb_row_lock_time\' innodb_row_lock_time - mysql_status \'Innodb_row_lock_waits\' innodb_row_lock_waits - - human_readable $innodb_indexes innodb_indexesHR - cecho "Current InnoDB index space = $innodb_indexesHR $unit" - human_readable $innodb_data innodb_dataHR - cecho "Current InnoDB data space = $innodb_dataHR $unit" - percent_innodb_buffer_pool_free=$(($innodb_buffer_pool_pages_free*100/$innodb_buffer_pool_pages_total)) - cecho "Current InnoDB buffer pool free = "$percent_innodb_buffer_pool_free" %" - - else - cecho "Cannot parse InnoDB stats prior to 5.0.x" red - $mysql -s -e "SHOW /*!50000 ENGINE */ INNODB STATUS\G" - fi - - human_readable $innodb_buffer_pool_size innodb_buffer_pool_sizeHR - cecho "Current innodb_buffer_pool_size = $innodb_buffer_pool_sizeHR $unit" - cecho "Depending on how much space your innodb indexes take up it may be safe" - cecho "to increase this value to up to 2 / 3 of total system memory" - - else - cecho "No InnoDB Support Enabled!" boldred - fi -} - -# -- Total Memory Usage -- -total_memory_used () { - cecho "MEMORY USAGE" boldblue - - mysql_variable \'read_buffer_size\' read_buffer_size - mysql_variable \'read_rnd_buffer_size\' read_rnd_buffer_size - mysql_variable \'sort_buffer_size\' sort_buffer_size - mysql_variable \'thread_stack\' thread_stack - mysql_variable \'max_connections\' max_connections - mysql_variable \'join_buffer_size\' join_buffer_size - mysql_variable \'tmp_table_size\' tmp_table_size - mysql_variable \'max_heap_table_size\' max_heap_table_size - mysql_variable \'log_bin\' log_bin - mysql_status \'Max_used_connections\' max_used_connections - - if [ "$major_version" = "3.23" ] ; then - mysql_variable \'record_buffer\' read_buffer_size - mysql_variable \'record_rnd_buffer\' read_rnd_buffer_size - mysql_variable \'sort_buffer\' sort_buffer_size - fi - - if [ "$log_bin" = "ON" ] ; then - mysql_variable \'binlog_cache_size\' binlog_cache_size - else - binlog_cache_size=0 - fi - - if [ $max_heap_table_size -le $tmp_table_size ] ; then - effective_tmp_table_size=$max_heap_table_size - else - effective_tmp_table_size=$tmp_table_size - fi - - - per_thread_buffers=$(echo "($read_buffer_size+$read_rnd_buffer_size+$sort_buffer_size+$thread_stack+$join_buffer_size+$binlog_cache_size)*$max_connections" | bc -l) - per_thread_max_buffers=$(echo "($read_buffer_size+$read_rnd_buffer_size+$sort_buffer_size+$thread_stack+$join_buffer_size+$binlog_cache_size)*$max_used_connections" | bc -l) - - mysql_variable \'innodb_buffer_pool_size\' innodb_buffer_pool_size - if [ -z $innodb_buffer_pool_size ] ; then - innodb_buffer_pool_size=0 - fi - - mysql_variable \'innodb_additional_mem_pool_size\' innodb_additional_mem_pool_size - if [ -z $innodb_additional_mem_pool_size ] ; then - innodb_additional_mem_pool_size=0 - fi - - mysql_variable \'innodb_log_buffer_size\' innodb_log_buffer_size - if [ -z $innodb_log_buffer_size ] ; then - innodb_log_buffer_size=0 - fi - - mysql_variable \'key_buffer_size\' key_buffer_size - - mysql_variable \'query_cache_size\' query_cache_size - if [ -z $query_cache_size ] ; then - query_cache_size=0 - fi - - global_buffers=$(echo "$innodb_buffer_pool_size+$innodb_additional_mem_pool_size+$innodb_log_buffer_size+$key_buffer_size+$query_cache_size" | bc -l) - - max_memory=$(echo "$global_buffers+$per_thread_max_buffers" | bc -l) - total_memory=$(echo "$global_buffers+$per_thread_buffers" | bc -l) - - pct_of_sys_mem=$(echo "scale=0; $total_memory*100/$physical_memory" | bc -l) - - if [ $pct_of_sys_mem -gt 90 ] ; then - txt_color=boldred - error=1 - else - txt_color= - error=0 - fi - - human_readable $max_memory max_memoryHR - cecho "Max Memory Ever Allocated : $max_memoryHR $unit" $txt_color - human_readable $per_thread_buffers per_thread_buffersHR - cecho "Configured Max Per-thread Buffers : $per_thread_buffersHR $unit" $txt_color - human_readable $global_buffers global_buffersHR - cecho "Configured Max Global Buffers : $global_buffersHR $unit" $txt_color - human_readable $total_memory total_memoryHR - cecho "Configured Max Memory Limit : $total_memoryHR $unit" $txt_color - #human_readable $effective_tmp_table_size effective_tmp_table_sizeHR - #cecho "Plus $effective_tmp_table_sizeHR $unit per temporary table created" - human_readable $physical_memory physical_memoryHR - cecho "Physical Memory : $physical_memoryHR $unit" $txt_color - - if [ $error -eq 1 ] ; then - printf "\n" - cecho "Max memory limit exceeds 90% of physical memory" $txt_color - else - cecho "Max memory limit seem to be within acceptable norms" green - fi - - unset txt_color -} - -## Required Functions ## -login_validation () { - check_for_socket # determine the socket location -- 1st login - check_for_plesk_passwords # determine the login method -- 2nd login - check_mysql_login # determine if mysql is accepting login -- 3rd login - export major_version=$($mysql -Bse "SELECT SUBSTRING_INDEX(VERSION(), '.', +2)") - #export mysql_version_num=$($mysql -Bse "SELECT LEFT(REPLACE(SUBSTRING_INDEX(VERSION(), '-', +1), '.', ''),4)" ) - export mysql_version_num=$($mysql -Bse "SELECT VERSION()" | - awk -F \. '{ printf "%02d", $1; printf "%02d", $2; printf "%02d", $3 }') -} -#" - -shared_info () { - export major_version=$($mysql -Bse "SELECT SUBSTRING_INDEX(VERSION(), '.', +2)") - #export mysql_version_num=$($mysql -Bse "SELECT LEFT(REPLACE(SUBSTRING_INDEX(VERSION(), '-', +1), '.', ''),4)" ) - export mysql_version_num=$($mysql -Bse "SELECT VERSION()" | - awk -F \. '{ printf "%02d", $1; printf "%02d", $2; printf "%02d", $3 }') - mysql_status \'Questions\' questions - #socket_owner=$(find -L $socket -printf '%u\n') - socket_owner=$(ls -nH $socket | awk '{ print $3 }') -} -#" - -get_system_info () { - export OS=$(uname) - - # Get information for various UNIXes - if [ "$OS" = 'Darwin' ]; then - ps_socket=$(netstat -ln | awk '/mysql(.*)?\.sock/ { print $9 }' | head -1) - found_socks=$(netstat -ln | awk '/mysql(.*)?\.sock/ { print $9 }') - export physical_memory=$(sysctl -n hw.memsize) - export duflags='' - - elif [ "$OS" = 'FreeBSD' ] || [ "$OS" = 'OpenBSD' ]; then - ## On FreeBSD must be root to locate sockets. - ps_socket=$(netstat -ln | awk '/mysql(.*)?\.sock/ { print $9 }' | head -1) - found_socks=$(netstat -ln | awk '/mysql(.*)?\.sock/ { print $9 }') - export physical_memory=$(sysctl -n hw.realmem) - export duflags='' - - elif [ "$OS" = 'Linux' ] ; then - ## Includes SWAP - ## export physical_memory=$(free -b | grep -v buffers | awk '{ s += $2 } END { printf("%.0f\n", s ) }') - ps_socket=$(netstat -ln | awk '/mysql(.*)?\.sock/ { print $9 }' | head -1) - found_socks=$(netstat -ln | awk '/mysql(.*)?\.sock/ { print $9 }') - export physical_memory=$(awk '/^MemTotal/ { printf("%.0f", $2*1024 ) }' < /proc/meminfo) - export duflags='-b' - - elif [ "$OS" = 'SunOS' ] ; then - ps_socket=$(netstat -an | awk '/mysql(.*)?.sock/ { print $5 }' | head -1) - found_socks=$(netstat -an | awk '/mysql(.*)?.sock/ { print $5 }') - export physical_memory=$(prtconf | awk '/^Memory\ size:/ { print $3*1048576 }') - fi - - if [ -z $(which bc) ] ; then - echo "Error: Command line calculator 'bc' not found!" - exit - fi -} -#' - -## Optional Components Groups -banner_info () { - shared_info - print_banner ; echo - check_mysql_version ; echo - post_uptime_warning ; echo -} - -misc () { - shared_info - check_slow_queries ; echo - check_binary_log ; echo - check_threads ; echo - check_used_connections ; echo - check_innodb_status ; echo -} - -memory () { - shared_info - total_memory_used ; echo - check_key_buffer_size ; echo - check_query_cache ; echo - check_sort_operations ; echo - check_join_operations ; echo -} - -file () { - shared_info - check_open_files ; echo - check_table_cache ; echo - check_tmp_tables ; echo - check_table_scans ; echo - check_table_locking ; echo -} - -all () { - banner_info - misc - memory - file -} - -prompt () { - prompted='true' - read -p "Username [anonymous] : " user - read -rp "Password [] : " pass - cecho " " - read -p "Socket [ /var/lib/mysql/mysql.sock ] : " socket - if [ -z $socket ] ; then - export socket='/var/lib/mysql/mysql.sock' - fi - - if [ -z $pass ] ; then - export mysql="mysql -S $socket -u$user" - export mysqladmin="mysqladmin -S $socket -u$user" - else - export mysql="mysql -S $socket -u$user -p$pass" - export mysqladmin="mysqladmin -S $socket -u$user -p$pass" - fi - - check_for_socket - check_mysql_login - - if [ $? = 1 ] ; then - exit 1 - fi - - read -p "Mode to test - banner, file, misc, mem, innodb, [all] : " REPLY - if [ -z $REPLY ] ; then - REPLY='all' - fi - - case $REPLY in - banner | BANNER | header | HEADER | head | HEAD) - banner_info - ;; - misc | MISC | miscelaneous ) - misc - ;; - mem | memory | MEM | MEMORY ) - memory - ;; - file | FILE | disk | DISK ) - file - ;; - innodb | INNODB ) - innodb - ;; - all | ALL ) - cecho " " - all - ;; - * ) - cecho "Invalid Mode! Valid options are 'banner', 'misc', 'memory', 'file', 'innodb' or 'all'" boldred - exit 1 - ;; - esac -} - -## Address environmental differences - -get_system_info -#echo $ps_socket - -if [ -z "$1" ] ; then - login_validation - mode='ALL' - -elif [ "$1" = "prompt" ] || [ "$1" = "PROMPT" ] ; then - mode=$1 - -elif [ "$1" != "prompt" ] || [ "$1" != "PROMPT" ] ; then - login_validation - mode=$1 -fi - -case $mode in - all | ALL ) - cecho " " - all - ;; - mem | memory | MEM | MEMORY ) - cecho " " - memory - ;; - file | FILE | disk | DISK ) - cecho " " - file - ;; - banner | BANNER | header | HEADER | head | HEAD ) - banner_info - ;; - misc | MISC | miscelaneous ) - cecho " " - misc - ;; - innodb | INNODB ) - banner_info - check_innodb_status ; echo - ;; - prompt | PROMPT ) - prompt - ;; - *) - cecho "usage: $0 [ all | banner | file | innodb | memory | misc | prompt ]" boldred - exit 1 - ;; -esac - diff --git a/mysql/mysql2sqlite b/mysql/mysql2sqlite index c2c69048..35765d25 160000 --- a/mysql/mysql2sqlite +++ b/mysql/mysql2sqlite @@ -1 +1 @@ -Subproject commit c2c6904886936f1d355b57178af09e29d415ba6d +Subproject commit 35765d25041f0381e8dd115ac1fa2495de6ecb46 diff --git a/mysql/mysqltuner b/mysql/mysqltuner index 633b596d..1e831542 160000 --- a/mysql/mysqltuner +++ b/mysql/mysqltuner @@ -1 +1 @@ -Subproject commit 633b596dabcd788d7696852bdb56c80e16379da3 +Subproject commit 1e8315425659577fe471fbfa69bd81e5b8821471 diff --git a/security/cert-update.sh b/security/cert-update.sh index ac3440d0..18aea0a2 100755 --- a/security/cert-update.sh +++ b/security/cert-update.sh @@ -2,7 +2,7 @@ # # Set up certificate for use. # -# VERSION :1.0.6 +# VERSION :1.0.7 # DATE :2018-03-29 # URL :https://github.com/szepeviktor/debian-server-tools # AUTHOR :Viktor Szépe @@ -177,35 +177,37 @@ Courier_mta() fi # Check config files for submission (MSA) - if grep -q -x "ESMTPDSTART=YES" /etc/courier/esmtpd-msa \ - && grep -q -x "TLS_CERTFILE=${COURIER_COMBINED}" /etc/courier/esmtpd \ - && grep -q -x "TLS_DHPARAMS=${COURIER_DHPARAMS}" /etc/courier/esmtpd; then - - service courier-mta restart - - # Test SMTP-MSA STARTTLS - echo QUIT | openssl s_client -CAfile "$CABUNDLE" -crlf \ - -servername "$SERVER_NAME" -connect "${SERVER_NAME}:587" -starttls smtp - echo "SMTPS-MSA result=$?" - else - echo "Add 'TLS_CERTFILE=${COURIER_COMBINED}' to courier config: esmtpd" 1>&2 - echo "echo QUIT|openssl s_client -CAfile ${CABUNDLE} -crlf -servername ${SERVER_NAME} -connect ${SERVER_NAME}:587 -starttls smtp" 1>&2 + if grep -q -x "ESMTPDSTART=YES" /etc/courier/esmtpd-msa; then + if grep -q -x "TLS_CERTFILE=${COURIER_COMBINED}" /etc/courier/esmtpd \ + && grep -q -x "TLS_DHPARAMS=${COURIER_DHPARAMS}" /etc/courier/esmtpd; then + + service courier-msa restart + + # Test SMTP-MSA STARTTLS + echo QUIT | openssl s_client -CAfile "$CABUNDLE" -crlf \ + -servername "$SERVER_NAME" -connect "${SERVER_NAME}:587" -starttls smtp + echo "SMTPS-MSA result=$?" + else + echo "Add 'TLS_CERTFILE=${COURIER_COMBINED}' to courier config: esmtpd-msa" 1>&2 + echo "echo QUIT|openssl s_client -CAfile ${CABUNDLE} -crlf -servername ${SERVER_NAME} -connect ${SERVER_NAME}:587 -starttls smtp" 1>&2 + fi fi # Check config file for IMAPS - if [ -f /etc/courier/imapd-ssl ] \ - && grep -q -x "TLS_CERTFILE=${COURIER_COMBINED}" /etc/courier/imapd-ssl \ - && grep -q -x "TLS_DHPARAMS=${COURIER_DHPARAMS}" /etc/courier/imapd-ssl; then - - service courier-imap-ssl restart - - # Test IMAPS - echo QUIT | openssl s_client -CAfile "$CABUNDLE" -crlf \ - -servername "$SERVER_NAME" -connect "${SERVER_NAME}:993" - echo "IMAPS result=$?" - else - echo "Add 'TLS_CERTFILE=${COURIER_COMBINED}' to courier config imapd-ssl" 1>&2 - echo "echo QUIT|openssl s_client -CAfile ${CABUNDLE} -crlf -servername ${SERVER_NAME} -connect ${SERVER_NAME}:993" 1>&2 + if [ -f /etc/courier/imapd-ssl ]; then + if grep -q -x "TLS_CERTFILE=${COURIER_COMBINED}" /etc/courier/imapd-ssl \ + && grep -q -x "TLS_DHPARAMS=${COURIER_DHPARAMS}" /etc/courier/imapd-ssl; then + + service courier-imap-ssl restart + + # Test IMAPS + echo QUIT | openssl s_client -CAfile "$CABUNDLE" -crlf \ + -servername "$SERVER_NAME" -connect "${SERVER_NAME}:993" + echo "IMAPS result=$?" + else + echo "Add 'TLS_CERTFILE=${COURIER_COMBINED}' to courier config imapd-ssl" 1>&2 + echo "echo QUIT|openssl s_client -CAfile ${CABUNDLE} -crlf -servername ${SERVER_NAME} -connect ${SERVER_NAME}:993" 1>&2 + fi fi echo "$(tput setaf 1)WARNING: Update msmtprc:tls_fingerprint on SMTP clients.$(tput sgr0)" diff --git a/webserver/PHP-development.md b/webserver/PHP-development.md index 4362e868..a2bddc21 100644 --- a/webserver/PHP-development.md +++ b/webserver/PHP-development.md @@ -12,6 +12,7 @@ and [clearPHP rules](https://github.com/dseguy/clearPHP) - Other's interest in integration with your project (API) - Move fast with development, don't use a tool if it slows down development - Keep developer morale high +- Have a fixed time frame for under-the-hood development - Think about the far future when making decisions today ### High level overview @@ -32,6 +33,7 @@ Bits and bytes. - UTF-8 encoding without BOM - **Trim trailing whitespaces** - Insert final newlines +- Non-ASCII characters (emoji, accented letter, signs) `LC_ALL=C grep -P '[\x80-\xFF]'` [EditorConfig](/.editorconfig), [PSR2 ruleset](https://github.com/squizlabs/PHP_CodeSniffer/blob/master/src/Standards/PSR2/ruleset.xml) diff --git a/webserver/apache-conf-available/hu-wp-login.conf b/webserver/apache-conf-available/hu-wp-login.conf index 0e36099c..6fff6c57 100644 --- a/webserver/apache-conf-available/hu-wp-login.conf +++ b/webserver/apache-conf-available/hu-wp-login.conf @@ -1,4 +1,3 @@ - # ipformat.pm: (c) 2005 Boyan Krosnov # ipformat.pm: using template apache-allow # ipgetintervals.pm: (c) 2005 Boyan Krosnov @@ -7,13 +6,17 @@ # ipgetintervals.pm: added hu to the list of datasets # ipgetintervals.pm: loading file var/country.db # ipgetintervals.pm: dumping database + + Require ip 5.23.6.0/24 Require ip 5.28.0.0/21 Require ip 5.38.128.0/17 Require ip 5.56.32.0/21 Require ip 5.61.240.0/21 Require ip 5.63.192.0/18 + Require ip 5.132.150.0/24 Require ip 5.148.192.0/18 Require ip 5.149.240.0/21 + Require ip 5.153.39.96/27 Require ip 5.159.232.0/21 Require ip 5.187.128.0/17 Require ip 5.204.0.0/16 @@ -37,9 +40,7 @@ Require ip 31.46.128.0/17 Require ip 31.148.97.0/24 Require ip 31.171.224.0/20 - Require ip 31.210.8.0/24 Require ip 31.210.9.144/28 - Require ip 31.210.10.0/24 Require ip 31.210.11.128/28 Require ip 31.210.12.48/28 Require ip 31.210.12.64/27 @@ -52,7 +53,6 @@ Require ip 37.17.160.0/20 Require ip 37.46.64.0/21 Require ip 37.76.0.0/17 - Require ip 37.111.0.0/16 Require ip 37.143.72.0/21 Require ip 37.188.80.0/21 Require ip 37.191.0.0/18 @@ -61,6 +61,7 @@ Require ip 37.220.192.0/18 Require ip 37.221.208.0/21 Require ip 37.234.0.0/16 + Require ip 46.16.184.64/28 Require ip 46.28.216.0/21 Require ip 46.29.136.0/21 Require ip 46.31.176.0/21 @@ -79,19 +80,30 @@ Require ip 46.107.238.0/24 Require ip 46.107.240.0/20 Require ip 46.139.0.0/16 + Require ip 46.166.171.0/27 Require ip 46.189.121.128/26 + Require ip 46.235.106.0/24 Require ip 46.249.128.0/19 Require ip 46.251.0.0/19 - Require ip 62.68.160.0/19 - Require ip 62.77.128.0/19 + Require ip 57.90.112.0/20 + Require ip 62.77.128.0/23 + Require ip 62.77.130.0/24 + Require ip 62.77.132.0/22 + Require ip 62.77.144.0/21 Require ip 62.77.192.0/18 Require ip 62.80.64.0/24 - Require ip 62.80.66.0/26 - Require ip 62.80.66.128/28 - Require ip 62.80.67.96/27 - Require ip 62.80.72.0/26 + Require ip 62.80.66.0/23 + Require ip 62.80.68.0/22 + Require ip 62.80.72.0/21 + Require ip 62.80.82.0/23 + Require ip 62.80.85.48/28 + Require ip 62.80.85.64/26 + Require ip 62.80.86.0/24 + Require ip 62.80.89.0/24 + Require ip 62.80.90.0/23 Require ip 62.100.224.0/19 Require ip 62.112.192.0/19 + Require ip 62.115.102.32/28 Require ip 62.165.192.0/18 Require ip 62.185.113.128/26 Require ip 62.185.133.64/27 @@ -100,6 +112,7 @@ Require ip 62.186.78.0/24 Require ip 62.186.79.0/25 Require ip 62.201.64.0/18 + Require ip 77.74.204.0/22 Require ip 77.110.128.0/18 Require ip 77.111.64.0/18 Require ip 77.111.128.0/18 @@ -110,6 +123,7 @@ Require ip 78.24.64.0/21 Require ip 78.24.184.0/21 Require ip 78.24.205.48/28 + Require ip 78.31.236.0/22 Require ip 78.92.0.0/16 Require ip 78.108.16.0/20 Require ip 78.131.0.0/17 @@ -120,10 +134,7 @@ Require ip 79.122.0.0/17 Require ip 79.171.128.0/20 Require ip 79.172.192.0/18 - Require ip 80.64.64.0/21 - Require ip 80.64.72.0/22 - Require ip 80.64.76.0/23 - Require ip 80.64.78.0/24 + Require ip 80.64.64.0/20 Require ip 80.75.224.0/22 Require ip 80.75.228.0/23 Require ip 80.75.230.0/26 @@ -144,6 +155,7 @@ Require ip 80.85.48.0/20 Require ip 80.95.64.0/19 Require ip 80.98.0.0/15 + Require ip 80.157.237.176/28 Require ip 80.239.172.32/27 Require ip 80.239.222.128/27 Require ip 80.244.96.0/20 @@ -164,6 +176,7 @@ Require ip 82.131.128.0/17 Require ip 82.141.128.0/18 Require ip 82.144.160.0/19 + Require ip 82.146.12.0/24 Require ip 82.150.8.0/26 Require ip 82.150.8.96/28 Require ip 82.150.9.0/24 @@ -223,7 +236,6 @@ Require ip 84.233.170.0/24 Require ip 84.233.171.16/28 Require ip 84.233.171.96/27 - Require ip 84.233.171.192/27 Require ip 84.236.0.0/17 Require ip 85.25.231.0/26 Require ip 85.66.0.0/15 @@ -235,6 +247,7 @@ Require ip 85.238.64.0/19 Require ip 86.59.128.0/17 Require ip 86.101.0.0/16 + Require ip 86.106.122.0/23 Require ip 86.109.64.0/19 Require ip 87.97.0.0/17 Require ip 87.101.112.0/20 @@ -246,10 +259,12 @@ Require ip 88.151.96.0/21 Require ip 88.202.105.176/28 Require ip 88.202.109.176/28 - Require ip 88.209.128.0/17 - Require ip 88.210.150.128/25 + Require ip 88.209.192.0/19 + Require ip 88.209.224.0/20 + Require ip 88.209.248.0/21 Require ip 88.210.170.96/28 Require ip 89.21.125.0/24 + Require ip 89.43.132.0/22 Require ip 89.107.248.0/21 Require ip 89.132.0.0/14 Require ip 89.147.64.0/18 @@ -268,12 +283,7 @@ Require ip 91.104.0.0/16 Require ip 91.120.0.0/16 Require ip 91.135.112.0/20 - Require ip 91.137.128.0/18 - Require ip 91.137.192.0/19 - Require ip 91.137.224.0/20 - Require ip 91.137.240.0/21 - Require ip 91.137.248.0/22 - Require ip 91.137.252.0/24 + Require ip 91.137.128.0/17 Require ip 91.144.64.0/18 Require ip 91.146.128.0/18 Require ip 91.147.192.0/18 @@ -312,12 +322,10 @@ Require ip 91.230.188.0/24 Require ip 91.233.21.0/24 Require ip 92.43.200.0/21 - Require ip 92.52.192.0/20 - Require ip 92.52.212.0/22 - Require ip 92.52.216.0/21 - Require ip 92.52.224.0/19 + Require ip 92.52.192.0/18 Require ip 92.61.96.0/19 Require ip 92.63.240.0/20 + Require ip 92.235.64.0/19 Require ip 92.245.64.0/19 Require ip 92.249.128.0/17 Require ip 93.88.192.0/20 @@ -325,16 +333,12 @@ Require ip 93.92.56.0/21 Require ip 93.93.49.0/24 Require ip 93.93.52.0/24 - Require ip 93.94.107.16/28 - Require ip 93.94.109.16/28 Require ip 93.189.112.0/21 Require ip 93.190.0.0/21 Require ip 94.21.0.0/16 Require ip 94.27.128.0/17 Require ip 94.44.0.0/16 - Require ip 94.125.176.0/22 - Require ip 94.125.180.0/23 - Require ip 94.125.182.0/24 + Require ip 94.125.176.0/21 Require ip 94.125.248.0/21 Require ip 94.199.48.0/21 Require ip 94.199.176.0/21 @@ -350,6 +354,7 @@ Require ip 95.138.192.0/21 Require ip 95.140.32.0/20 Require ip 95.168.32.0/19 + Require ip 95.168.64.0/19 Require ip 95.171.64.0/19 Require ip 95.210.40.0/24 Require ip 109.61.0.0/17 @@ -357,10 +362,12 @@ Require ip 109.74.48.0/20 Require ip 109.105.0.0/19 Require ip 109.110.128.0/19 - Require ip 109.110.192.0/20 + Require ip 109.110.192.0/19 Require ip 109.199.32.0/19 Require ip 109.232.200.0/21 + Require ip 128.0.4.0/22 Require ip 130.43.192.0/18 + Require ip 130.93.192.0/18 Require ip 134.255.0.0/17 Require ip 145.236.0.0/19 Require ip 145.236.32.0/21 @@ -394,30 +401,39 @@ Require ip 151.252.30.240/28 Require ip 152.66.0.0/16 Require ip 157.181.0.0/16 + Require ip 158.175.124.192/28 + Require ip 158.176.90.144/28 + Require ip 158.177.64.112/28 + Require ip 158.177.88.16/28 + Require ip 158.177.92.208/28 + Require ip 158.177.97.208/28 + Require ip 158.177.128.16/28 Require ip 158.249.0.0/16 - Require ip 159.8.71.112/28 - Require ip 159.8.81.16/28 - Require ip 159.8.98.224/28 - Require ip 159.8.151.144/28 + Require ip 159.8.115.224/27 Require ip 159.8.168.208/28 Require ip 159.122.11.96/28 - Require ip 159.122.68.192/28 + Require ip 159.122.15.144/28 + Require ip 159.122.24.16/28 + Require ip 159.122.66.128/28 Require ip 159.122.83.144/28 - Require ip 159.122.91.144/28 - Require ip 159.122.95.80/28 - Require ip 159.122.95.192/28 + Require ip 159.122.86.96/28 + Require ip 159.122.86.144/28 Require ip 159.122.97.0/28 Require ip 159.122.98.16/28 Require ip 159.122.99.160/28 + Require ip 159.122.104.64/28 + Require ip 159.122.108.144/28 + Require ip 159.122.158.128/27 + Require ip 159.180.8.0/24 Require ip 160.114.0.0/16 - Require ip 161.202.1.208/28 - Require ip 161.202.2.208/28 - Require ip 161.202.10.0/28 - Require ip 161.202.10.32/28 - Require ip 168.1.14.96/28 - Require ip 169.53.31.112/28 - Require ip 169.53.39.96/28 + Require ip 168.1.207.176/28 + Require ip 169.46.130.16/28 + Require ip 169.50.22.160/27 + Require ip 169.50.38.64/28 + Require ip 169.50.177.96/27 Require ip 169.54.248.112/28 + Require ip 169.61.80.192/28 + Require ip 169.63.82.48/28 Require ip 171.19.0.0/16 Require ip 171.25.180.0/23 Require ip 171.31.0.0/16 @@ -449,7 +465,6 @@ Require ip 185.29.80.0/22 Require ip 185.33.52.0/22 Require ip 185.33.80.0/22 - Require ip 185.33.147.0/24 Require ip 185.38.124.0/22 Require ip 185.40.20.0/22 Require ip 185.40.136.0/22 @@ -469,14 +484,14 @@ Require ip 185.63.16.0/22 Require ip 185.63.44.0/22 Require ip 185.65.8.0/22 - Require ip 185.66.52.0/23 - Require ip 185.66.55.0/24 + Require ip 185.66.52.0/24 Require ip 185.68.72.0/22 Require ip 185.69.96.0/22 Require ip 185.71.104.0/22 Require ip 185.72.16.0/22 Require ip 185.74.21.0/24 - Require ip 185.74.22.0/23 + Require ip 185.74.22.0/25 + Require ip 185.74.23.0/24 Require ip 185.75.192.0/22 Require ip 185.79.92.0/22 Require ip 185.80.48.0/22 @@ -489,15 +504,94 @@ Require ip 185.91.184.0/22 Require ip 185.92.116.0/22 Require ip 185.93.64.0/22 - Require ip 185.94.98.0/24 + Require ip 185.94.190.0/24 Require ip 185.97.208.0/22 - Require ip 185.105.104.0/22 - Require ip 185.105.128.0/22 - Require ip 185.106.96.0/22 + Require ip 185.104.187.0/24 Require ip 185.106.112.0/22 Require ip 185.111.88.0/22 Require ip 185.111.208.0/22 Require ip 185.112.156.0/22 + Require ip 185.112.240.0/22 + Require ip 185.115.20.0/22 + Require ip 185.116.240.224/27 + Require ip 185.116.241.224/27 + Require ip 185.116.242.160/27 + Require ip 185.116.243.160/27 + Require ip 185.119.180.0/22 + Require ip 185.122.112.224/27 + Require ip 185.122.113.128/27 + Require ip 185.122.114.128/27 + Require ip 185.122.115.128/27 + Require ip 185.123.28.0/22 + Require ip 185.123.32.160/27 + Require ip 185.128.26.0/24 + Require ip 185.128.228.0/22 + Require ip 185.130.176.0/22 + Require ip 185.134.80.0/22 + Require ip 185.140.55.0/26 + Require ip 185.140.55.64/27 + Require ip 185.140.55.96/28 + Require ip 185.140.55.128/25 + Require ip 185.140.108.0/22 + Require ip 185.140.112.0/24 + Require ip 185.142.83.128/27 + Require ip 185.143.48.0/22 + Require ip 185.143.200.0/22 + Require ip 185.145.144.0/22 + Require ip 185.145.204.0/22 + Require ip 185.152.180.0/22 + Require ip 185.153.216.0/22 + Require ip 185.156.128.0/23 + Require ip 185.156.152.0/22 + Require ip 185.161.72.0/22 + Require ip 185.161.204.0/22 + Require ip 185.162.0.0/22 + Require ip 185.162.60.0/22 + Require ip 185.165.108.0/22 + Require ip 185.166.132.0/22 + Require ip 185.166.136.0/22 + Require ip 185.166.228.0/22 + Require ip 185.167.92.0/22 + Require ip 185.169.248.0/22 + Require ip 185.170.84.0/22 + Require ip 185.172.44.0/22 + Require ip 185.174.16.0/22 + Require ip 185.180.72.0/22 + Require ip 185.180.88.0/22 + Require ip 185.182.212.0/22 + Require ip 185.187.72.0/22 + Require ip 185.187.248.0/22 + Require ip 185.188.56.0/22 + Require ip 185.189.114.0/24 + Require ip 185.191.188.0/22 + Require ip 185.192.252.0/22 + Require ip 185.193.220.0/22 + Require ip 185.195.52.0/22 + Require ip 185.196.52.0/22 + Require ip 185.198.168.0/22 + Require ip 185.199.28.0/22 + Require ip 185.201.40.0/24 + Require ip 185.205.72.0/22 + Require ip 185.205.248.0/22 + Require ip 185.207.8.0/22 + Require ip 185.208.224.0/22 + Require ip 185.211.40.0/22 + Require ip 185.217.72.0/22 + Require ip 185.219.48.0/22 + Require ip 185.220.188.0/22 + Require ip 185.221.140.0/22 + Require ip 185.223.4.0/22 + Require ip 185.223.16.0/22 + Require ip 185.224.4.0/22 + Require ip 185.224.44.0/22 + Require ip 185.225.68.0/22 + Require ip 185.232.80.0/22 + Require ip 185.234.180.0/22 + Require ip 185.234.188.0/22 + Require ip 185.235.112.0/22 + Require ip 185.242.216.0/22 + Require ip 185.244.68.0/22 + Require ip 185.249.144.0/22 Require ip 188.6.0.0/17 Require ip 188.6.128.0/18 Require ip 188.6.192.0/19 @@ -547,6 +641,7 @@ Require ip 193.29.49.0/24 Require ip 193.30.164.0/24 Require ip 193.34.134.0/23 + Require ip 193.39.12.0/22 Require ip 193.42.222.0/24 Require ip 193.68.32.0/19 Require ip 193.91.64.0/19 @@ -577,13 +672,22 @@ Require ip 193.226.192.0/18 Require ip 193.227.196.0/22 Require ip 193.239.148.0/23 + Require ip 193.240.99.160/27 + Require ip 193.240.203.240/28 Require ip 194.0.164.0/24 Require ip 194.10.139.0/24 Require ip 194.29.185.0/24 Require ip 194.33.69.0/24 Require ip 194.33.184.0/24 + Require ip 194.36.124.0/22 + Require ip 194.37.88.0/22 Require ip 194.38.96.0/19 + Require ip 194.39.160.0/22 + Require ip 194.39.168.0/22 + Require ip 194.41.44.0/22 Require ip 194.50.101.0/24 + Require ip 194.59.24.0/22 + Require ip 194.71.130.0/24 Require ip 194.88.32.0/20 Require ip 194.88.48.0/24 Require ip 194.88.49.32/27 @@ -616,15 +720,16 @@ Require ip 194.246.102.0/24 Require ip 194.247.36.0/24 Require ip 195.5.177.0/24 + Require ip 195.12.232.0/26 Require ip 195.20.152.0/24 Require ip 195.21.6.0/24 + Require ip 195.21.7.16/28 Require ip 195.21.7.32/27 Require ip 195.38.96.0/19 Require ip 195.51.255.128/28 Require ip 195.56.0.0/16 Require ip 195.70.32.0/19 - Require ip 195.75.251.16/28 - Require ip 195.75.251.160/27 + Require ip 195.75.251.176/28 Require ip 195.75.251.192/28 Require ip 195.79.32.128/25 Require ip 195.79.33.192/27 @@ -643,12 +748,12 @@ Require ip 195.111.160.0/19 Require ip 195.111.192.0/18 Require ip 195.114.16.0/23 + Require ip 195.122.184.0/24 Require ip 195.128.232.0/23 Require ip 195.130.202.0/23 Require ip 195.144.20.0/24 Require ip 195.170.184.0/24 Require ip 195.184.0.0/19 - Require ip 195.184.138.128/26 Require ip 195.184.160.0/19 Require ip 195.191.97.0/24 Require ip 195.191.222.0/23 @@ -656,12 +761,8 @@ Require ip 195.199.0.0/16 Require ip 195.210.0.0/23 Require ip 195.212.142.0/24 - Require ip 195.213.38.128/27 - Require ip 195.213.72.96/28 - Require ip 195.213.140.160/27 - Require ip 195.213.236.0/24 - Require ip 195.213.249.0/24 Require ip 195.216.251.0/24 + Require ip 195.219.216.192/28 Require ip 195.228.0.0/24 Require ip 195.228.2.0/23 Require ip 195.228.4.0/22 @@ -677,8 +778,18 @@ Require ip 195.228.56.0/23 Require ip 195.228.58.0/24 Require ip 195.228.60.0/22 - Require ip 195.228.64.0/18 - Require ip 195.228.128.0/18 + Require ip 195.228.64.0/20 + Require ip 195.228.80.0/23 + Require ip 195.228.83.0/24 + Require ip 195.228.84.0/22 + Require ip 195.228.88.0/21 + Require ip 195.228.96.0/19 + Require ip 195.228.128.0/20 + Require ip 195.228.144.0/22 + Require ip 195.228.148.0/23 + Require ip 195.228.150.0/24 + Require ip 195.228.152.0/21 + Require ip 195.228.160.0/19 Require ip 195.228.192.0/20 Require ip 195.228.210.0/23 Require ip 195.228.212.0/22 @@ -688,10 +799,10 @@ Require ip 195.246.199.0/24 Require ip 195.248.95.0/24 Require ip 195.250.39.0/24 + Require ip 209.206.11.0/24 Require ip 212.16.128.0/19 Require ip 212.24.160.0/19 Require ip 212.40.64.0/18 - Require ip 212.48.190.0/24 Require ip 212.48.240.0/20 Require ip 212.51.64.0/18 Require ip 212.52.160.0/19 @@ -705,7 +816,18 @@ Require ip 212.92.20.0/22 Require ip 212.92.24.0/21 Require ip 212.96.32.0/19 - Require ip 212.105.224.0/19 + Require ip 212.105.224.0/24 + Require ip 212.105.225.0/27 + Require ip 212.105.225.32/28 + Require ip 212.105.225.64/26 + Require ip 212.105.225.128/25 + Require ip 212.105.226.0/25 + Require ip 212.105.226.160/27 + Require ip 212.105.226.192/26 + Require ip 212.105.227.0/24 + Require ip 212.105.228.0/22 + Require ip 212.105.232.0/21 + Require ip 212.105.240.0/20 Require ip 212.108.192.0/21 Require ip 212.108.200.0/22 Require ip 212.108.205.0/24 @@ -715,21 +837,21 @@ Require ip 212.162.20.128/25 Require ip 212.162.26.0/24 Require ip 212.162.49.192/26 - Require ip 212.223.20.64/28 Require ip 213.16.64.0/18 + Require ip 213.39.2.0/23 Require ip 213.46.166.0/24 Require ip 213.62.9.0/24 Require ip 213.62.230.0/24 Require ip 213.62.231.128/25 Require ip 213.134.0.0/19 + Require ip 213.137.170.160/27 + Require ip 213.137.170.224/28 Require ip 213.157.96.0/19 Require ip 213.163.0.0/18 Require ip 213.178.96.0/19 Require ip 213.181.192.0/19 Require ip 213.197.64.0/21 - Require ip 213.197.72.32/27 - Require ip 213.197.72.64/26 - Require ip 213.197.72.128/25 + Require ip 213.197.72.0/24 Require ip 213.197.73.16/28 Require ip 213.197.73.32/27 Require ip 213.197.73.128/28 @@ -775,4 +897,5 @@ Require ip 217.150.128.0/20 Require ip 217.173.32.0/20 Require ip 217.197.176.0/20 + Require ip 217.243.151.128/26 diff --git a/webserver/php-fpm.sh b/webserver/php-fpm.sh index 4c296f70..b63903ac 100755 --- a/webserver/php-fpm.sh +++ b/webserver/php-fpm.sh @@ -21,8 +21,16 @@ PHP_TZ="UTC" # @nonDebian Pkg_install_quiet php${PHP}-fpm libpcre3 \ - php${PHP}-curl php${PHP}-gd php${PHP}-intl php${PHP}-mbstring php${PHP}-mysql \ - php${PHP}-xml php${PHP}-sqlite3 # Not for WP + php${PHP}-curl php${PHP}-gd php${PHP}-intl php${PHP}-mysql \ + php${PHP}-sqlite3 # Not for WP + +# Not available in PHP5 +if [ -n "$(dpkg-query --showformat="\${Status}" --show "php${PHP}-mbstring" 2>/dev/null)" ]; then + Pkg_install_quiet php${PHP}-mbstring +fi +if [ -n "$(dpkg-query --showformat="\${Status}" --show "php${PHP}-xml" 2>/dev/null)" ]; then + Pkg_install_quiet php${PHP}-xml +fi # Shim directrory for PHP 5.6 if dpkg --compare-versions "$PHP" lt 7.0 && [ ! -d /etc/php ]; then