误删除nova数据库中instances表之数据恢复

注:instances nova数据库中核心的数据库表,存放着创建实例到中止实例的大部份数据参数和记录。如果没有此表,那在登录Horizon后,查看不到任何创建的虚拟机实例。

故障描述如下:

故障一

在成都icloud部门在调用openstack api过程中,用中文云主机类型创建虚拟机,导致各个租户登录后查找不到创建的实例,提示“无法获取云主机”如图1

误删除nova数据库中instances表之数据恢复_第1张图片

针对此问题,在不懈努力下,将问题定位到nova数据库中的instances数据库表。查询故障租户:如图2

Select * from instances where project=5872c3c824504fe896b408323772e251;



这里显示的乱码,就是icloud 云研发创建中文云主机类型的实例。我们只需要将其几条数据删除,那问题就解决了。

 

故障二

在排查故障一过程中,犯了一个低级错误,可能当时太过于兴奋。将其整个表(nova.instances)数据全部删除,之前的问题是解决了,但所有实例也不见了。当时还用了mysql没有回收机制的truncate命令,类似于硬盘格式化。(注:慎用truncate命令)


删除instances后的情况如下:



这下问题严重了,所以实例都没法操作,mysql的truncate命令在mysql没有开启日志备份是没办法数据恢复的,只要openstack服务器出现故障,很有可能所以实例都没法使用,现在面临的问题就是将数据恢复。如何恢复,请看下面:

第一、  由于instances字段比较多,防止数据库数据添加失败,可以备份其它环境的instances表(k\j\i三个版本目前是一样的)

查询的表结构如下:


Sql添加语句如下:

INSERT INTO `instances` VALUES('2015-07-16 03:13:36','2015-11-24 08:56:02',NULL,2031,NULL,'8b64d5a88c444b20962a27466a817104','5872c3c824504fe896b408323772e251','4c831c0a-73c9-4028-a109-502d8e991640','','',0,NULL,NULL,1,'active',2048,2,'test1','controller',NULL,'r-wq5qcqv6',NULL,'2015-07-1603:13:38',NULL,'test1','test1','nova',0,NULL,'controller',37,NULL,'1b839b93-0880-4422-ab60-46b88faafb32',NULL,'/dev/vda',NULL,NULL,'',NULL,NULL,NULL,0,1,0,0,20,0,NULL,'controller',0,NULL,0,NULL)


我们需要找到关键字段,经过测试,关键字段主要有(id、user_id、project_id、image_ref、vm_state、memory_mb、vcpus、hostname、host、display_name、display_description、launched_on、uuid 、node),其中关键字段id,需要在单独的映射表nova.instance_id_mappings中查询。

 

第二、  通过virsh list 查看计算节点在线虚拟机

     

 

第三、  通过virsh domuuid 查询在线虚拟机的id

 

第四、  找到存放虚拟机实例的路径(/var/lib/nova/instances),找到libvirt.xml配置文件

 

第五、  查看虚拟机实例配置文件(cat libvirt.xml)

误删除nova数据库中instances表之数据恢复_第2张图片

第六、  进入mysql, 添加一条instances数据

这里拿租户Visualization做测试。

添加前:

误删除nova数据库中instances表之数据恢复_第3张图片

查找Visualization实例:


vi ./ebd754ca-1ae6-467b-a36b-14d349ba2c34/libvirt.xml

误删除nova数据库中instances表之数据恢复_第4张图片

Id:355

user_id: 587d928217f54908892e5b7c071c1fa5

project_id:

00b0816d1f934554ac20755e5235e059

image_ref:

19c191c8-66a0-4bb9-8f0f-71038e735d30

vm_state:stopped

memory_mb: 8192

Vcpus: 4

launched_on: controller

Host:controller

Node:controller

display_description:

U2_Test-ebd754ca-1ae6-467b-a36b-14d349ba2c34

Hostname:

U2_Test-ebd754ca-1ae6-467b-a36b-14d349ba2c34

Uuid:

ebd754ca-1ae6-467b-a36b-14d349ba2c34

display_name:

U2_Test-ebd754ca-1ae6-467b-a36b-14d349ba2c34

 

 

 

添加后:

INSERT INTO `instances` VALUES('2015-07-16 03:13:36','2015-11-24 08:56:02',NULL,355,NULL,'587d928217f54908892e5b7c071c1fa5','00b0816d1f934554ac20755e5235e059','19c191c8-66a0-4bb9-8f0f-71038e735d30','','',0,NULL,NULL,1,'stopped',8192,4,'U2_Test-ebd754ca-1ae6-467b-a36b-14d349ba2c34','controller',NULL,'r-wq5qcqv6',NULL,'2015-07-1603:13:38',NULL,'U2_Test-ebd754ca-1ae6-467b-a36b-14d349ba2c34','U2_Test-ebd754ca-1ae6-467b-a36b-14d349ba2c34','nova',0,NULL,'controller',37,NULL,'ebd754ca-1ae6-467b-a36b-14d349ba2c34',NULL,'/dev/vda',NULL,NULL,'',NULL,NULL,NULL,0,1,0,0,20,0,NULL,'controller',0,NULL,0,NULL)

误删除nova数据库中instances表之数据恢复_第5张图片 误删除nova数据库中instances表之数据恢复_第6张图片

 

大功告成!有不明白,可以一起探讨!

你可能感兴趣的:(误删除nova数据库中instances表之数据恢复)