エックスサーバーの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を使ってエクスポートしたところ無事にインポートできました。

前の記事