9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MySQL5.7で何も知らずにWordPressのSQLデータをインポートすると死ぬ場合がある

Last updated at Posted at 2016-09-13

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モードの解除

/etc/my.cnf

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を動かすところはまだないかなと思いますが、自分でサーバーを立てたりしてデータを移行する場合はもしかするとハマるかもしれません。

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?