sqlite损坏修复小记
缘起
最近一个日志文件写在sqlite里边,由于关机保存不当损坏了,导致没办法正确读取,因此折腾通过技术手段恢复,这里做一个小记。
折腾过程
通过电脑端软件打开
使用了DB Browser for SQLite
进行浏览,由于结构损坏,也是无法打开,提示如下错误
无法打开数据库文件。原因: database disk image is malformed
网上查找修复方案
在网上搜索一通后,发现可以通过命令行sqlite工具进行dump和恢复,整体的操作思路为dump出来sqlite的语句,然手动修改存在损坏的语句,然后在最后加上commit确保整体正确,再保存导入到新的数据库中。
这种方法可能丢失一些数据,但是实测丢失的是最后的一点点数据影响不大。
1、打开数据库
sqlite>.open xxx
2、导出数据库
sqlite>.output tmp.sql sqlite>.dump sqlite>.quit
3、写入到新的数据库
先用文本编辑软件打开 tmp.sql,将最后一行Rollback改为Commit
然后保存
在执行下面的sqlite命令,生成新的数据库
sqlite> .open repair.db sqlite> .read tmp.sql sqlite> .exit
4、打开新的数据库确认是否正常了
这里可能会丢失数据,但是一般丢失不多
参考文档
https://blog.csdn.net/hzw2017/article/details/120899945
https://blog.csdn.net/shu19880720/article/details/123277022
https://www.cnblogs.com/guorongtao/p/16549388.html
发表评论