エックスサーバーの「新サーバー簡単移行機能」を使って移行する際に、設定変更が必要だったりうまくいかなかった内容まとめました

このブログが動いているエックスサーバーで「新サーバーへ移行できる機能」の提供を始めたという案内メールが届いていました。

自分が利用しているサーバーで、移行機能を提供できる準備が整っていれば案内が届くようです。(「まだ移行できないよ!」という場合は、案内が届くまで待ちましょう)

ところで「新サーバー」って何ですか

端的に書くと、新サーバーは「今使っているサーバーよりも性能がいいサーバー」のことで、新サーバーに移行して「性能がいいサーバーでサイトを動かしてみませんか」ってことですね。

新サーバーの仕様など詳細については、「sv2001以降のサーバーのサービス仕様について │ レンタルサーバー【エックスサーバー】」をご参考ください。

というわけで、さっそく移行作業を行いました。

新サーバー移行までの流れ

「移行に際して注意することってないの?」「新サーバーへどうやって移行するの?」といった疑問については、以下の2つのページにおおよそ書いてあるので、移行の流れや具体的な作業内容については理解できると思います。

ちなみに移行機能は無料で使えますが、作業は手動で行います。そして、

  • データのコピーまでにかかる時間
  • 移行前に行う作業(メールやSFTPソフトの設定など)
  • 無事に移行が済んでいるかどうかを確認する作業
  • 移行に問題があれば修正をする作業

などを考えると、移行が完全に完了するまで余裕を持ったスケジュールを立てたほうがいいですね(もちろん、移行するデータの量や発生する作業内容によってかかる時間は変わると思います。私の場合は約2日ほどかかりました)。

手順に載っていない作業が必要でした

ここで本題ですが、移行作業の際には、手順には載っていない設定変更が必要だったり、うまくいかなかったことがありました。

それは私の環境で起こった特有のことかもしれませんし、単に手順に載ってないだけかもしれませんね。その辺はわかりませんが、こういった移行作業は個人的には頻繁に行う作業ではないので、今後も必要になった時のために作業メモを残しました。

もし似たような情報をお探しの方がいらっしゃいましたら、ご参考くださいますと嬉しいです。

データコピー作業の際にエラーが出ていました

これは新サーバーへデータコピーをする際に起こりました。データコピーが完了するとエックスサーバーからメールが届きます。そのメールには、以下のように「ファイルコピー時にエラーが出ているよ」という内容が書かれていました。

 【!】ファイルコピー時にエラーが発生しています
───────────────────────────────────

このたびのデータコピー作業において、最新サーバー環境への
ファイルコピーに失敗したフォルダ・ファイルがございます。

最新サーバー環境へ切り替える前に、
以下「データコピー状況の確認」でご案内の手順に沿って、
『データコピー実行ログ』をご確認くださいますようお願いいたします。

メール中に書かれている通り「データコピー実行ログ」を確認しました。

データコピー実行ログを確認する方法

エックスサーバーのインフォパネルにログインをして「新サーバー簡単移行」を選択します。

移行サポート機能の中に「データコピー実行ログ閲覧」というボタンがあるので選択します。

データコピー実行ログ閲覧ページには「ファイルコピー時のエラーログ」と「ファイル補正ログ」が残されています。

ログの種類ログの内容
ファイルコピー時のエラーログデータコピーの際に起こったエラー内容が残っている
ファイル補正ログデータコピーの際にファイルの内容を変更した履歴が残っている

  • DBホスト名の変更
  • .htaccessの不要な記述のコメントアウト
  • APCの無効化
  • OPcacheの有効化

など

「ファイルコピー時のエラーログ」を見ると、以下のエラーが残っていました。

mirror: Fatal error: gnutls_record_recv: The TLS connection was non-properly terminated.
mirror: Fatal error: max-retries exceeded

エックスサーバーに問い合わせました

上記のエラーはどの時間帯に起こったのか、どのファイルなのか具体的な内容は書かれていませんでしたので、エックスサーバーに対応方法を問い合わせました。

回答がきました

エックスサーバーからの回答を端的に書くと、

エラーの特定は難しいけど、確認するとデータコピーは正常に完了しているみたい。
エラー検知時にシステムによる自動再コピー処理にて問題は解決していると思う。
もし不安なようなら、移行後にサイトを確認してね。

と私は読み取りました。今のところ、このエラーによってどんな影響が起こっているのかは自力で見つけて解決するしかないみたいです。何かわかり次第、追記します。

WordPressで作ったサイトが503エラーで表示されなくなった

WordPressで作ったサイトのうち、移行後に503エラーで表示がされないサイトが1つありました。

エックスサーバーのコントロールパネルから、該当するサイトのエラーログをダウンロードして内容を見ると、以下のようなログが残されていました。

/home/xxx/public_html/.htaccess: Invalid command 'suPHP_ConfigPath', perhaps misspelled or defined by a module not included in the server configuration

原因

.htaccessファイルに書かれている「suPHP_ConfigPath」に関する記述があると503エラーが出ます。

解決策

サーバーから.htaccessファイルをダウンロードしてテキストエディターで開いて、以下の記述を削除してアップロードし直せばOKです。

suPHP_ConfigPath /home/xxx/xserver_php/

「suPHP_ConfigPath」の記述については、データコピーの際に自動でコメントアウトで無効化される(無効化されたものは「ファイル補正ログ」に残されています)のですが、それがうまく実行されないサイトがあった、ということだと思います。

そこそこ多めの画像ファイルがあるフォルダは移行されなかった

