mysql: script "mysql-queries-killer.sh" to kill MySQL queries
This commit is contained in:
parent
73f55a42fa
commit
e45ee59801
|
@ -19,6 +19,7 @@ The **patch** part changes incrementally at each release.
|
||||||
* listupgrade: crontab is configurable
|
* listupgrade: crontab is configurable
|
||||||
* mongodb: create munin plugins directory if missing
|
* mongodb: create munin plugins directory if missing
|
||||||
* mysql: script "mysql_connections" to display a compact list of connections
|
* mysql: script "mysql_connections" to display a compact list of connections
|
||||||
|
* mysql: script "mysql-queries-killer.sh" to kill MySQL queries
|
||||||
* nagios-nrpe + evolinux-users: new checks for bkctld
|
* nagios-nrpe + evolinux-users: new checks for bkctld
|
||||||
* redis: instance service for Debian 11
|
* redis: instance service for Debian 11
|
||||||
|
|
||||||
|
|
168
mysql/files/mysql-queries-killer.sh
Normal file
168
mysql/files/mysql-queries-killer.sh
Normal file
|
@ -0,0 +1,168 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
VERSION="21.07.1"
|
||||||
|
|
||||||
|
show_version() {
|
||||||
|
cat <<END
|
||||||
|
mysql-queries-killer version ${VERSION}
|
||||||
|
|
||||||
|
Copyright 2021-2021 Evolix <info@evolix.fr>,
|
||||||
|
Jérémy Lecour <jlecour@evolix.fr>
|
||||||
|
and others.
|
||||||
|
|
||||||
|
mysql-queries-killer comes with ABSOLUTELY NO WARRANTY. This is free software,
|
||||||
|
and you are welcome to redistribute it under certain conditions.
|
||||||
|
See the GNU General Public Licence for details.
|
||||||
|
END
|
||||||
|
}
|
||||||
|
|
||||||
|
show_help() {
|
||||||
|
cat <<END
|
||||||
|
mysql-queries-killer can list/kill SQL queries
|
||||||
|
|
||||||
|
END
|
||||||
|
show_usage
|
||||||
|
}
|
||||||
|
|
||||||
|
show_usage() {
|
||||||
|
cat <<END
|
||||||
|
Usage: mysql-queries-killer [--port <port>] --list [--time <time>]
|
||||||
|
or mysql-queries-killer [--port <port>] --kill [--time <time>]
|
||||||
|
|
||||||
|
Options
|
||||||
|
--port MySQL port (default: 3306)
|
||||||
|
--time query busy time, in seconds (default: 600)
|
||||||
|
--list list matching queries (default action)
|
||||||
|
--kill kill connexions related to matching queries
|
||||||
|
--help Print this message and exit
|
||||||
|
--version Print version and exit
|
||||||
|
END
|
||||||
|
}
|
||||||
|
|
||||||
|
kill_connexions() {
|
||||||
|
cmd="${PTKILL_BIN} --host 127.0.0.1 --port ${port} --busy-time ${time} --kill --print"
|
||||||
|
|
||||||
|
${cmd}
|
||||||
|
}
|
||||||
|
|
||||||
|
list_queries() {
|
||||||
|
cmd="${PTKILL_BIN} --host 127.0.0.1 --port ${port} --busy-time ${time} --print"
|
||||||
|
|
||||||
|
${cmd}
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
case ${action} in
|
||||||
|
kill)
|
||||||
|
kill_connexions
|
||||||
|
;;
|
||||||
|
list)
|
||||||
|
list_queries
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
list_queries
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
if command -v pt-kill >/dev/null; then
|
||||||
|
PTKILL_BIN=$(command -v pt-kill)
|
||||||
|
else
|
||||||
|
error "The command \`pt-kill' couldn't be found. It is available in the \`percona-toolkit' package." 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Parse options
|
||||||
|
# based on https://gist.github.com/deshion/10d3cb5f88a21671e17a
|
||||||
|
while :; do
|
||||||
|
case $1 in
|
||||||
|
-h|-\?|--help)
|
||||||
|
show_help
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
-V|--version)
|
||||||
|
show_version
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
--kill)
|
||||||
|
action="kill"
|
||||||
|
;;
|
||||||
|
--list)
|
||||||
|
action="list"
|
||||||
|
;;
|
||||||
|
--port)
|
||||||
|
# with value separated by space
|
||||||
|
if [ -n "$2" ]; then
|
||||||
|
port=$2
|
||||||
|
shift
|
||||||
|
else
|
||||||
|
printf 'ERROR: "--port" requires a non-empty option argument.\n' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
--port=?*)
|
||||||
|
# with value speparated by =
|
||||||
|
port=${1#*=}
|
||||||
|
;;
|
||||||
|
--port=)
|
||||||
|
# without value
|
||||||
|
printf 'ERROR: "--port" requires a non-empty option argument.\n' >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
--time)
|
||||||
|
# with value separated by space
|
||||||
|
if [ -n "$2" ]; then
|
||||||
|
time=$2
|
||||||
|
shift
|
||||||
|
else
|
||||||
|
printf 'ERROR: "--time" requires a non-empty option argument.\n' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
--time=?*)
|
||||||
|
# with value speparated by =
|
||||||
|
time=${1#*=}
|
||||||
|
;;
|
||||||
|
--time=)
|
||||||
|
# without value
|
||||||
|
printf 'ERROR: "--time" requires a non-empty option argument.\n' >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
--)
|
||||||
|
# End of all options.
|
||||||
|
shift
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
-?*|[[:alnum:]]*)
|
||||||
|
# ignore unknown options
|
||||||
|
printf 'ERROR: Unknown option : %s\n' "$1" >&2
|
||||||
|
echo "" >&2
|
||||||
|
show_usage >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# Default case: If no more options then break out of the loop.
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
# Initial values
|
||||||
|
action=${action:-}
|
||||||
|
time=${time:-"600"}
|
||||||
|
port=${port:-"3306"}
|
||||||
|
|
||||||
|
set -u
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ -z "${port}" ]; then
|
||||||
|
echo "You must provide an port name" >&2
|
||||||
|
echo "" >&2
|
||||||
|
show_usage >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
main
|
||||||
|
|
||||||
|
exit 0
|
|
@ -208,3 +208,12 @@
|
||||||
force: no
|
force: no
|
||||||
tags:
|
tags:
|
||||||
- mysql
|
- mysql
|
||||||
|
|
||||||
|
- name: "Install mysql-queries-killer.sh"
|
||||||
|
copy:
|
||||||
|
src: mysql-queries-killer.sh
|
||||||
|
dest: "{{ _mysql_scripts_dir }}/mysql-queries-killer.sh"
|
||||||
|
mode: "0755"
|
||||||
|
force: no
|
||||||
|
tags:
|
||||||
|
- mysql
|
Loading…
Reference in a new issue