スポンサーリンク

このドキュメントの内容は、以下の通りです。

はじめに

SQLiteとは、エスキューライトと読みます。 SQLiteは、ファイルベースのコンパクトで軽量なリレーショナルデータベースエンジンです。オラクルやMySQL/MariaDBといったメジャーのリレーショナルデータベースがありますが、それらは、データベースサービスのプログラムが必要です。 SQLiteは、 Mysqlサーバなどのサーバプロセスを必要としません。プログラムからSQLiteのライブラリを通して、直接、データベースのファイルを読み書きします。

MediaWiki のデータベースに使っている、 SQLite でエラーが発生しました。SQLiteのデータベースが壊れた、と思いました。データベースが壊れたときに、データベースを修復するために、いろいろ試そうとされると思いますが、何かする前に、データベースのファイルのバックアップをとっておくことをお勧めします。修理をするために、いろいろ試しているうちに、自分で破壊してしまうこともあると思います。バックアップは非常に大事だと思います。

また、このようなエラーと遭遇する前に、バックアップをとっておくべき、ということを付け加えておきます。

MediaWikiとリレーショナルデータベースの関係


MediaWikiとは、WikiPedia でも採用されている Wikiのエンジンです。MediaWikiは、オープンソースソフトウェアの1つです。

MediaWikiを利用して、 Wiki(ウィキ) を作成しています。 MediaWikiでは、書き込まれたデータを管理するために、リレーショナルデータベースを利用します。たとえば、データの書き込み先に MySQL を利用することができます。いろいろなリレーショナルデータベースを利用でき、その1つに SQLiteもあります。

database disk image is malformed sqlite との遭遇


MediaWikiSQLiteのデータベースにアクセスしたときに、

database disk image is malformed sqlite

というエラーが発生しました。

データベースにアクセスが完全にできないわけではないのですが、特定のテーブルにアクセスしようとすると、上記のエラーが出ました。

日本語の意味は?


そもそも、このメッセージの意味はなんでしょうか?それとなく、データベースディスクイメージがおかしいよ、という風に見えますね。

database disk image is malformed sqlite


Google翻訳さんに日本語の意味を教えてもらいました。

データベースのディスクイメージが不正な形式のsqliteです


要するに、SQLite のデータベースディスク・ファイルが壊れているようです。

直すための試行錯誤

最初にも書きましたが、いろいろ試行錯誤する前に、SQLiteのデータベースファイルのバックアップをとっておくようにしてください。バックアップがない場合、データベースの中身やデータベースのファイルを破壊してしまうと、元の状態に戻すのは難しいでしょう。

SQLiteには、 PRAGMA integrity_check があります。 英単語のintegrityというのは、完全性といった意味ですが、 integrity check は、整合性チェックということのようです。
SQLiteで pragma integrity_check を実行して、完全性/整合性のチェックをしてみると、エラーが出てきました。 integrity check は、問題がなければ、 OK が返ってきます。

解決方法

やり方は、一度、データベースをダンプして、それから新しいデータベースにインポートします。

まずは、sqlite コマンドを利用して、データベースファイルを開き、以下の命令を利用して、データベースをダンプします。
sqlite dbname
sqlite> .mode insert
sqlite> .output db.sql
sqlite> .dump
sqlite> .exit

sqliteコマンドを利用して、新しいデータベースを作ります。ここでは sqlite3 を利用しました。
sqlite3 newfile < db.sql

そして、データベースを入れ替えます。
これは、古いファイル(1)を別のファイル名(2)にして、バックアップとしてとっておきます。新しいファイルを「古いファイル(1)」にします。
mv dbname old
mv newfile dbname

解決方法2

もう少し簡単な方法は、以下のコマンドです。このやり方のほうが、新しいファイルを簡単に作成できます。
sqlite3 dbname .dump | sqlite3 newfile
mv dbname old
mv newfile dbname

注意事項

しかしながら、必ずしも、うまくいくわけでもないようです。
500MB ほどある データベースファイルをダンプしたところ、 10MB のファイルができました。
おそらく、途中までしか読めなかったのではないでしょうか。

予防措置

日頃からデータベースのバックアップは、きちんと とっておいたほうがいいでしょう。データが壊れてからでは、何もできません。また、バックアップから元に戻せることも、確認しておくべきです。バックアップをとってあるから大丈夫と思っていても、ちゃんとバックアップがとれているかどうかは、確認してみないとわかりません。また、バックアップを戻すときには、試験環境を作ってやることをお勧めします。間違った手順で、本番の環境を破壊してしますと困ります。

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー