我有一个很大的插入语句,需要很长时间才能完成,所以我杀了它,但它只是坐在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意外死亡,那么没有写入磁盘的任何排队的行都会丢失。