LMLPHP后院

mysql delete ctrl+c 会怎么样技术

maybe yes 发表于 2021-05-11 21:12

MySQL 误删及时反应过来,赶紧按下 Ctrl+C,挽救了数据,可见 MySQL 真是个优秀的软件啊!

有惊无险,还好停住了,结果数据保住了。

一直以来,在我的印象中,删除大量数据的时候执行需要很长时间如果中途停止,会出现数据已经执行了一部分。这次经历了一次惊险的操作结果数据没有丢失,查找资料显示,mysql 是有处理 ctrl+c 的信号的,一旦接受到撤销信号,会发送给主进程,对于 update、delete 这样的操作,会恢复数据。

我执行的时候并没有开启事务哦,这样的结果说明 mysql 做的还是不错的。造成我以为会删除部分的数据,可能是因为我经常性的远程操控,这样即使是中断,也是无济于事的。

https://www.cnblogs.com/leochenliang/p/9716348.html

通过以上源码可知,MySQL客户端捕获信号后,向服务器端发送KILL /*!50000 QUERY */ 命令并执行,从而将Query处理kill。

       基于以上两个版本处理的源码可知,MySQL客户端一定会捕获CTRL+C信号,并对该信号进行处理。而对于不同版本的客户端,由于发送命令的不同,导致MySQL服务器端执行结果有所不同。

结论

       通过以上测试和源码分析可知,MySQL客户端肯定会捕获CTRL+C信号,并对信号进行处理。不同的是,在MySQL 5.5.20版本的客户端中执行时,服务器端执行KILL QUERY 命令,将QUERY KILL掉,并将连接关闭。而对MySQL 5.0.77客户端中执行时,服务器端执行KILL /*!50000 QUERY */ 命令,KILL掉QUERY,但保持连接。

       此外,对于update、delete数据更新操作[1],CTRL+C会将执行的操作标记为KILLED状态,然后执行回滚操作。因此,不会因为CTRL+C操作,导致数据变脏。

有惊无险的操作,如下

MariaDB [lmlphp]> delete from lmlphp;
^CCtrl-C -- query killed. Continuing normally.
ERROR 1317 (70100): Query execution was interrupted
MariaDB [lmlphp]> select count(1) from lmlphp
    -> Ctrl-C -- exit!
Aborted
2021-10-24 07:49:41 1635032981 0.020413