concreteCMSのデータベース移行エラーの原因と解決方法
エックスサーバーのMysQL5.7のDBをエクスポートし、同じサーバーにインポートすると下記のエラーが発生しました。
INSERT INTO `MessengerTaskProcesses` VALUES ('11c10c01-3e64-11ef-9741-00163efce8d6',6,'{\"fields\": [{\"key\": \"after\", \"value\": \"\"}]}');
MySQL のメッセージ: ドキュメント
#3144 - Cannot create a JSON value from a string with CHARACTER SET 'binary'.
出てきたエラーメッセージで検索していると、絵文字が不具合を起こしているのかと思ってたのですが、 絵文字を使っていない他のサイトも同様のエラーが出たので、絵文字ではなかったです。
次にconcreteCMS9のシステム動作要件を見ていると、下記のようになっていました。
データベース
MySQL(5.7 以上)またはMariaDBのどちらも動作します。
MySQLを使用する場合は、InnoDBテーブルがサポートされていることを確認してください。
https://concrete5-japan.org/help/5-7/developer/installation/system-requirements/
現在利用しているエックスサーバーの仕様は最新のものではなく、MariaDBが利用できません。 試しにMariaDBにて作成した別のサイトのデータをエクスポートし、エックスサーバーのデータベースにインポートしたところ、問題無くインポートが完了しました。
エックスサーバーのコントロールパネルの「MySQLバックアップ」からバックアップしたデータなので、問題なくエクスポートできているものだと思っていたのですが…。 エックスサーバーのphpmyadminよりエクスポートしたところ、一瞬下記のようなエラーが表示されエクスポートが完了しませんでした。
警告:このページのフォームは1000個以上のフィールドがあります。このまま送信すると、PHPのmax_input_vars 設定の制限により、いくつかのフィールドは無視されることがあります。
という事は、エックスサーバーのコントロールパネルからエクスポートしたデータベースに、何らかの問題があるという事になります。
試しにadminer.php(データベース管理ツール)を使って、データベースをエクスポートしたところ、無事にエクスポートが完了しました。またそのデータをエックスサーバーのデータベースにインポートしたところ、問題無くインポートが完了しました。
つまりエックスサーバーのphpMyadminとコントロールパネルからのデータのエクスポート時にフィールド数の上限があり、途中までしかデータベースがエクスポートできていななかったという事になります。
現在エックスサーバーのバージョンが最新のものではないので、最新のバージョンにアップグレードすれば何の問題もないと思います。ただメールソフトの設定が変わったりするので、利用されているメールアカウント数が多い場合は簡単にアップグレードできないかもしれません。その場合はadminer.phpを使ってエクスポートするようにしてください。
補足
以前からローカルのxammpで作成したconcreteCMSのサイトも移行が上手く行ってなかったので、今回と同様にadminer.phpを使ってエクスポートしたところ無事にインポートできました。