XserverからさくらのレンタルサーバーへのWordPress移行ガイド(413エラーとの闘い)

XserverからさくらのレンタルサーバーにWordPressを引っ越しする際に413 エラー(Request Entity Too Large)と闘った備忘録。
**ある程度初級の方でもできるように、ちょっと細かめに解説してます！
結構長いので、必要箇所だけ見てもらえるといいと思います！**

# 経緯
普段、WordPressのお引越し系はプラグインの[`All in One Migration`](ja.wordpress.org/plugins/all-in-one-wp-migration/)を使う事がほとんどだった。
ごくまれに、テーマをDLしてDBもエクスポートしてphpMyAdminでインポートなどもあった。
今回もそのどちらかで行こうと思った時に、All in One MigrationとphpMyAdminのどちらでも「413 エラー(Request Entity Too Large)」で苦戦したのでその時の備忘録になる。

# なにが起きたか？
- All in One Migrationでデータをインポートしようとすると100%で止まる(413エラー)
- `.htaccess`で`upload_max_filesize `、`post_max_size `、`memory_limit `、`max_execution_time `、`max_execution_time `などは十分な値を設定していた
- さくらのレンタルサーバーのphpMyAdminでDBのインポートを行おうとするとエラー(200MBくらい、これも413エラー)

何やっても413エラー。
DBとか細かくインポートしたらきっと大丈夫だと思うんだけど、そんなことはしたくない!ということで思い切ってやってみました。

# 前提
- WordPressについて
- ターミナルについて
- SSHについて
- レンタルサーバーについて


この辺は必要になるかと思います。
正直ある程度は見よう見まねできるとは思いますが自己責任で…。

XserverもさくらのレンタルサーバーもどちらともSSHが使えたので、今回はSSHで接続して色々やってみました。
FTPツールでもできると思いますが、時間がかかるので圧縮して転送する方法を選びました。

