杀死mysqld进程

时间:2010-06-09 22:02:21

标签: sql database sql-update mysql

我有一张约800k行的表。我跑了update users set hash = SHA1(CONCAT({about eight fields})) where 1;

现在我有一个挂起的Sequel Pro流程,我不确定mysqld进程。

这是两个问题:

  1. 杀死这些程序会有什么危害?我正在开发一个单独的数据库,因此不会对系统上的其他数据库造成任何损害,对吗?

  2. 假设你必须像这样更新一个表。什么是更快/更可靠的更新的方法,而无需编写单独的脚本

  3. 我刚刚使用phpMyAdmin检查并且出现,就像查询完成一样。我仍然使用Sequel Pro使用100%的核心...

2 个答案:

答案 0 :(得分:5)

如果您正在使用由事务日志支持的InnoDB进行恢复和回滚,那么您可以大量使用,尤其是在非生产环境中。

终止叛逆者查询的最简单方法是使用MySQL shell作为root用户:

SHOW PROCESSLIST;

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

KILL 19;

通常这会撤消并回滚查询。在某些情况下,这还不够,您可能必须使用kill -9强制退出MySQL服务器进程。在大多数情况下,您应该能够立即重新启动服务器,并且数据库将处于上次完全提交状态。

答案 1 :(得分:1)

获取线程ID(它将同时显示查询):

mysqladmin proc

安全地终止查询线程:

mysqladmin kill [id]

除非你使用innodb,否则你最终会得到一个部分更新的表,但你应该没问题。 Details

  

在UPDATE或DELETE操作期间,   每个之后都会检查kill标志   阻止读取和每次更新后或   删除了一行。如果设置了kill标志,   声明中止。请注意,如果   你没有使用交易,   更改不会回滚。

关于你的第二个问题,没有更好的方法来更新表,如果不允许写一个单独的脚本(比如说,限制更新)。