mysql数据库锁表,数据导入失败

产生的情景:

通过navicat上执行sql语句,语句内容为删除某张表,并重新插入数据,测试环境测试ok,但是生产上却导入不进去出现锁表的情况,

通过在mysql 客户端执行命令发现:show processlist;
mysql数据库锁表,数据导入失败

产生的原因分析:

是因为删除的这张表在生产上,有很多服务同时调用,而我们的sql语句要执行删表操作,导致mysql把整个表锁起来

解决方案:

把通过show processlist; 命令查找到的含有lock的pid删除。所谓的pid在上图已指出。但是问题又来了,就是查询出需要删除的pid太多,不可能一条一条的删除。从而得出我们批量删除方案

echo “select concat(‘kill ‘, id,’;’) from information_schema.processlist where state like ‘%lock%’;” |mysql -uroot -p’pwd’ -S /var/lib/mysql/mysql.sock|tail -n +2|mysql -uroot -p’pwd’ -S /var/lib/mysql/mysql.sock