一捧阳光 > SQLite数据库异常恢复

热爱代码,对每一行代码保持一颗敬畏之心。

起因

今天机房机房异常重启了,然后发现内部使用的showdoc的sqlite竟然GG了。

报错信息:

SQLSTATE[HY000]: General error: 11 database disk image is malformed

开始修复

1. 检查数据库完整性

[[email protected] Sqlite]# sqlite3 showdoc.db.php  "PRAGMA integrity_check"
Error: database disk image is malformed   // 返回这个说明数据库已损坏

2. 备份数据库

[[email protected] Sqlite]# cp showdoc.db.php showdoc.db.php.bak

3. 修复数据库(恢复到fix_showdoc.db)

[[email protected] Sqlite]# cat <( sqlite3 showdoc.db.php .dump | grep "^ROLLBACK" -v ) <( echo "COMMIT;" ) | sqlite3 "fix_showdoc.db"

4. 校验修复后数据库完整性

[[email protected] Sqlite]# sqlite3 fix_showdoc.db  "PRAGMA integrity_check"
ok   // 正常应该是返回的ok了

5. 恢复数据库

[[email protected] Sqlite]# mv fix_showdoc.db showdoc.db.php

恢复完验证是否正常,如果正常则可以删除备份 showdoc.db.php.bak 文件了。

tagged by none