终止 mysqld 进程

5
我有一张包含大约800,000行的表格。我执行了一个update users set hash = SHA1(CONCAT({about eight fields})) where 1;语句,现在Sequel Pro进程已经挂起,而且我不确定mysqld进程是否正常运行。
以下是两个问题:
  1. 杀掉这些程序可能会导致什么样的伤害?我正在处理一个单独的数据库,因此系统上其他数据库不应该受到影响,对吗?
  2. 假设你必须像这样更新一个表格。有没有更快/更可靠的方法来更新,而无需编写单独的脚本。
我刚使用phpMyAdmin检查了一下,查询好像已经完成了。但是我的Sequel Pro进程仍然占用着我的两个内核的100%...
2个回答

5

如果你正在使用InnoDB,它由事务日志支持以进行恢复和回滚,那么你可以做很多事情,特别是在非生产环境中。

终止一个不受控制的查询最简单的方法是使用MySQL shell作为root用户:

SHOW PROCESSLIST;

这将为您提供当前连接的列表以及每个连接对应的进程ID。要终止任何给定的查询,比如第19个,请使用:

KILL 19;

通常这将撤销和回滚查询。在某些情况下,这可能不足以解决问题,您可能需要使用 kill -9 强制终止 MySQL 服务器进程。 在大多数情况下,您应该能够立即重新启动服务器,并且数据库将处于最后完全提交的状态。


1

获取线程ID(查询将显示在旁边):

mysqladmin proc

安全终止查询线程:

mysqladmin kill [id]

如果您使用innodb,您将不得不最终得到部分更新的表格,但您应该是可以正常运行的。详情:

在UPDATE或DELETE操作期间, 每个块读取和每个更新或删除的数据行后都会检查杀死标志。如果设置了杀死标志,语句将被中止。请注意,如果您不使用事务,则更改不会回滚。

至于您的第二个问题,如果不允许编写单独的脚本(比如说限制更新速率),就没有更好的更新表格的方法了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接