苏童 发表于 2018-6-1 13:27:04

删除openstack僵尸实例

  openstack的实例记录在nova数据库的instances表中,最简单的方式就是删除该记录。


1.回收浮动IP


接触绑定

nova remove-floating-ip vm_namexx.xx.xx.xx

放入ip池

nova floating-ip-delete xx.xx.xx.xx


2.删除实例记录


2.1强制删除


默认mysql会开启外键关联,直接删除被关联的数据会产生如下错误

Cannot delete or update a parent row: a foreign key constraint fails

可通过关闭(SET FOREIGN_KEY_CHECKS=0;)来消除错误,删除完毕后在开启(SET FOREIGN_KEY_CHECKS=1;)。

use nova;

select id,display_name,uuid from instances;

set FOREIGN_KEY_CHECKS=0;

delete from instances where id='...';

set FOREIGN_KEY_CHECKS=1;


2.2.关联删除


即不关闭外键关联,在删除实例记录之前,先删除所有有关的数据。


2.2.1查询实例各项信息


select id,display_name,uuid frominstances;



2.2.2删除security_group_instance_association表中数据


delete fromsecurity_group_instance_association where instance_uuid='...';


2.2.3删除instance_info_caches表中数据


delete from instance_info_caches where instance_uuid='...'


2.2.4删除block_device_mapping表中数据


delete from block_device_mapping whereinstance_uuid='...';


2.2.5 删除fixed_ips表中数据

  update fixed_ips set instance_uuid=NULL and whereinstance_uuid ='...';


2.2.6 删除instance_actions_events表中数据

  delete A from instance_actions_events as Ainner join instance_actions as B on A.action_id = B.id where B.instance_uuid ='...';


2.2.7 删除instance_actions表中数据

  delete from instance_actions whereinstance_uuid = '...';


2.2.8 删除instance_faults表中数据

  delete from instance_faults whereinstance_uuid='...';


2.2.9 删除instance_system_metadata表中数据

  delete from instance_system_metadata whereinstance_uuid='...';


2.2.10删除virtual_interfaces表中数据

  delete from virtual_interfaces whereinstance_uuid='...';


2.2.11删除instances表中数据


delete from instances where uuid='...';


附上一键删除脚本


mysql -uroot -p <<EOF
use nova;
delete from security_group_instance_association where instance_uuid='$1';
delete from instance_info_caches where instance_uuid ='$1';
delete from block_device_mapping where instance_uuid='$1';
update fixed_ips set instance_uuid=NULL where instance_uuid ='$1';
delete A from instance_actions_events as A inner join instance_actions as B on A.action_id = B.id where B.instance_uuid = '$1';
delete from instance_actions where instance_uuid = '$1';
delete from instance_faults where instance_uuid='$1';
delete from instance_system_metadata where instance_uuid='$1';
delete from virtual_interfaces where instance_uuid='$1';
delete from instances where uuid='$1';
EOF
  
页: [1]
查看完整版本: 删除openstack僵尸实例