Yumでsqlite3.DatabaseError: database disk image is malformedエラー
障害があったCentOSサーバーでsudo yum upgradeを実行しようとしたのですが、以下のようにPythonのエラーと共に”sqlite3.DatabaseError: database disk image is malformed”というSQLiteのDBエラーが出て中断してしまうことがありました。
$ sudo yum upgrade
…
Traceback (most recent call last):
File "/usr/bin/yum", line 29, in
yummain.user_main(sys.argv[1:], exit_code=True)
File "/usr/share/yum-cli/yummain.py", line 375, in user_main
errcode = main(args)
File "/usr/share/yum-cli/yummain.py", line 281, in main
return_code = base.doTransaction()
File "/usr/share/yum-cli/cli.py", line 817, in doTransaction
resultobject = self.runTransaction(cb=cb)
File "/usr/lib/python2.7/site-packages/yum/__init__.py", line 1944, in runTransaction
self.verifyTransaction(resultobject, vTcb)
File "/usr/lib/python2.7/site-packages/yum/__init__.py", line 2076, in verifyTransaction
self.history.sync_alldb(po)
File "/usr/lib/python2.7/site-packages/yum/history.py", line 1358, in sync_alldb
if not self._wipe_anydb(ipkg, "rpm"):
File "/usr/lib/python2.7/site-packages/yum/history.py", line 1352, in _wipe_anydb
executeSQL(cur, sql, (pid,))
File "/usr/lib/python2.7/site-packages/yum/sqlutils.py", line 168, in executeSQLQmark
return cursor.execute(query, params)
sqlite3.DatabaseError: database disk image is malformed
sudo yum clean allを実行してリポジトリ情報をクリアしても失敗します。最終的には下記のコマンドでエラーなくアップグレードできました。
$ sudo yum clean dbcache
yum clean dbcacheは、Yumのメタデータに高速アクセスするためのsqliteファイルを削除するコマンドです。yum clean allは/var/cache/yum/のエントリを削除するコマンドのため、yum clean allだけでは削除できないDBキャッシュが存在するようです。yum clean dbcacheでそれを削除できました。Yumのキャッシュ削除には以下のコマンドがあるため状況に応じて試してみるのが良いでしょう。
sudo yum clean all # /var/cache/yumディレクトリ内のエントリを全て削除
sudo yum clean metadata # XMLメタデータを削除
sudo yum clean dbcache # SQLiteのDBキャッシュファイルを削除
sudo yum makecache # キャッシュを再作成