[Openstack][Grizzly] Mysql删除僵尸实例
由于某些原因,导致在通过nova delete删除虚拟机后,其task_state 一致处于deleting状态, 但是始终无法删除。由于虚拟机还没有分配到节点等信息,还没有拷贝镜像,所以可以直接从数据库中将其删除。可以执行以下脚本 delete_zombie.sh
#!/bin/bash
mysql -uroot -ppassword << EOF
use nova;
DELETE a FROM nova.security_group_instance_association AS a INNER JOIN nova.instances AS b ON a.instance_uuid=b.uuid where b.uuid='$1';
DELETE FROM nova.instance_info_caches WHERE instance_uuid='$1';
DELETE FROM nova.instance_system_metadata WHERE instance_uuid='$1';
DELETE FROM nova.virtual_interfaces WHERE instance_uuid='$1';
DELETE FROM nova.instances WHERE uuid='$1';
EOF
./delete_zombie.sh a23c85eb-27a8-4594-9e7e-b1ca1b410235
参数为虚拟机的UUID
解释:
Mysql 中产看表之间的关联性
SELECT * FROM information_schema.KEY_COLUMN_USAGE a WHERE a.TABLE_NAME='virtual_interfaces';
其中红色部分为索要查询的表
虚拟机的信息是储存在nova.instances 表中,由于表间的一些键之间的关联性,导致直接从instances表中删除数据,mysql会报错,所以要删除关联表中数据。
在Openstack 的G版本中,所关联的数据较以前版本多了些。
另外在执行脚本后需要修改配额信息,将改tenant_id 的配额进行相应的更改,更改数据库中nova.quota_usages的相应的值,否则会导致写脏数据