:::note info
さくらのレンタルサーバーでSSHが使えるのは「スタンダードプラン」以上なので注意です([さくらのレンタルサーバー:SSHを利用したい](https://help.sakura.ad.jp/rs/2247/))
:::

ドメインの設定はサクラのレンタルサーバー側で済ませている前提です。

https://help.sakura.ad.jp/domain/2146/


# 作業内容
大まかなステップとしては
1. Xserverからデータをローカルにダウンロードする
1. さくらのレンタルサーバーにデータをアップロードする

という流れになります。


## Xserverからデータを落としてくる
Xserver側の作業としては次の通り。
1. XserverにSSHで接続する
1. 該当WordPressのデータ(WordPressのインストールディレクトリ丸ごと)を圧縮する
1. DBをエクスポートする
1. sqlデータと圧縮したデータをローカルにダウンロードする


### 1. XserverにSSH接続をする
SSHの設定はこちらのXserver公式の記事を参照

https://www.xserver.ne.jp/manual/man_server_ssh.php

:::note warn
SSH接続するのに`~/.ssh/config`に設定情報を保存して
```
ssh xserver
```
で接続できる前提でいきます
:::


### 2. WordPressデータを圧縮する
今回の圧縮形式は`tar.gz`形式を使用します。
Xserverだと`~/ドメイン名/public_html/`以下に公開データがあると思います。
今回は`~/hoge.com/public_html/wp`がインストールディレクトリという設定で進めてみます。
イメージとしては下記の通りです。

```
~/hoge.com/
└── public_html/
    └── wp/
        ├── wp-admin/
        ├── wp-content/
        │   ├── plugins/
        │   ├── uploads/
        │   └── thmemes/
        │       └── original-theme/
        ├── wp-includes/
        ├── wp-config.php
        └── その他諸々...
```
このWordPressを構成している`wp`ディレクトリをごそっと圧縮しちゃいます

:::note warn
public_html直下を圧縮するイメージです。DBもそのままお引越しするので、公開ディレクトリ以下の全部をそのまま移すというのがWordPressの設定もそのままでいけるのでわかりやすいと思います。ディレクトリ構成を変える場合には、WordPress側の設定も変わるので注意。
:::

まずは該当ディレクトリに移動します
```
cd ~/hoge.com/public_html/
```

次に圧縮します
```
tar -czvf wordpress-files.tar.gz .
```
これでカレントディレクトリ(例だとpublic_html以下)の物を全て圧縮して`wordpress-files.tar.gz`というファイルを作ってくれます。
これでファイルの準備は完了です

### 3. DBをエクスポート
DBエクスポートするためにまずはDB情報を確認します。
まずはWordPressのインストールディレクトリに移動します。
```
cd ~/hoge.com/public_html/wp
```
インストールディレクトリには`wp-config.php`という、WordPressの設定ファイルがあります。
この中にDBの情報が入っているので調べます。
```
cat wp-config.php | grep DB_
```
こうすると
```
define( 'DB_NAME', 'db_name' );
define( 'DB_USER', 'db_user' );
define( 'DB_PASSWORD', 'db_pass' );
define( 'DB_HOST', 'mysqlXXXX.xserver.jp' );
define( 'DB_CHARSET', 'utf8' );
define( 'DB_COLLATE', '' );
```
のように表示されるはずです。
この情報を使ってsqlファイルを作成します。
次のコマンドを実行するんですが、後でファイルをダウンロードする際に楽なので、先ほど作った`wordpress-files.tar.gz`がある階層と同じところに出力をしましょう

```
cd ~/hoge.com/public_html
mysqldump -u db_user -p db_name -h mysqlXXXX.xserver.jp > wordpress_export.sql
```
この`db_user`、`db_name`、`mysqlXXXX.xserver.jp`は先ほど調べた値に置き換えてください。
これでEnterを押すとパスワードを求められるので、調べたパスワード(例だとdb_pass)を入力して完了です。

これで必要なファイルが２つ揃ったので確認しましょう。
`ls -la`コマンドで該当ファイルがきちんとあるか確認してください。
```
~/hoge.com/
└── public_html/
    ├── wordpress_export.sql <=これと
    ├── wordpress-files.tar.gz <=これ
    └── wp/
        ├── wp-admin/
        ├── wp-content/
        │   ├── plugins/
        │   ├── uploads/
        │   └── thmemes/
        │       └── original-theme/
        ├── wp-includes/
        ├── wp-config.php
        └── その他諸々...
```
最後に、このディレクトリで`pwd`コマンドを実行してください。

```
pwd
/home/server_name/hoge.com/public_html
```
これは後でダウンロードするときに使います！

### 4. Xserverからローカルにデータをダウンロードする
作成したデータをローカルにダウンロードします。
今回は`rsync`を使いますが、`rsync`以外でも、`scp`やFTPツールなど、使いやすい・やりやすい方法でいいと思います！

まずは、Xserverに繋いでいる場合には`exit`をしてローカル環境に戻りましょう。

ファイルをダウンロードするディレクトリに移動します。
今回は`~/projects/hoge.com/`というところにダウンロードするという想定でやってみます。
ご自身の環境に合わせてください！

まずは該当ディレクトリに移動
```
cd ~/projects/hoge.com/
```

次に`rsync`でダウンロードします
先ほどXserverで最後に出力したパスを使います
```
rsync -avz xserver:/home/server_name/hoge.com/public_html/wordpress_export.sql ./
rsync -avz xserver:/home/server_name/hoge.com/public_html/wordpress-files.tar.gz ./
```
これでダウンロードができるはずです
ここで`xserver`というのはssh接続のエイリアスの名前なので、`~/.ssh/config`で登録している名前に置き換えてください。

最後に`ls -la`で確認してローカルにファイルがダウンロードできていたら完了です！
ファイルが重い場合には時間がかかるので、気軽に待ちましょう！

## さくらのレンタルサーバーにアップロードする
さくらのレンタルサーバーの場合、Xserverとは違い公開ディレクトリを`www`以下の任意の場所に設定できます。
公開フォルダの設定はさくらの公式のこちらの記事を参照

https://help.sakura.ad.jp/purpose_beginner/2583/#heading-9

事前にデータベースを作成してください。作成方法はさくらの公式サイトを参照

https://help.sakura.ad.jp/rs/2190/?gad_source=1&gclid=Cj0KCQjw05i4BhDiARIsAB_2wfDqOeCQwQeOFHpHMc9nBUG_c_5D2KT05KFRFYhCcD5XZKWo6GAsiIYaAp8TEALw_wcB

やることとしては次の通り
1. さくらのレンタルサーバーにSSH接続をする
1. 公開ディレクトリの作成
1. データをアップロード
1. WordPressデータの解凍
1. データベースのインポート
1. `wp-config.php`の設定

### 1. サクラのレンタルサーバーにSSH接続
SSHの設定はこちらの公式の記事を参照

https://help.sakura.ad.jp/rs/2247/?gad_source=1&gclid=Cj0KCQjw05i4BhDiARIsAB_2wfCF7U1_W3jFsqvR22RgP2A7zFT_oKlPv9nmemjP9WTSm0_ftXXmGkIaAqSmEALw_wcB

:::note warn
SSH接続するのに`~/.ssh/config`に設定情報を保存して
```
ssh sakura
```
で接続できる前提でいきます
:::

### 2. 公開ディレクトリの作成
今回はhoge.comというディレクトリを作成して、そこを公開ディレクトリにしようと思います。
```
cd ~/www/
mkdir hoge.com
```
これでディレクトリの設定は完了です。
さくらのコントロールパネルからも公開ファイルの設定を忘れずに！

アップロード時に使うのでここのパスを確認しておきましょう

```
pwd
/home/server-name/www/hoge.com
```

### 3. データをアップロード
Xserverからローカルにダウンロードしたファイルをアップロードします。
さくらサーバーからは`exit`してローカル環境に戻ります。

まずはディレクトリ移動
```
cd ~/projects/hoge.com/
```

次に`wordpress_export.sql`と`wordpress-files.tar.gz`をアップロードします。
アップロード先は先ほど`pwd`で確認したパスになります。
```
rsync -avz ./wordpress_export.sql sakura:/home/server-name/www/hoge.com/
rsync -avz ./wordpress-files.tar.gz sakura:/home/server-name/www/hoge.com/
```
ここでsakuraというのはssh接続のエイリアスの名前なので、`~/.ssh/config`で登録している名前に置き換えてください。

これでアップロードは完了しているはずなので、さくらにSSH接続して`~/www/hoge.com/`で`ls -la`をしてみて該当ファイルがあるか確認してください。
ファイルが大きいと時間がかかるので気長に待ってみてください。

```
~/www/
└── hoge.com/
    ├── wordpress_export.sql <=これと
    └── wordpress-files.tar.gz <=これがあるか確認
```

### 4. WordPressデータを解凍する
まずは該当ディレクトリに移動します
```
cd ~/www/hoge.com
```
次のコマンドを使って解凍します
```
tar -xzvf wordpress-files.tar.gz -C ./
```
ファイルが大きいと時間がかかりますので、気長に待ちましょう！

完了したら
```
~/www/
└── hoge.com/
    ├── wordpress_export.sql
    ├── wordpress-files.tar.gz
    └── wp/
        ├── wp-admin/
        ├── wp-content/
        │   ├── plugins/
        │   ├── uploads/
        │   └── thmemes/
        │       └── original-theme/
        ├── wp-includes/
        ├── wp-config.php
        └── その他諸々...
```
このように元通りになっていたら完了です！

### 5. データベースのインポート
次にデータベースのインポートを行います。
ここで使用する情報はサクラのレンタルサーバーで作成したデータベースの情報が必要になりますので用意してください！

まずはディレクトリ移動
```
cd ~/www/hoge.com/
```

次にインポートを行います。
必要な情報は
- データベースのホスト名 (`mysql1234.db.sakura.ne.jp`とします)
- データベース名(`server-name_db`とします)
- ユーザー名(`server-name_user`とします)
- パスワード(`password`とします)

です

```
mysql -h mysql1234.db.sakura.ne.jp -u server-name_user -p server-name_db < ./wordpress_export.sql
```
これでインポートが完了するはずです。

### 6. `wp-config.php`の設定
サクラのレンタルサーバーで作成したデータベースの内容にあわせて、`wp-config.php`の内容を書き換えます。
まずは該当ディレクトリに移動します。WordPressがインストールされているディレクトリに移動してください。
```
cd ~/www/hoge.com/wp
```
`ls- la`をして`wp-config.php`があったら正解です。

次に`vim`コマンドを使って書き換えます。

:::note info
vimの使い方がわからない方は、さくらのコントロールパネルからファイルマネージャーを使って編集してもOKです！
このためだけにvimを触らなくてもいいと思うので、ご自身の楽な方で作業をしてください。
:::

```
vim wp-config.php
```
変更する必要がある行は下記の通りで、先ほどデータベースのインポートをした際に使用した情報をそのまま入れます。

```
define('DB_NAME', 'server-name_user');

/** MySQL データベースのユーザー名 */
define('DB_USER', 'server-name_user');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'password');

/** MySQL のホスト名 */
define('DB_HOST', 'mysql1234.db.sakura.ne.jp');
```
矢印(もしくはJ,K,H,Lキー)で該当行に移動して、`i`で編集モード、`esc`で移動モード
編集が終わったら`:wq`で保存です。

# 移管作業完了
これでサーバー移管が完了しました！
ドメインの設定が完了している場合には、サイトURLを開くことでログインなど確認ができるはずです！
お疲れ様でした！

# 終わりに
今まではXserverに移管することがほとんどだったのですが、まさかこんな制限があるとは思いませんでした。
`.htaccess`で上限だけあげたらいけるっしょ！とか思ってた自分が恥ずかしいですね・・・
同じ悩みを抱えてる人がいたら役に立てたらと思います！


# 余談1：さくらのレンタルサーバーに問い合わせてみた
413エラーの連続でクリティカルヒットしてるときに、ここまで来たらきっとWebサーバー側のリミットにあたってるんだと思い問い合わせてみた。もしかしたらなんか設定値変えられるかも？とか淡い期待を抱いていました。
結論、**「共用サーバーのこの設定値に関しては教えられないし変えられない」** との事。
知りたければ試してみてね☆ということ。
つまり、やってみて通った容量が閾値という事だ。
情報はおいてある、欲しけりゃ探せって事ですね。~~どこの海賊王ですか？~~
一応、サポートにデータを渡すとやってくれるみたいなことは言ってましたが、大概の場合、情報を渡す訳にもいかないので結果ダメですね

# 余談2: WordPressのファイルの圧縮について
WordPress運用では、バックアップファイルなどがありそれが異常に重たかったりします。
そういう場合には、古いのを削除してから`tar.gz`にした方が時間短縮になります。
また、今回はWordPressを構成するすべてのファイルを一括で移動しましたが、`wp-content`以下だけとかもありだと思います。