ある1つのフォルダに3万枚ほど画像ファイルが入っていたのですが、新サーバーに画像が1枚もコピーされていませんでした。

検証用に作ったサイトでそれらの画像を使っているのですが、もしかしたら1つのフォルダに入れている画像ファイルが多すぎるのかもしれないです。(あくまで仮説なので、わかり次第追記します)

そのサイトの構成などを改めて確認すると、見直しを検討する箇所がいくつかありました。いいタイミングでした。

Cronが動かない&設定変更できない

Cronで処理を自動的に定期実行しているサイトがいくつかあるのですが、新サーバーでの実行は全て失敗しています。(メールでCronの実行結果が通知されるように設定しています)

これは結構致命的な内容なので早急に解決したいのですが、現在エックスサーバーに問い合わせをしていまして、やりとり中です。何か分かりましたら追記いたします。

また、エックスサーバーのサーバーパネルからCronの追加や編集を行う画面があるのですが、Cronに設定しているコマンドを見直そうと設定を変更しましたが、反映されませんでした(2017/02/20時点で反映されるようになりました)。これはエックスサーバーの問い合わせにより不具合が解消されました。

2017/02/23追記:Cronの書き方を変えました

エックスサーバーのサポートの方と数回この件でやり取りをした結果、Cronが動かなかった原因を知ることができました。

新サーバー移行へした際に「PHPの実行形式」が変更され「CGI環境」から「CLI環境」に仕様変更されたそうです。

というわけで、これまでの書き方とこれからの書き方をまとめました。

これまでの書き方(php7.0を使う場合)

/usr/bin/php7.0 {実行したいファイルまでのルートからのパス}

これからの書き方(php7.0を使う場合)

/usr/bin/php-fcgi7.0 {実行したいファイルまでのルートからのパス}

または

cd {実行したいファイルが入っているディレクトリ(フォルダ)}; /usr/bin/php7.0 {実行したいファイルまでのルートからのパス}

「CGI環境」の場合は、CGIで実行するために様々な補正を行っており、
その1つに実行ディレクトリの移動が含まれるそうです。これが今回の新サーバー移行による仕様変更で「CLI環境」になったことで「補正が適用されなくなったので、Cronが動作しなかったんだろう」という見解をエックスサーバーのサポートの方からいただきました。

・・・上記の内容はちょっと難しいと思うので例を書きますが、これまでのCronの書き方だと、実行したいファイル中に「相対パス(./ など)」を使っているとうまく動きません。

なぜSSH経由だと実行可能なのか?

実はエックスサーバーへサポートをお願いする前に、Cronが動かなくなってしまった原因を私なりに切り分けしてからサポートを受けたいと考えていまして、SSH接続を行いCronに登録していたコマンドと全く同じコマンドを実行したのですが、SSH経由だとうまく動作しました。

私は初めてこの現象に遭遇しましたので「同じコマンドなのにCronだと動かなくて、SSH経由だと動くのはなんでだろう」と疑問に思っていました。

その疑問についても、エックスサーバーのサポートの方からご連絡いただきまして説明いただきました。

SSH経由での実行だと「CLI環境」でも実行ディレクトリが正しく認識され、正常に動作するそうです。

そうだったのか・・・!今回の件で、大変勉強になりました。

Cronで定期的に何かのデータを集計したり、更新したりなどされているサイトは、Cronが動かないことで困ることもあると思います。もし似たような状況で「動かない!」という場合は、Cronの書き方を見直してもいいかもですね。

エックスサーバーのサポートには上記のことは載っていないです。(2017/2/24 時点)載せていない理由をサポートの方に確認したのですが、私が問い合わせた内容は特別な状況なので載せていない、という回答でした。

新サーバーの仕様変更でCronのPHPの実行形式を「CLI環境」のみしか動かせないように変えているので、今後色んな方が遭遇しそうだと思うんだけど・・・なので、「今まで動いていたCronが動かない!」っていう方は、バンバンお問い合わせをした方がいいですね。認識を変えていただけるかもしれません。

SFTPソフトの設定変更

FilezillaなどSFTPソフトで公開鍵暗号方式を利用して接続をしている場合は、再設定をする必要があります。

エックスサーバーのサーバーパネルから、SSH設定画面を開きます。

「公開鍵認証用鍵ペアの生成」タブを選択して、パスフレーズを入力して鍵ペアを生成します。

生成した鍵ペアをダウンロードして、SFTPソフトに再設定すればOKです。

WordPressで作ったサイトのデータをバックアップするプラグイン「VaultPress」の設定変更

WordPressで作ったサイトのデータをバックアップしてくれる有名な「VaultPress」というプラグインを使っているのですが、VaultPressの管理画面でバックアップ先のホスト名を新サーバーのホスト名に変更する必要があります。

Server Addressに新サーバーのホスト名を入力する

※公開鍵はエックスサーバーのSSH設定の際に登録済みでしたら、改めて設定する必要はありません。

新サーバーのホスト名の調べ方

新サーバーのホスト名を調べるには、エックスサーバーのインフォパネルにログインをして「新サーバー簡単移行」を選択します。

移行サポート機能の「移行元・移行先への操作」ページに書かれています。

まとめ

エックスサーバーの「新サーバー簡単移行機能」を使って移行作業を行いましたが、ほとんど手間のかからなかったサイトもありましたし、逆にかなり手間がかかるサイトもありました。

運営しているサイトの数だけ環境が異なるとは思いますが、移行の際に少しでも参考となる箇所がありましたら幸いです。

著者:bouya Imamura