shell脚本解除mysql中死锁的表
时间: 2023-06-29 20:09:56 浏览: 158
解除 MySQL 中死锁的表的 shell 脚本可以使用以下命令:
```bash
#!/bin/bash
# 获取所有被锁定的表
locked_tables=$(mysql -h HOSTNAME -u USERNAME -pPASSWORD -e "SELECT CONCAT(table_schema, '.', table_name) FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT IN ('information_schema', 'mysql') AND TABLE_ROWS IS NOT NULL AND TABLE_ROWS > 0 AND TABLE_SCHEMA NOT LIKE 'performance_schema';" | xargs)
# 循环遍历解锁每个表
for table in $locked_tables; do
mysql -h HOSTNAME -u USERNAME -pPASSWORD -e "SELECT CONCAT('KILL QUERY ',id,';') FROM information_schema.processlist WHERE state = 'Locked' AND info LIKE '%${table}%';" | xargs mysql -h HOSTNAME -u USERNAME -pPASSWORD
done
```
这个脚本会获取所有被锁定的表,然后循环遍历解锁每个表。在解锁表之前,脚本会先通过 MySQL 的 processlist 命令获取当前被锁定的查询,然后使用 KILL QUERY 命令杀死该查询,进而解除表锁定。
请注意,你需要将 HOSTNAME、USERNAME 和 PASSWORD 替换为 MySQL 数据库的实际主机名、用户名和密码。
阅读全文