日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

利用tuning-primer脚本优化MySQL数据库

發(fā)布時(shí)間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用tuning-primer脚本优化MySQL数据库 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

腳本下載網(wǎng)址: ?http://www.day32.com/MySQL/tuning-primer.sh

?

?

#!/bin/sh

# vim: ts=8
#########################################################################
# #
# 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. #
# #
#########################################################################
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'


cecho ()

## -- Function to easliy print colored text -- ##

# Color-echo.
# Argument $1 = message
# Argument $2 = color
{
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"

return
}


cechon ()

## -- Function to easliy print colored text -- ##

# Color-echo.
# Argument $1 = message
# Argument $2 = color
{
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"

return
}


print_banner () {

## -- 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_plesk_passwords () {

## -- Check for the existance of plesk and login using it's credentials -- ##

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
}

check_mysql_login () {

## -- Test for running mysql -- ##

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
}

second_login_failed () {

## -- create a ~/.my.cnf and exit when all else fails -- ##

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
}

find_webmin_passwords () {

## -- populate the .my.cnf file using values harvested from Webmin -- ##

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 () {

# -- Divide two intigers -- #

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)
}

human_readable () {

#########################################################################
# #
# 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] #
# #
#########################################################################

## 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
}

human_readable_time () {

########################################################################
# #
# Function to produce 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"
}

check_mysql_version () {

## -- Print Version Info -- ##

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


}

post_uptime_warning () {

#########################################################################
# #
# 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. #
# #
#########################################################################

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
}

check_slow_queries () {

## -- 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

}

check_binary_log () {

## -- 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
}

check_used_connections () {

## -- 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
}

check_threads() {

## -- Worker 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
}

check_key_buffer_size () {

## -- 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
}

check_query_cache () {

## -- 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

}

check_sort_operations () {

## -- 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
}

check_join_operations () {

## -- Joins -- ##

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

# XXX Add better tests for join_buffer_size pending mysql bug #15088 XXX #
}

check_tmp_tables () {

## -- Temp 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
}

check_open_files () {

## -- Open Files Limit -- ##
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

?

}

check_table_cache () {

## -- 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
}

check_table_locking () {

## -- 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
}

check_table_scans () {

## -- 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
}


