データベーススキーマの確認

移動先: 案内, 検索


あなたのMoodleサイトを過去に複数のバージョンに渡ってアップグレードしている場合、データベーステーブル定義 (スキーマ) に関して、新しく作成される空のMoodleサイトとの差異が生じている可能性があります。これは小さなエラーまたはアップグレードスクリプト内の見落としによって発生します。これらの差異の多くはトラブルを発生させることはありませんが、いくつかは未知または予想外のエラーを発生させる可能性があります。たとえば、フィールドにデフォルト値が追加されたにも関わらず、デフォルト値の存在を前提としてアップグレードスクリプトコードに反映されていない場合、期待どおりに動作しない可能性があります。

アップグレード後の解決方法 (または、アップグレード失敗時の解決方法) は、アップグレードなしで新しく作成されたサイトと実運用サイトに完全に同じコードを使用して比較することです。これを実現する方法は数多くありますが、この記事ではUnixコマンドラインを使用したシンプルな方法を説明します。

  • アップグレードを完了します。
  • 以下のコマンドを使用して、あなたが直前にアップグレードしたサイトからデータベーススキーマを作成してください:
   mysqldump -d -u root -p myproductiondb >production.schema
  • あなたの実運用サイトのデータベースのコードを新しい (ウェブアクセス可能な) ロケーションにコピーしてください (必ず、同じバージョンにしてください)。
  • インストールインストラクションに従って、新しいサイトのために空のデータベースおよびmoodledataエリアを作成してください。
  • 新しいデータベースおよびロケーションを指定するため、config.phpを編集してください。または、config.phpを削除して、インストールスクリプトが自動作成する設定情報を使用してください。
  • config.php (必要であれば) およびデータベースを作成するため、インストールスクリプトを実行してください (この段階で、adminおよびサイト値は重要ではありません)
  • 下記のコマンドを使って、あなたの新しいサイトからデータベーススキーマを作成してください:
   mysqldump -d -u root -p mycleandb >clean.schema
  • 差異を調べるため、下記のコマンドを実行してください。
   diff -u production.schema clean.schema >db.diff

ここで差異を閲覧するため、あなたの好きなエディタを使用して「db.diff」ファイルを開くことができるようになります。

注意: 上記内容はMySQLデータベースのみに適用されます。他のデータベースには、恐らくスキーマのみをダンプする同様の機能が実装されていると考えられます。例えば、PostgreSQLには pg_dump というコマンドがあります。その他の議論に関しては、他のデータベースにも適用できます。

diffファイルを読み解く

最初に以下 (実際の) 例です:

    --
    -- Table structure for table `mdl_backup_config`
       @@ -129,11 +93,11 @@
        DROP TABLE IF EXISTS `mdl_backup_config`;
        CREATE TABLE `mdl_backup_config` (
   -  `id` int(10) unsigned NOT NULL auto_increment,
   +  `id` bigint(10) unsigned NOT NULL auto_increment,
      `name` varchar(255) NOT NULL default ,
      `value` varchar(255) NOT NULL default ,
       PRIMARY KEY  (`id`),
   -  UNIQUE KEY `name` (`name`)
   +  UNIQUE KEY `mdl_backconf_nam_uix` (`name`)
        ) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='To store backup configuration variables';

ファイルには多くの変更されたブロックがあります。「-」の行は取り除かれた行であり、「+」の行は取り除かれた行に対して (実運用サイトからクリーンインストールへと) 置換された行です。そしてここでは、「int」が「bigint」と置換され、キー名が変更されています。これらに関して、技術的にはある時点でアップグレードスクリプトによりアップグレードされるべきですが、省略されています。この場合、Moodleの動作に影響しないと考えられます。

手動で追うには、変更点が多過ぎますが?

あなたは旧および新Moodleデータベースを同期するため、データベース管理プログラムを使用することもできます。

例えば、MySQLデータベースにはMySQL Workbrenchがあります。

あなたが多くの変更を実施している場合、これは非常に有用です。

あなたがUnix/Linuxコマンドラインを使用できる場合、Schema SyncというPythonスクリプトを使って、データベースを更新するコマンドすべてを素早く簡単に生成することができます。

心配する必要がありますか?

フィールドタイプの変更 (互換性のある限り) およびキー名の変更には一般的な課題はありそうですが、問題が発生することはありません。 注意すべき点は不明なフィールドの行およびデフォルト値への変更です。

あなたがMoodle 2.0にアップグレードしようと考えている場合、さらに心配すべきでしょう。アップグレードをスムーズに進めるには、まずこれらの問題を解決した方が良いでしょう。

関連情報