[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的相应的值,否则会导致写脏数据

posted @ 2013-06-27 22:41  willier  阅读(1471)  评论(0编辑  收藏  举报