I want to check my MySQL server every minute and kill queries that have run longer than 150 seconds. The main reason I want to do this is because I don’t want queries from certain people to lock up the DB for everyone else. I know this is not the ultimate solution to the problem, but at least it’s a fallback in case something goes wrong with a query. I don’t have a slave DB (this is just an at-home project).
I’d like to schedule a script to run that does this for me. I’m unfamiliar with Perl or Ruby and I need it done on my Windows 2008 Server box. I’ve looked into creating a simple cmd line script, but that doesn’t seem to be possible. I know currently I can do something like this but I have to do it manually:
mysqladmin processlist
mysqladmin kill
Anyone have any ideas or examples on how I could do this?
If you have Wscript installed – I think it should be – you can try this. Save as “somethingorother.vbs” and execute every now and then. Or you can use the provided loop. Both loop and kill-for-real options are commented; test the script before uncommenting on a production server.
I assume that ‘mysqladmin processlist’ outputs something like this (taken from my XP):
So we have to eliminate rows containing “—-” and rows containing “Id | User”, and what remains is
which we can split by pipe signs ‘|’, getting nine fields from 0 to 8:
Field #1 is Id, and field #6 yields the run time.