解决Couchbase出现DATABASE DISK IMAGE IS MALFORMED的问题。

环境说明:

    服务器:Windows 2003

    数据库:Couchbase 1.8


昨天公司所在的大厦突然断电,待来电之后开起服务器发现Couchbase数据库连接得上但读不出数据了,然后我试着备份数据然后控制台就给我提示了 DATABASE DISK IMAGE IS MALFORMED 错误。网上搜索了好久才自己总结出来原来是SQLite的错误,原来Couchbase使用了SQLite作为持久层,SQLite有一个很严重的缺点就是不提供Repair命令。导致死亡提示 DATABASE DISK IMAGE IS MALFORMED 它的产生有很多种可能,比如,磁盘空间不足,还有就是写入数据过程中突然掉电等。
官方对产生原因的一些说明: http://www.sqlite.org/lockingv3.html#how_to_corrupt


恢复办法如下:

、把数据导出为sql

    1、打开控制台(cmd)

    2、在控制台输入 cd /d D:\Couchbase\Server\bin   (注意这个路径是您电脑安装Couchbase的路径)

    3、在控制台输入 sqlite3 D:\Couchbase\Server\var\lib\couchbase\data\Baidu-data\Baidu-0.mb (注意这里与您电脑上的名称会有区别,不过都是以mb为后缀的文件,一共有四个,分别为 Baidu-0.mb、Baidu-1.mb、Baidu-2.mb、Baidu-3.mb),按回车后就会出现像这样的字符串

    sqlite>

    接着在其后面输入:

    .output tmp0.sql (按回车)

    .dump   (如果数据很大按回车后则会等待很久,这时您可以到D:\Couchbase\Server\bin 目录下会看到一个tmp0.sql的文件,当.dump命令执行完毕后就执行 .quit  命令)

    .quit

、把导出的sql重新导入为SQLite数据库

    1、打开控制台(cmd)

    2、在控制台输入 cd /d D:\Couchbase\Server\bin   (注意这个路径是您电脑安装Couchbase的路径)

    3、在控制台输入 sqlite3 D:\Couchbase\Server\var\lib\couchbase\data\Baidu-data\Baidu-0.mb (注意这里与您电脑上的名称会有区别,不过都是以mb为后缀的文件,一共有四个,分别为 Baidu-0.mb、Baidu-1.mb、Baidu-2.mb、Baidu-3.mb),按回车后就会出现像这样的字符串

    sqlite>

    接着在其后面输入:

    .read tmp0.sql  (如果数据很大按回车后则会等待很久,这里您会看到重新生成一个 D:\Couchbase\Server\var\lib\couchbase\data\Baidu-data\Baidu-0.mb,当.read命令执行完毕后就执行 .quit  命令)

    .quit

重复上述过程对Baidu-1.mb、Baidu-2.mb、Baidu-3.mb的修复就大功告成了(要注意上面的文件名字要相应地修改)!祝您好运!


PS1:

给蛛蛛看的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值