check_innodb_status () {

## -- InnoDB -- ##

## 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_used () {

## -- Total Memory Usage -- ##
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 [<none>] : " 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

轉(zhuǎn)載于:https://www.cnblogs.com/han1094/p/6973597.html

總結(jié)

以上是生活随笔為你收集整理的利用tuning-primer脚本优化MySQL数据库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

在线午夜| 中文网丁香综合网 | 精品国产aⅴ麻豆 | 欧美性大战久久久久 | 97国产精品免费 | 99在线视频网站 | 午夜视频在线观看一区二区三区 | 成人久久国产 | 免费亚洲黄色 | 97超碰人人模人人人爽人人爱 | 中文字幕av最新更新 | av在线免费在线观看 | 偷拍视频一区 | 国产视频资源在线观看 | 99精品国产免费久久 | 亚洲精品国内 | 久久婷婷激情 | 免费在线观看一级片 | 日本久久精 | 久草在线手机视频 | 久草网在线观看 | 丁香综合 | 蜜臀av一区二区 | 亚洲精选久久 | 国产色婷婷精品综合在线手机播放 | 五月激情av| 国产成人一区二区在线观看 | 91精品在线免费观看视频 | 国产区高清在线 | 成人午夜电影久久影院 | 国产精品中文字幕在线播放 | 国产黄色片在线免费观看 | 精品久久国产一区 | 亚洲黄色免费在线看 | 一区二区三区在线视频观看58 | 一级一级一片免费 | 亚洲乱码精品久久久久 | 日韩二区三区在线 | 国产亚洲精品成人 | 国产破处视频在线播放 | 黄色亚洲大片免费在线观看 | 丁香六月综合网 | 日韩免费 | 免费亚洲电影 | 日日夜夜精品免费视频 | 国产伦理精品一区二区 | 又黄又爽又色无遮挡免费 | 人人爽人人射 | 国产免费观看av | 国产福利精品在线观看 | 精品在线观 | 国产群p视频| 亚洲影视九九影院在线观看 | 久久在视频 | 久久久久国产精品免费网站 | 天天天天爱天天躁 | 午夜色性片 | 精品国模一区二区 | 中文字幕一区二区三区在线视频 | 人九九精品 | 免费视频久久久久 | 久久人人97超碰国产公开结果 | 成人av直播 | 久久久999精品视频 国产美女免费观看 | 深夜成人av| 一区二区精品久久 | 国产一区在线不卡 | 日本在线观看视频一区 | 亚洲精品视频在线观看免费视频 | 国产成人在线看 | 国产97视频在线 | av在线不卡观看 | 九九爱免费视频 | 成人精品亚洲 | 啪啪小视频网站 | 91插插插免费视频 | 亚洲成人精品久久 | 久草视频资源 | 激情久久五月 | 日韩三级中文字幕 | 亚洲一区二区观看 | 福利视频入口 | 91色网址| 久久九九久久 | 亚洲精品欧美精品 | 99re国产视频| 国产91精品一区二区绿帽 | 亚洲美女免费视频 | 国产无套精品久久久久久 | 99综合久久 | 国产伦理久久精品久久久久_ | 亚洲免费av观看 | 亚洲黄色在线 | 亚洲精品字幕在线观看 | 久久国产精品视频 | 婷婷av在线 | 香蕉影院在线播放 | 中文字幕在线第一页 | 免费日韩 精品中文字幕视频在线 | 国模一区二区三区四区 | 菠萝菠萝蜜在线播放 | 久久久久 免费视频 | 免费在线观看成年人视频 | 一色屋精品视频在线观看 | 日韩一级成人av | 三三级黄色片之日韩 | 中文字幕免费高清 | 一级性视频 | 日韩a欧美 | 久久中国精品 | 久精品在线观看 | 日本少妇视频 | 亚洲a色 | 97超碰资源 | 伊人超碰在线 | 亚洲欧洲一区二区在线观看 | 韩日精品在线 | 免费视频 你懂的 | 国内精品视频免费 | 最近2019中文免费高清视频观看www99 | 久久综合久久综合这里只有精品 | 在线观看aaa| 9999亚洲 | 午夜在线观看一区 | 久久免费av | 蜜桃视频精品 | 97超碰资源网 | 久久久www成人免费精品张筱雨 | 久久久久久久久久久免费av | 欧美激情综合色综合啪啪五月 | 午夜天使| 91日韩国产| 麻豆视频在线播放 | 在线日韩中文字幕 | 国产精品视频99 | 97av在线| 国产精品小视频网站 | 伊人亚洲精品 | 四月婷婷在线观看 | 91片网| 国产精品伦一区二区三区视频 | 一区二区三区四区免费视频 | 色夜影院| 超碰97在线资源 | 99在线视频网站 | 麻豆成人网 | 精品久久国产一区 | 三三级黄色片之日韩 | 亚洲视频综合 | 精品成人在线 | 超碰资源在线 | 日韩精品一卡 | 黄色一级大片免费看 | 天天爱天天干天天爽 | 亚洲黄色免费在线看 | 天堂在线一区二区 | 国产高清福利在线 | 日韩在线观看第一页 | 色干综合 | 99视频一区二区 | 超碰精品在线 | 精品国产自在精品国产精野外直播 | 国产亚洲婷婷免费 | www.香蕉视频 | 500部大龄熟乱视频使用方法 | 亚洲春色综合另类校园电影 | 精品久久五月天 | 91在线最新 | 91热| 久久99精品国产99久久 | 久草电影在线 | 久久男女视频 | 天天插天天爽 | 日韩在线视频线视频免费网站 | 成人久久18免费网站 | 中文字幕免费观看全部电影 | 久草视频免费在线观看 | 久久久久久久久久免费视频 | www.午夜色.com| 久久玖 | 亚洲一区二区三区四区在线视频 | 国产精品ⅴa有声小说 | 人人干人人艹 | 久久久91精品国产一区二区三区 | 天天色 天天 | 夜夜操天天| 国产精品视频全国免费观看 | 婷婷激情站 | 特级毛片网 | 四虎在线观看视频 | 久久成人免费视频 | 成人羞羞视频在线观看免费 | 国产成人综合在线观看 | 永久免费毛片在线观看 | 最新av电影网址 | 亚洲精品一区二区三区高潮 | 欧美成人在线免费观看 | 久久99精品久久久久婷婷 | 精品久久一区二区三区 | 亚洲欧美视频在线播放 | 最近免费中文字幕mv在线视频3 | av中文字幕av | 国产aa免费视频 | 西西www4444大胆视频 | www色,com| 91精品视频一区 | 欧美亚洲xxx | 国产精品电影一区 | 天天操天天谢 | 中文字幕在线观看视频免费 | 精品久久久久久久久久国产 | 亚洲精品免费观看视频 | 亚洲精品综合一二三区在线观看 | 婷婷综合视频 | 婷婷九月丁香 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 国产手机在线播放 | 亚州精品一二三区 | 成人黄色av免费在线观看 | 国产精品国产亚洲精品看不卡 | 婷婷精品视频 | 国产精品女同一区二区三区久久夜 | 啪嗒啪嗒免费观看完整版 | 精品国产理论片 | 中国一级片视频 | 91视频免费网址 | 激情偷乱人伦小说视频在线观看 | 久久婷亚洲五月一区天天躁 | 日韩艹 | 国产专区一 | 亚洲精品在线观看网站 | 91久久国产综合精品女同国语 | 国产黄大片在线观看 | 亚洲午夜精品一区 | a在线一区 | 日批在线看 | 免费高清在线观看电视网站 | av中文字幕第一页 | bbb搡bbb爽爽爽 | 97在线影视 | 久久99热这里只有精品国产 | 四川妇女搡bbbb搡bbbb搡 | 色综合久久久网 | 天堂在线视频中文网 | 三级av在线免费观看 | 久久精品视频播放 | 美女视频黄免费网站 | 国产一区二区中文字幕 | 久久久精品国产一区二区 | 人人干人人爽 | 国产精品黄色 | 国产网红在线观看 | 久久a级片 | 国产黄网在线 | 手机看片久久 | 一区二区视频在线免费观看 | 国产一区二区三区黄 | av观看免费在线 | 五月婷婷在线视频观看 | 亚洲精品中文在线资源 | 成人av高清在线观看 | 久久99精品久久久久久三级 | 99r在线精品 | 夜夜爽天天爽 | 色综合久久久久久中文网 | 国产亚洲视频中文字幕视频 | 成人网页在线免费观看 | 婷色在线 | 免费看一级特黄a大片 | 中文字幕在线观看播放 | 国产女人18毛片水真多18精品 | 五月婷婷丁香激情 | av一级久久 | 色中文字幕在线观看 | 国产一区二区在线免费播放 | a黄色一级片 | 国产欧美日韩精品一区二区免费 | 黄色片网站大全 | 九九九电影免费看 | 毛片无卡免费无播放器 | 日本久久久久久科技有限公司 | 亚洲影音先锋 | 日韩精品视频一二三 | 一区二区精品视频 | 久久国产区 | a级国产乱理论片在线观看 伊人宗合网 | 伊人天堂av| 日韩女同一区二区三区在线观看 | 一区二区三区四区五区在线视频 | 手机av在线网站 | 超碰在线人人爱 | 在线а√天堂中文官网 | 久久精品牌麻豆国产大山 | 91成人黄色| 成年人在线免费看 | 天天综合网 天天 | 亚洲成人精品影院 | 西西444www大胆无视频 | 青青久视频 | 亚洲妇女av | 五月网婷婷 | 91麻豆网| 欧美a在线看 | 久久9999久久免费精品国产 | 久久精品视频网址 | 色吧久久 | 在线激情av电影 | 视频一区二区三区视频 | 久久久久久综合 | 国产精品视频99 | 久久久久久久综合色一本 | 在线导航av | 国产成人久久久77777 | 99精品国产一区二区三区麻豆 | 久久精品韩国 | 国产五月色婷婷六月丁香视频 | 久久黄色网页 | 狠狠色丁香久久婷婷综 | 不卡中文字幕在线 | 国产精品久久久久久一二三四五 | 黄网站污| 日韩欧美一区二区在线播放 | 精品免费 | 成人网色 | 欧美极品少妇xbxb性爽爽视频 | 激情影音先锋 | 欧美亚洲一区二区在线 | 永久中文字幕 | 成年人国产在线观看 | 亚洲日本黄色 | 国产精品毛片久久久久久久久久99999999 | 亚洲成人xxx | 一区二区精品在线观看 | 国产欧美在线一区二区三区 | 91久草视频 | 国产一级片播放 | 在线免费观看av网站 | 亚洲在线资源 | 色综合久久99 | 欧美日韩久久一区 | 国产精品九九久久99视频 | 国产视频一区二区在线观看 | 亚洲精品在线观看不卡 | 国产99久久九九精品 | 美女黄久久 | 日韩在线观看你懂得 | 久久男人视频 | 视频成人| 国产精品一区二区吃奶在线观看 | 国产精品爽爽久久久久久蜜臀 | 天天天天天天天天操 | 三级在线视频观看 | 国产精品久久久久久久久久不蜜月 | 狠狠色伊人亚洲综合成人 | 亚洲精品婷婷 | 免费在线观看成人av | 国产成人黄色片 | 色偷偷av男人天堂 | 欧美国产日韩一区二区三区 | 欧美日韩伦理在线 | 狠狠色狠狠色 | 国产精品中文字幕av | 欧美日韩国产一区二 | 91精品国产电影 | 中文字幕在线观看视频免费 | 免费观看视频黄 | 日韩av高清 | 2019中文在线观看 | 日日干天天干 | 福利二区视频 | 免费在线看成人av | 91免费版在线观看 | a v在线视频 | 天天爱天天操天天射 | 免费日韩在线 | 久久a级片| av中文在线影视 | 精品国产久 | 一级黄色片在线观看 | 国产在线看| 日韩大片在线看 | 97爱 | 欧美在线视频一区二区三区 | 国产精品久久久一区二区三区网站 | 亚州av网站 | 日韩精品视频免费看 | 天天看天天干 | 日韩av免费观看网站 | 成人羞羞视频在线观看免费 | 国产精品久久久影视 | 中文字幕一区二区三区在线观看 | 成人黄色电影在线 | 国产精品综合久久久 | 国产精品24小时在线观看 | 三三级黄色片之日韩 | 香蕉精品在线观看 | 欧美日韩一二三四区 | 国产明星视频三级a三级点| 黄色片软件网站 | 天天操网址 | 超碰人人草人人 | 女人魂免费观看 | 亚洲在线看 | 久久夜夜操 | 国产又粗又猛又黄又爽视频 | 永久免费在线 | 久久人人爽人人爽人人片 | 特黄特色特刺激视频免费播放 | 免费看一级特黄a大片 | 超级碰碰碰碰 | 欧美一区二区伦理片 | 午夜三级在线 | 狠狠干狠狠插 | 狠狠色噜噜狠狠 | av直接看 | 国产人成在线观看 | 九九视频一区 | 国产视频综合在线 | 亚洲热视频 | 中文在线字幕观看电影 | 99久久日韩精品免费热麻豆美女 | 91视频久久久久 | 最近中文字幕视频完整版 | 亚洲视频www | 亚洲黄色一级大片 | 婷婷激情久久 | 亚洲91精品在线观看 | 免费观看全黄做爰大片国产 | 色婷婷啪啪免费在线电影观看 | 久草在线视频免费资源观看 | 久久综合久久综合九色 | 欧美精品乱码久久久久久 | 婷婷六月天天 | 公开超碰在线 | 欧美日韩国产一二 | 国产精品男女啪啪 | 久久综合影音 | 日日天天av | 一区二区三区在线免费观看视频 | 99精品久久精品一区二区 | 丁香av在线 | 麻花传媒mv免费观看 | 91丨九色丨国产丨porny精品 | 四虎在线影视 | 久久伊99综合婷婷久久伊 | 在线 国产 日韩 | 免费国产在线精品 | 在线免费看黄色 | 亚洲精品美女免费 | av电影中文| 天天综合网入口 | 日韩在线视频国产 | 国内精品久久久久久久影视简单 | 中文字幕91在线 | 亚洲电影图片小说 | 欧美日韩高清一区二区三区 | 麻豆精品91 | 中文在线a∨在线 | 精品国产一区二区三区四区vr | 精品视频久久久久久 | 中文字幕日本特黄aa毛片 | 亚洲热视频| 激情 一区二区 | 成人免费电影 | 欧美在线观看视频免费 | 久久艹国产视频 | 久草视频在线资源站 | 日韩午夜电影 | 日本激情视频中文字幕 | 国产不卡在线视频 | 999毛片| www最近高清中文国语在线观看 | 一本到视频在线观看 | 又黄又爽又色无遮挡免费 | 日韩在线视频线视频免费网站 | 九九久久久久久久久激情 | 亚洲激情综合网 | 日韩欧美在线观看一区二区三区 | 精品亚洲国产视频 | 成人影片在线播放 | 久久一区国产 | 国产91精品欧美 | 婷婷精品国产欧美精品亚洲人人爽 | 美女久久久久久久久久 | 97操碰| 国产精品 日韩 欧美 | 国产一级二级在线 | 亚洲jizzjizz日本少妇 | 中文字幕国内精品 | 天天色天天干天天 | 成人av亚洲| www最近高清中文国语在线观看 | 欧洲在线免费视频 | 国产999精品久久久久久麻豆 | 99国产精品久久久久老师 | 久久精品导航 | 婷婷久久精品 | 国产精品乱码一区二区视频 | 国产在线观看国语版免费 | 日本中文字幕一二区观 | av中文字幕免费在线观看 | 在线观看色网 | 成人在线观看免费视频 | 免费看一级特黄a大片 | 在线中文字幕播放 | 国产无区一区二区三麻豆 | 日韩免费三级 | 久久九九久久精品 | 亚洲国产婷婷 | 亚洲天天综合 | 欧美在线a视频 | 激情久久久久久久久久久久久久久久 | 中文在线中文资源 | 久久午夜影视 | 精品国产一区二区三区av性色 | 毛片区 | 日韩视频欧美视频 | 国偷自产视频一区二区久 | 二区三区在线观看 | 国产精品久久久久一区二区三区 | 国产资源网站 | 久久精品中文字幕一区二区三区 | 91中文字幕网 | 国产视频1 | 91网页版在线观看 | 激情五月播播久久久精品 | 亚洲欧美在线观看视频 | 韩国在线一区二区 | 日韩毛片久久久 | 日韩欧美国产精品 | 日本久久久久 | 国产成人精品午夜在线播放 | 色干干 | 国产91在线 | 美洲 | 亚洲视频999| 午夜精品久久久久久久99婷婷 | 婷婷色五 | 超碰999| 手机看片 | 久久久精品视频网站 | 久久精品最新 | 九九热有精品 | 亚洲一区美女视频在线观看免费 | 色网av | 国产在线一区二区三区播放 | 日韩欧美视频在线免费观看 | 亚洲五月婷 | 蜜臀久久99精品久久久无需会员 | 欧美成人tv | 中文字幕在线视频第一页 | 人人干干人人 | 国产麻豆果冻传媒在线观看 | 久久99免费观看 | 日韩av片无码一区二区不卡电影 | 日本精品视频在线观看 | 黄色小说免费观看 | 久久狠狠婷婷 | 99视频99 | 国产精品久久久久久久久久久久久 | 欧美久久久久久久久中文字幕 | 青青五月天 | 国产网站在线免费观看 | 免费在线国产 | www.五月天色 | 日本特黄一级片 | 色播五月激情五月 | 美女久久精品 | 欧美一区二区精美视频 | 色综合亚洲精品激情狠狠 | 国产护士hd高朝护士1 | 成人黄色av免费在线观看 | 婷婷国产精品 | 99精品国产一区二区三区麻豆 | 日韩av不卡播放 | 在线av资源| 国产麻豆视频网站 | 国模精品一区二区三区 | 亚洲精品视频在线观看视频 | 国产福利午夜 | 久久再线视频 | 91一区二区三区久久久久国产乱 | 特级毛片爽www免费版 | 久草在线资源网 | 国产123区在线观看 国产精品麻豆91 | 四虎国产精品成人免费4hu | 日本久久久久 | www.888av | 在线观看中文字幕一区 | 天天色天天综合网 | 美腿丝袜av| 日韩av在线小说 | 激情综合色综合久久 | 婷婷综合网 | 久久精品电影院 | 国产黄色高清 | 91夫妻视频 | 欧美另类高潮 | 91片黄在线观看 | 久久婷婷一区二区三区 | 丁香在线视频 | 91正在播放 | 久久视频在线免费观看 | 五月婷婷中文字幕 | 日韩视频免费看 | 久草97| 亚洲一区精品二人人爽久久 | 亚洲 欧美 日韩 综合 | 97天天干| 久草资源在线观看 | 亚洲精品乱码久久久久久 | 久久国产精品一国产精品 | av3级在线 | 九九热精品视频在线观看 | 午夜少妇| 麻豆传媒精品 | 亚洲理论片在线观看 | 9999激情| 黄色软件在线观看免费 | 国产91粉嫩白浆在线观看 | 国产高清视频在线免费观看 | 日本在线观看中文字幕无线观看 | 国产伦理久久精品久久久久_ | 午夜免费电影院 | 懂色av一区二区三区蜜臀 | 欧美性色网站 | 天天色婷婷 | 99精品在线视频观看 | 久久中文字幕视频 | 在线精品观看 | 成人中心免费视频 | 很黄很污的视频网站 | 这里只有精品视频在线 | 亚洲精品人人 | 国产精品永久在线 | 国产在线视频一区 | 欧美激情h| 天天摸夜夜操 | 亚洲人成在线观看 | 国产一级不卡毛片 | 免费激情网 | 夜夜婷婷| 亚洲成人免费在线观看 | 日本黄色免费在线观看 | 国产在线精品一区二区 | 99在线热播精品免费99热 | 亚洲精品视频在线观看免费视频 | 亚洲乱码中文字幕综合 | 日韩免费播放 | 国产 色| 久久免费播放视频 | 亚洲一区二区麻豆 | 中文字幕av免费 | 日韩在线视频线视频免费网站 | 亚洲精品麻豆视频 | 成人h电影 | 欧美视频在线二区 | 中文字幕 在线 一 二 | 日本在线中文 | 嫩草91影院 | 国产永久免费 | 欧亚日韩精品一区二区在线 | 免费在线观看一级片 | 欧美a级一区二区 | 黄色精品视频 | 中文字幕一区二区在线观看 | 夜色资源站国产www在线视频 | 日日夜夜草 | 久草电影在线观看 | 最新日本中文字幕 | 久久久久女人精品毛片 | 久草在线综合 | 波多野结衣电影一区 | 97碰视频| 一区二区精品在线视频 | 国产在线观看免费观看 | 射射射av| www.久久免费| 日韩视频中文字幕在线观看 | 九九免费视频 | 在线观看视频国产一区 | 91中文字幕在线观看 | 亚洲高清久久久 | 91麻豆国产 | 亚洲人人射| 亚洲一区动漫 | 亚洲婷婷伊人 | 国产一区免费在线观看 | 狠狠狠色丁香综合久久天下网 | 亚洲三级精品 | 国产精品男女啪啪 | 国产免费三级在线观看 | 亚洲最大成人网4388xx | 91麻豆精品国产午夜天堂 | 久久a国产 | 精品视频不卡 | 日本公妇在线观看高清 | 婷婷中文在线 | 99久久久国产精品美女 | 亚洲精品综合欧美二区变态 | www.com久久 | 中文字幕乱码一区二区 | av电影不卡在线 | 狠狠色丁香婷婷综合 | 天天天操天天天干 | 久久高清国产视频 | 亚洲日韩中文字幕在线播放 | 一区二区三区免费在线观看视频 | 欧美午夜视频在线 | 国产精品99精品久久免费 | 欧美大片aaa| 91香蕉视频720p | 日韩xxxxxxxxx | 最新国产一区二区三区 | 免费视频一区二区 | 综合网欧美 | 中文字幕一区二区三区乱码不卡 | 国产特级毛片aaaaaa高清 | 极品嫩模被强到高潮呻吟91 | 国产日韩中文字幕在线 | 成人羞羞视频在线观看免费 | 国产高清av免费在线观看 | 日韩有码网站 | 亚洲精品乱码久久久久久蜜桃91 | 国产精品一区久久久久 | 中文字幕视频一区 | 美女在线免费观看视频 | 国内揄拍国内精品 | 在线亚洲午夜片av大片 | 国产一级黄色电影 | 日韩欧美精品一区二区三区经典 | 美女网站在线 | 成人小视频在线 | 片网站 | 国产 中文 日韩 欧美 | 久久理伦片 | 激情视频亚洲 | 97精品国产91久久久久久久 | 欧美性另类 | 999视频网站 | 亚洲综合色婷婷 | 国产九色91 | 免费色视频 | 久久视频免费看 | 婷婷去俺也去六月色 | 一区二区三区四区五区六区 | 草在线 | 在线观看黄色 | 日韩免费大片 | 久久精品久久久久 | 天堂在线一区二区 | 在线综合 亚洲 欧美在线视频 | 国产做aⅴ在线视频播放 | 午夜精品久久久 | 亚洲精品视频免费观看 | 色偷偷男人的天堂av | 国产一级视屏 | 一区在线观看 | 亚洲电影av在线 | 欧美激情va永久在线播放 | 六月天综合网 | 免费久久久 | 97国产大学生情侣白嫩酒店 | 狠狠色丁香婷婷综合基地 | 精品91| 欧美日韩伦理一区 | 国产精品一区二区精品视频免费看 | 高清国产午夜精品久久久久久 | 成人久久电影 | 黄色亚洲片 | 91在线精品一区二区 | 久久免费在线视频 | 韩日精品在线 | 国产成人精品一区二区在线 | 国产成人精品一区二区三区在线观看 | 国产精品欧美在线 | 国产精品igao视频网入口 | 五月天久久精品 | 欧美一区二区在线免费看 | 99热在线看| 美女视频黄免费 | 亚洲另类视频 | 久久国产精品久久精品 | 亚洲综合成人av | 黄色在线成人 | 久久精品2 | 色噜噜日韩精品欧美一区二区 | 91在线视频观看 | 91视频在线免费下载 | 亚洲综合精品视频 | 高潮毛片无遮挡高清免费 | 亚洲九九九在线观看 | 色婷婷综合久久久 | 在线直播av| 日本中文一区二区 | 国产精品门事件 | 激情综合五月天 | 久草亚洲视频 | 91精品对白一区国产伦 | 成人在线播放免费观看 | 五月激情久久久 | 欧美日韩性视频在线 | 欧美日韩免费一区 | 国产真实精品久久二三区 | 精品久久免费看 | 国产在线高清精品 | 国产精品原创av片国产免费 | 久久综合射 | 一区二区三区免费播放 | 麻豆精品在线 | 婷婷日 | 婷婷色网| 国产精品自拍在线 | 精品在线视频一区二区三区 | 国产高清视频 | 伊人导航 | 国产香蕉97碰碰碰视频在线观看 | 久人人 | 91在线看视频免费 | 日日夜夜免费精品视频 | 91精品国产成人www | 男女啪啪网站 | 在线看成人 | 日本3级在线观看 | 国产.精品.日韩.另类.中文.在线.播放 | 97精品视频在线 | 成人一级免费视频 | 久久成年人视频 | 在线午夜av| 国产黄色视 | 日批网站在线观看 | 国产玖玖在线 | 亚洲成人黄 | 激情五月综合网 | 91亚洲精品久久久 | 婷婷网站天天婷婷网站 | av一区二区在线观看中文字幕 | 中文字幕精品视频 | 五月天综合色激情 | 亚洲国产精品va在线看 | 国产一区二区三区黄 | 丁香综合激情 | 亚洲一区天堂 | 亚洲九九九在线观看 | 国产精品美女在线 | 久久99久久99久久 | 日韩精品aaa | 又黄又刺激的网站 | 91av在线不卡 | 在线观看视频在线观看 | 久久黄色影院 | 成人观看 | 亚洲精品中文字幕在线观看 | 九九视频免费在线观看 | 久久久久久久久久网站 | 美国三级黄色大片 | 亚洲成人精品久久久 | 激情丁香久久 | 91在线视频在线 | 精品高清美女精品国产区 | 欧美a级片免费看 | 欧美久久久久久久久中文字幕 | 狠狠操狠狠插 | 国产极品尤物在线 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 日韩久久片 | 久久国产精品一区二区三区 | 亚洲国产美女久久久久 | 久久婷婷久久 | 精品成人a区在线观看 | 中文视频在线播放 | 国产免费资源 | 国产一区欧美一区 | av成人在线看| 欧美巨大 | 久久综合九色九九 | 天天综合网在线 | 国产精品久久久久久影院 | 黄色一区三区 | 午夜久草 | 久精品在线观看 | 午夜色大片在线观看 | 欧美一二三区在线播放 | 99久热在线精品视频成人一区 | 一区二区中文字幕在线观看 | 亚洲精品中文字幕视频 | 黄色成人影视 | 在线观看网站你懂的 | 亚洲综合色视频在线观看 | 久久狠狠婷婷 | 日日爽视频 | 国产片免费在线观看视频 | 在线免费观看麻豆 | 亚洲一级免费电影 | 成人黄色电影视频 | 免费中午字幕无吗 | 日本中文不卡 | 亚洲视频免费在线观看 | 欧美黑人巨大xxxxx | 天堂av在线免费观看 | 日韩精品视频网站 | 久久国产色 | 国产精品久久久久一区二区国产 | 婷婷去俺也去六月色 | 激情婷婷色 | 日日干av | 丝袜美腿亚洲综合 | 三级动态视频在线观看 | 在线天堂中文www视软件 | 国产伦精品一区二区三区四区视频 | 亚洲精品在线观看av | 国产精品毛片一区二区三区 | 久久精品欧美日韩精品 | 国产精品免费久久久 | 欧美日韩一级久久久久久免费看 | 激情久久久久久久久久久久久久久久 | 国产精品综合久久久 | 国产黄在线看 | 成人av一区二区兰花在线播放 | 在线免费高清一区二区三区 | 国语自产偷拍精品视频偷 | 激情五月色播五月 | 免费黄色网址网站 | 国产亚洲午夜高清国产拍精品 | 午夜在线资源 | 国产中文字幕在线看 | 中文字幕在线观看一区二区三区 | 91成人精品一区在线播放69 | 一级黄色片在线观看 | 亚洲黄色免费 | 88av色| 亚洲国产成人精品在线 | 久久xx视频 | 久久精品视频国产 | 99热精品国产一区二区在线观看 | 亚洲高清91 | 成人在线视频你懂的 | 日韩综合视频在线观看 | 欧洲在线免费视频 | 人人超碰免费 | 日韩,精品电影 | av中文字幕在线看 | 久久av免费| 成人免费网视频 | 亚洲精品国偷拍自产在线观看蜜桃 | 五月激情婷婷丁香 | 日韩在线视频线视频免费网站 | 日本一区二区三区免费观看 | 国产亚洲精品久久网站 | 久久精品视频网站 | 亚洲婷久久 | 久久免费观看视频 | 精品在线二区 | 国产美女视频网站 | 中文字幕在线观看完整 | 国产999精品久久久久久麻豆 | 激情网婷婷| 中文字幕国产视频 | 91麻豆精品国产自产在线 | 国产精品初高中精品久久 | av福利网址导航 | 91探花在线视频 | 91精品网站在线观看 | 久久久18 | 亚洲丁香久久久 | 欧美日本在线观看视频 | 国产亚洲视频系列 | 久久人人爽人人爽人人片 | 日韩特黄一级欧美毛片特黄 | av在线短片| 久久久久久久久久电影 | 97人人澡人人添人人爽超碰 | 久久99在线观看 | 欧美日韩在线视频免费 | 国产免费久久 | 国产成人精品一区一区一区 | 国产精品v a免费视频 | 亚洲精品美女久久 | 日韩欧美网址 | 精品91久久久久 | 婷婷新五月| 欧美孕妇与黑人孕交 | 天天爱天天色 | 在线观看视频精品 | 黄色毛片视频免费观看中文 | 免费成人在线电影 | 夜夜夜精品| 伊人色综合久久天天网 | 国产h片在线观看 | 久久国产一区二区三区 | 91传媒在线播放 | 精品久久久一区二区 | 婷婷色在线资源 | 久久精品1区2区 | 九九免费在线观看 | 国产成视频在线观看 | 久青草电影 | 国产91在线观看 | 一级α片 |