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

あなたのMoodleサイトを複数のバージョンに渡ってアップグレードしている場合、あなたのデータベースのデータベーステーブル定義( "スキーマ")と新しい空のバージョンを作成することとの間に多少の違いがあるかもしれません。サイト。これは、アップグレードスクリプトの小さなエラーや見落としが原因で発生します。これらの違いのほとんどは有害ではありませんが、いくつかは奇妙なまたは予期しないエラーを引き起こす可能性があります。たとえば、デフォルト値がフィールドに追加されていて、デフォルトの存在が想定どおりに機能しない可能性があると想定するアップグレードスクリプトコードにこれが反映されていない場合です。

解決策は、アップグレードを実行した後(または、アップグレードが失敗する前に問題が発生している場合)、「本番」サイトのデータベーススキーマと新しく作成されたサイト(アップグレードが実行されていない)のデータベーススキーマを正確に比較することです。同じコードベースこれを行う方法はいくつかありますが、この記事ではUnixコマンドラインを使用した簡単な方法の概要を説明します。

  • アップグレードを完了する
  • 次のコマンドを使用して、最近アップグレードしたサイトからデータベーススキーマを生成します。
 #MySQL
   mysqldump --no-data -u root -p myproductiondb > production.schema
   #PostgreSQL
   pg_dump --schema-only -U postgres myproductiondb > production.schema
  • 本番データベースのコードを新しい(Webからアクセス可能な)場所にコピーします(これは重要です。*同じバージョンである必要があります)。
  • インストール手順に従って、新しいサイト用に新しい空のデータベースとmoodledata領域を作成します。
  • 新しいデータベースと場所を指すようにconfig.phpファイルを編集するか、それを削除してインストールスクリプトを使用します。
  • インストールスクリプトを実行して(該当する場合)config.phpファイルとデータベースを生成します(adminとsiteの値は重要ではありません)
  • 次のコマンドを使用して、新しいサイトからデータベーススキーマを生成します。
 #MySQL
   mysqldump --no-data -u root -p mycleandb > clean.schema
   #PostgreSQL
   pg_dump --schema-only -U postgres mycleandb > clean.schema
  • 次のコマンドを実行して違いを検出します。
 diff -u production.schema clean.schema> db.diff

あなたは今違いを見るためにあなたのお気に入りのエディタでdb.diffを見ることができます。

注意:上記はMySQLデータベースにも当てはまります。他のデータベースは、スキーマのみをダンプするための同様の機能を持つ可能性があります。たとえばPostgreSQLにはpg_dumpコマンドがあります。議論の残りはまだ適用されます。

差分ファイルの解釈

まず、これが(本当の)例です。

 - 
     - テーブル `mdl_backup_config`のテーブル構造
       @@ -129,11 + 93,11 @@
        DROP TABLE IFが存在する場合 `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デフォルト
      `value` varchar(255)NOT NULLデフォルト
       主キー( `id`)、
    - 一意キー `name`(` name`)
   + UNIQUE KEY `mdl_backconf_nam_uix`(` name`)
        ENGINE = MyISAM AUTO_INCREMENT = 15 DEFAULT CHARSET = utf8 COMMENT = 'バックアップ設定変数を保存する';

ファイルにはたくさんの変更ブロックがあります。 - 行は取り出される行を示し、+行はそれらを置き換えるための行を示します(製造からクリーンまで)。そのため、ここではintがbigintに置き換えられ、キー名が変更されました。技術的には、どちらもアップグレードスクリプトによって変更されているはずですが、見逃されています。この場合、それらはMoodleの動作に影響を与える可能性は低いです。

手動で追跡するための変更が多すぎますか?

データベース管理プログラムを使用して、古いMoodleデータベースと新しいMoodleデータベースを同期させることもできます。

例えばMySQLデータベース用のMySQL Workbench

たくさんの変更がある場合、これはとても役に立ちます。

Unix / Linuxのコマンドラインを使用できる場合は、PythonスクリプトのSchema Syncを使用すると、データベースを更新するためのすべてのコマンドをすばやく簡単に生成できます。

私は心配するべきですか?

フィールドタイプの変更(互換性がある限り)とキー名の変更は一般的な問題のように思われますが、問題は発生しません。注意すべきことは、欠けているフィールドの線に沿って、デフォルト値に変更することです。

あなたがMoodle 2.0にアップグレードしようとしているなら、もっと心配するべきです。アップグレードを円滑に進めるために、これらの問題を修正することは非常に良い考えです。

関連情報

  • SiteAdmin - > Misc - > XMLDBエディタ - > Check Checkes存在しないインデックスレポート