无法杀死并正确退出一个大的插入查询

我有一个很大的插入语句,需要很长时间才能完成,所以我杀了它,但它只是坐在processlist状态被杀死,然后我无法正常重新启动mysql。 我必须重新启动。 它每次都发生。 请参阅下面的日志跟踪。 我如何处理这种情况?

 mysql> show processlist;
 + ---- + ------ + -------------------- + -------------- +  - -------- + ------ + -------- + ------------------------- -------------------------------------------------- --------------------------- +
 |  Id | 用户| 主机|  db | 命令| 时间| 状态| 信息|
 + ---- + ------ + -------------------- + -------------- +  - -------- + ------ + -------- + ------------------------- -------------------------------------------------- --------------------------- + |
 |  6 |  root |  127.0.0.1:49971 |  xxxxxx | 杀死|  826 | 更新| 将忽略插入xxxxxx.xxxxxxs_tmp2(xxxxxx,reshoot)值('xxx.xxx',1),('0- |
 |  7 |  root |  localhost |  xxxxxx | 查询|  0 |  NULL | 显示processlist |
 + ---- + ------ + -------------------- + -------------- +  - -------- + ------ + -------- + ------------------------- -------------------------------------------------- --------------------------- +
三排(0.01秒)

 mysql>退出
再见
 [root @ x-xxx-x-xx〜]#service mysqld restart
 mysqld:无法识别的服务
 [root @ x-xxx-x-xx〜]#服务mysql重启
closuresMySQL ............................................... .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. ...错误! 
 错误! 无法停止运行服务器,所以拒绝尝试启动。
 [root @ x-xxx-x-xx〜]#服务mysql状态
 成功!  MySQL正在运行(4465)
 [root @ x-xxx-x-xx〜]#mysql -u root -xxxxx
错误2002(HY000):无法通过套接字“/var/lib/mysql/mysql.sock”连接到本地MySQL服务器(2)

我猜这是因为它试图回滚它插入的所有行。 这是正确的吗? 这里是mysql错误日志:

 110209 19:59:33 [Note] Event Scheduler:清除队列。  0个事件
 110209 19:59:34 InnoDB:开始关机...
 110209 20:09:15 mysqld_safe从/ var / lib / mysql数据库启动mysqld守护进程
 110209 20:09:16 [Warning] options --log-slow-admin-statements,--log-queries-not-using-indexes和--log-slow-slave-statements不起作用,如果--log_slow_queries不是\
组
 110209 20:09:16 [注]插件'FEDERATED'被禁用。
 InnoDB:InnoDB内存堆被禁用
 InnoDB:Mutexes和rw_locks使用GCCprimefaces内置函数
 InnoDB:压缩表使用zlib 1.2.3
 110209 20:09:16 InnoDB:使用Linux本机AIO
 110209 20:09:16 InnoDB:初始化缓冲池,大小= 6.0G
 110209 20:09:17 InnoDB:完成缓冲池的初始化
 110209 20:09:17 InnoDB:支持的最高文件格式是梭子鱼。
 110209 20:09:19 InnoDB:1.1.4开始; 日志序号16772431917
 110209 20:09:20在--skip-name-resolve模式下忽略[Warning]'proxies_priv'条目'@ root @ xx-xxx-xx-xx'。
 110209 20:09:20 [Note] Event Scheduler:加载了0个事件
 110209 20:09:20 [注] / usr / sbin / mysqld:准备连接。
版本:'5.5.8'socket:'/var/lib/mysql/mysql.sock'端口:3306 MySQL社区服务器(GPL)
 110209 20:13:47 mysqld_safe从/ var / lib / mysql数据库启动mysqld守护进程
 110209 21:07:07 mysqld_safe从/ var / lib / mysql数据库启动mysqld守护进程
 110209 21:07:08 [Warning] options --log-slow-admin-statements,--log-queries-not-using-indexes和--log-slow-slave-statements不起作用,如果--log_slow_queries不是\
组
 110209 21:07:08 [注]插件'FEDERATED'被禁用。
 InnoDB:InnoDB内存堆被禁用
 InnoDB:Mutexes和rw_locks使用GCCprimefaces内置函数
 InnoDB:压缩表使用zlib 1.2.3
 110209 21:07:08 InnoDB:使用Linux本机AIO
 110209 21:07:08 InnoDB:初始化缓冲池,大小= 6.0G
 110209 21:07:09 InnoDB:完成缓冲池的初始化
 110209 21:07:10 InnoDB:支持最高的文件格式是梭子鱼。
 InnoDB:日志扫描通过了检查点lsn 16798669157
 110209 21:07:11 InnoDB:数据库没有正常closures!
 InnoDB:启动崩溃恢复。
 InnoDB:从.ibd文件读取表空间信息...
 InnoDB:从双写中恢复可能的半写数据页面
 InnoDB:缓冲区...
 InnoDB:进行恢复:扫描到日志序列号16803911680
 InnoDB:进行恢复:扫描到日志序列号16809154560
 InnoDB:进行恢复:扫描到日志序列号16813133382
 InnoDB:1个必须回滚或清理的事务
 InnoDB:共计219970行操作撤消
 InnoDB:Trx id计数器是1400
 110209 21:07:20 InnoDB:开始对数据库应用一批日志logging...
 InnoDB:百分比进展:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 5 \
 0 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
 InnoDB:申请批量完成
 InnoDB:从后台开始回滚未提交的事务
 110209 21:13:34 InnoDB:使用ID 1200回滚trx,219970行进行撤消

 InnoDB:进度百分比:1110209 21:13:34 InnoDB:1.1.4开始; 日志序列号16813133382
  2110209 21:13:34 [ - ]'proxies_priv'条目'@ root @ xx-xxx-xx-xx'在--skip-name-resolve模式下被忽略。
  3 4110209 21:13:35 [Note] Event Scheduler:加载了0个事件
 110209 21:13:35 [注] / usr / sbin / mysqld:准备连接。
版本:'5.5.8'socket:'/var/lib/mysql/mysql.sock'端口:3306 MySQL社区服务器(GPL)
  5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46

如果您使用MySQL 5.5,请尝试使用延迟插入而不是插入。

当你使用KILL时,为线程设置一个特定于线程的kill标志。 在大多数情况下,线程死机可能需要一些时间,因为kill标志仅在特定的时间间隔被检查:[…]

INSERT DELAYED线程快速刷新(插入)它在内存中的所有行,然后终止。

http://dev.mysql.com/doc/refman/5.5/en/kill.html

排队的行只保存在内存中,直到它们被插入到表中。 这意味着如果强制终止mysqld(例如,kill -9)或者mysqld意外死亡,那么没有写入磁盘的任何排队的行都会丢失。

http://dev.mysql.com/doc/refman/5.5/en/insert-delayed.html