wordpressのバックアップ・リストアテスト時に遭遇したmysqlエラーをまとめて紹介します。
今回試したのは、wordpressのデータベースバックアップとしては
- phpMyadminエクスポート(MySQL5.5.38、phpMyAdmin3.3.10.5)
データベースのリストア先には(別環境)
- mysqlコマンド(MySQL5.5.46)
で実行するテストをしました。
レジュメ
mysqlコマンドによるデータインポートコマンド
今回リストアに使用したmysqlコマンドは以下のように実行しました
mysql -u aws -p wordpress < export.sql
上記は、「aws」というデーターベースユーザーで
「wordpress」というデータベースに、phpMyAdminでエクスポートした「export.sql」をインポートする意味です。
この方法で実施し、遭遇したエラーを紹介します。
ERROR 1062 (23000) at line 1422490: Duplicate entry '1' for key 'PRIMARY'
上記エラーメッセージが出力され、データがインポートできませんでした。
もう一度実行したら以下のようにエントリー番号が変わりました
ERROR 1062 (23000) at line 42: Duplicate entry '107160' for key 'PRIMARY'
これらは重複したプライマリキーがあるというメッセージです。
今回インポートしたデータベース(リストアしたデータベース)に既にデータがあった(既にwordpress記事が一件あった)ために発生しました。
phpMyAdminからのエクスポート時に、データベース上のテーブルを一度削除してから登録しなおすようなオプションを加えましょう。
- 「DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT を追加」にチェックを入れます
※ その他のオプションは初期設定のままです
ERROR 2006 (HY000) at line 1427195: MySQL server has gone away
このメッセージは何回実行しても変わりませんでした。
phpMyAdminのエクスポート出力で
- 長い INSERT 文を作成する
- 作成するクエリの最大長
を変えてもやはり「MySQL server has gone away」エラーでデータが取り込めませんでした。
結果的に、リストア先のmysqlサーバー設定を変更することで「MySQL server has gone away」が解消されました
sudo vi /etc/my.cnf
my.cnfを開き「max_allowed_packet = 32M」設定を入れ保存します
mysqldサービスを再起動します。
sudo service mysqld restart
これで無事にデータベースのデータをインポートできました!
wordpress管理画面にログインできない。バックアップ先URLにリダイレクトされてしまう
wordpress管理画面にログインしようとしたところ、バックアップ元のURLに転送されてしまい、リストア先のURLにログインできなくなりました。
データベースのデータをインポートした影響です(データベース内にURLデータもあるということです)。
※ 今回試した環境は、バックアップ先とリストア先が別々のURLである環境です
sudo vi /var/www/html/wp-config.php
wp-config.phpを修正し、URLに関してはデータベース情報を見ないような優先設定を入れます。
define( 'WP_SITEURL', '<リストア先のURL>' );
define( 'WP_HOME', '<リストア先のURL>' );
これでwordpress管理画面にログインできるようになりました。