Re: signal handling in mysql cli
Sebastien FLAESCH <[email protected]>
| Newsgroups | gmane.comp.db.mysql.general |
|---|---|
| Organization | Four Js Development Tools |
| Message-ID | <[email protected]> |
Hi all,
The technique described in this thread is working fine with MySQL 5.6 (libmysqlclient).
Basically, in a SIGINT signal handler, we establish a new connection to perform a
KILL QUERY pid
...
But with 5.7 (5.7.11) we get now a different result:
A) The query is still interrupted, but we no longer get an SQL error -1317.
B) For some reason, the program does not want to exit() - (must investigate)
Any clues?
With mysql it's working fine:
mysql> select sleep(10);
^C^C -- query aborted
+-----------+
| sleep(10) |
+-----------+
+-----------+
1 row in set (2.79 sec)
mysql> \q
Bye
Thanks!
Seb
On 12/03/2014 05:25 PM, Sebastien FLAESCH wrote:
> Hi all,
>
> I have a similar question regarding KILL QUERY usage:
>
> We have a C client program using libmysqlclient.so, it is a single-threaded program.
>
> When running a long query, how can I send the KILL QUERY command when a SIGINT (CTRL-C)
> is caught? (of course we implement a signal handler, so we keep the control)
>
> => Is is safe to establish a new connection to the server in the signal handler, using
> mysql_init() + mysql_real_connect(), and execute the KILL QUERY with the mysql thread
> id I got from the initial mysql_init() / mysql_real_connect()?
>
> I made some tests, and it seems to work fine, the long query returns SQL error -1317:
> "Query execution was interrupted" (which is expected)
>
> We want to support SQL interruption properly, so please someone from the dev team,
> give me a clear answer... I don't want to use a side effect or undocumented feature.
>
> Doing all this stuff in a signal handler is certainly risky... no?
>
> I could not find the information in the documentation (mysql_real_connect).
>
> I wish there would be an API like mysql_cancel_query(), similar to Oracle's OCI
> OCIBreak().
>
> Thanks!
> Seb
>
>
>
> On 12/02/2014 05:13 PM, walter harms wrote:
>> hi list,
>>
>> when i use CTRL-C to break a query that works fine in interactive mode.
>>
>> mysql> select sleep(10) ;
>> ^CCtrl-C -- sending "KILL QUERY 24289" to server ...
>> Ctrl-C -- query aborted.
>> +-----------+
>> | sleep(10) |
>> +-----------+
>> +-----------+
>> 1 row in set (0.86 sec)
>>
>> but when i use the noninteractive mode
>> timeout 5 mysql -BAN -e "select now(); select sleep (100) ; select now() "
>>
>> i looks like that but "show full processlist;" shows otherwise and that is true
>> as a list of long running querys showed.
>>
>> Is there a way to make it behave like the interactive version ?
>> Now it is a bit confusing for everyone.
>>
>> re,
>> wh
>>
>
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/mysql