内容纲要
问题描述
MySQL修改表结构后,导致表锁死/卡死。
解决方案
执行SQL语句
show full processlist;
找到执行错误操作的命令所在行,复制第一列的id
执行
kill id
就可以将卡死表操作的SQL语句结束掉,问题便可以解决。
补充
show full processlist;
命令:获取mysql链接执行的现场快照
各列的含义和用途:
id: 一个标识
user: 显示当前用户,如果不是root,这 个命令就只显示你权限范围内的sql语句。
host: 显示这个语句是从哪个ip的哪个端口上发出的
db: 显示 这个进程目前连接的数据库。
command:显示当前连接的执行的命令,一般就是休眠(sleep),查询(query),连接 (connect)。
time: 此这个状态持续的时间,单位是秒。
state: 显示使用当前连接的sql语句的状态,只是语句执行中的某一个状态,一个sql语句,已查询为例,可能需要经过copying to * tmp table,Sorting result,Sending data等状态才可以完成
info: 显示这个sql语句,因为长度有限,所以长的sql语句就显示不全,但是一个判断问题语句的重要依据。
这个命令中最关键的就是state列,mysql列出的状态主要有以下几种:
Checking table
正在检查数据表(这是自动的)。
Closing tables
正在将表中修改的数据刷新到磁盘中,同时正在关闭已经用完的表。这是一个很快的操作,如果不是这样的话,就应该确认磁盘空间是否已经满了或者磁盘是否正处于重负中。
Connect Out
复制从服务器正在连接主服务器。
Copying to tmp table on disk
由于临时结果集大于 tmp_table_size,正在将临时表从内存存储转为磁盘存储以此节省内存。
Creating tmp table
正在创建临时表以存放部分查询结果。
deleting from main table
服务器正在执行多表删除中的第一部分,刚删除第一个表。
deleting from reference tables
服务器正在执行多表删除中的第二部分,正在删除其他表的记录。
Flushing tables