WordPressのデータを移行するとき、みなさんどうしてますか!wordmoveですよね!おわり!
とはいかない状況だと、大体SQLデータをインポートするか、プラグインを使うかになると思います。
-
古いサーバー(coreserver)
- MySQL5.1(…)
-
新しいサーバー(VPS)
- MySQL5.7
上記の環境で起こったトラブルなのですが、プラグインを使ってもうんともすんとも言わない、SQLデータをMySQLに取り込んでもうんともすんとも言わないという意味不明な状況に陥ってしまい、にっちもさっちも行かなくなって途方に暮れてしまいました。
WPで使ったプラグインは以下
- All-in-One WP Migration
- duplicator
2大WP移行プラグインではないでしょうか。全部移行してくれるので非常に便利です。ただ、どっちも動きませんでした。
エラーログを見る
エラーログを見ると、SQL文でエラーが起きていました。
エラーログは消えてしまいましたが、INSERTに失敗するのが確認できました。要するに投稿(wp_postテーブル)がインポートできない状況になります。
原因はSTRICTモード
mysql> SHOW VARIABLES LIKE 'sql_mode';
--------------
SHOW VARIABLES LIKE 'sql_mode'
--------------
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| sql_mode | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
自分の環境では、sql_modeが上記のような設定になっていました。
デフォルトでSTRICTモードになっており、吐き出されたSQL文ではエラーが起きるようになっていたようです。
解決策はSTRICTモードの解除
sql_mode=''
mysql> SHOW VARIABLES LIKE 'sql_mode';
--------------
SHOW VARIABLES LIKE 'sql_mode'
--------------
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_mode | |
+---------------+-------+
1 row in set (0.01 sec)
my.cnfファイルに**sql_mode=''**を追加してあげることによりSQLが動き、インポートすることができました。
僕の場合はduplicatorを使用しました。
インポートが終わったらsql_mode=''は削除したほうが良いでしょう。
おわりに
レンタルサーバーでは5.7を動かすところはまだないかなと思いますが、自分でサーバーを立てたりしてデータを移行する場合はもしかするとハマるかもしれません。