起因
今天机房机房异常重启了,然后发现内部使用的showdoc的sqlite竟然GG了。
报错信息:
SQLSTATE[HY000]: General error: 11 database disk image is malformed
开始修复
1. 检查数据库完整性
[root@WvCRyN10105 Sqlite]# sqlite3 showdoc.db.php "PRAGMA integrity_check"
Error: database disk image is malformed // 返回这个说明数据库已损坏
2. 备份数据库
[root@WvCRyN10105 Sqlite]# cp showdoc.db.php showdoc.db.php.bak
3. 修复数据库(恢复到fix_showdoc.db)
[root@WvCRyN10105 Sqlite]# cat <( sqlite3 showdoc.db.php .dump | grep "^ROLLBACK" -v ) <( echo "COMMIT;" ) | sqlite3 "fix_showdoc.db"
4. 校验修复后数据库完整性
[root@WvCRyN10105 Sqlite]# sqlite3 fix_showdoc.db "PRAGMA integrity_check"
ok // 正常应该是返回的ok了
5. 恢复数据库
[root@WvCRyN10105 Sqlite]# mv fix_showdoc.db showdoc.db.php
恢复完验证是否正常,如果正常则可以删除备份 showdoc.db.php.bak 文件了。