解决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:

给蛛蛛看的


©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页