レンタルサーバーに追加料金なしでバックアップする方法

クラウドとレンタルサーバーの違い、それぞれの良さ

私はこれまで、OracleCloudGoogleCloudAWSなどのクラウドサービスをメインに使っていました。これらのサービスは、とても自由度が高く、いろいろなことができるのが魅力です。例えば、自分でサーバーを作って、好きなソフトをインストールしたり、カスタマイズしたりできるんです。
ただし、この自由さには、ある程度の知識が必要です。サーバーの設定やセキュリティの管理など、自分で対応しなければならない部分が多いため、初心者にとっては少しハードルが高いかもしれません。

一方で、最近私は、ロリポップエックスサーバーさくらのレンタルサーバーなどの、レンタルサーバーサービスも利用する機会が増えてきました。これらのサービスは、クラウドに比べて自由度は低いですが、その代わり簡単に使えるという大きな利点があります。設定が簡単で、難しい作業をしなくてもサーバーが使えるため、初心者にはとても優しいサービスです。

ただし、1つ注意点があります。それは、レンタルサーバーではバックアップを取る際に追加料金がかかる場合がある可能性があることです。例えば、定期的に自動でバックアップを取ってくれるサービスが用意されていることが多いのですが、それを利用するには追加費用が発生することがあります。

自分でバックアップを取る方法

そこで、今回はその追加料金を払わずに、自分でバックアップを取る方法をご紹介します。レンタルサーバーでもrsyncというツールを使えば、簡単にバックアップを取ることができるんです!

rsyncとは?

まず、rsyncって何?と思われるかもしれませんね。rsyncは、簡単に言うと、ファイルやフォルダを効率よくコピーしたり、同期したりするためのツールです。例えば、あなたがパソコンやサーバーにある大切なデータをバックアップしたい時、rsyncを使えば簡単に、しかも無駄なくそのデータを他の場所にコピーすることができます。

rsyncがすごいのは、ただファイルをそのまま丸ごとコピーするのではなく、変更された部分(差分)だけをコピーできるところです。これが意味するのは、大量のファイルや大きなデータでも、すでにある部分は再度コピーせず、必要な部分だけを素早く転送できるということなんです。これによって、時間もデータ量も節約できちゃうんです。

じゃあ、どうやって使うの?

「なるほど、rsyncって便利そう。でも、どうやって使うの?」と思っているかもしれません。心配いりません、rsyncは意外とシンプルです。次に、具体的な使い方を見ていきましょう。

まず、基本的なrsyncコマンドはこんな感じです:

rsync -avz /path/to/source/ /path/to/destination/

このコマンドは、/path/to/source/というフォルダの中身を、/path/to/destination/にコピーしてくれるものです。それぞれのパーツを簡単に説明すると:

  • -a:アーカイブモードで、ファイルの権限やタイムスタンプなどをそのまま維持してコピーします。
  • -v:詳細モードで、何がコピーされたのか表示してくれます(「どのファイルが転送されたのか知りたい!」という場合に便利)。
  • -z:圧縮をかけてデータを転送するので、転送時間が短縮されます。

もっと具体的な例を見てみよう

例えば、レンタルサーバーにある大切なデータを自宅のパソコンにバックアップしたいとします。そんなとき、このように使います:

rsync -avz /home/バックアップすべきディレクトリ/ user@自宅のIPアドレス:/home/user/backup/

これで、レンタルサーバー上のデータが、自宅のパソコンに安全にコピーされます。何度も言いますが、rsyncの強みは「差分」だけをコピーするので、時間やデータ量を節約できるところです。

FTPだけでは不十分!WordPressサイトの完全なバックアップにはデータベースも忘れずに

WordPressを運営している多くの方は、FTPでファイルをバックアップしているかもしれません。しかし、WordPressのバックアップはファイルだけでは不十分です。WordPressサイトには、投稿やページの内容、コメント、プラグイン設定など、すべての重要なデータがデータベースに保存されています。このデータベースがないと、ファイルだけではサイトを完全に復元することができないんです。

ここで重要なのは、ファイルのバックアップとデータベースのバックアップを両方行うことです。特に、レンタルサーバーを使っている場合は、データベースのバックアップを定期的に取るのが必須です。

SSH接続を使ったバックアップのすすめ

WordPressのバックアップを効率よく行うために、通常はSSH接続が可能なサーバー環境が必要です。SSHを使うことで、手軽にファイルやデータベースのバックアップを自動化できます。多くのサーバーでは、SSH接続が可能なので、これを活用しない手はありません。

VS Codeを使いたいけど…

Visual Studio Code(VS Code)は、SSH接続を使ってサーバーを操作する際にとても便利なツールです。VS CodeのRemote – SSH拡張機能を使えば、サーバー上のファイルを簡単に編集できるほか、ターミナルから直接コマンドを実行することも可能です。そのため、バックアップ作業などもスムーズに行えるのが特徴です。

ただし、制限があるレンタルサーバーでは、VS Codeを使ってサーバーに接続するのが難しい場合があります。たとえば、権限の問題やセキュリティ設定によって、VS Codeのリモート機能がうまく動作しないことがあるのです。

TeraTermでSSH接続する方法

そこで、今回は代わりにTeraTermを使って、SSH接続を行いバックアップを進めていきます。TeraTermは、Windowsでよく使われるSSHクライアントで、シンプルで軽量、かつ多機能です。これを使えば、制限があるサーバーでも安全に接続し、必要なバックアップ作業を行うことができます。

SSH接続後にやるべきこと(ロリポップの場合)

SSH接続の方法やTeraTermの使い方については、他のサイトで詳しく解説されているので、ここでは割愛します。今回は、SSH接続でレンタルサーバーにログインした後、どのようにWordPressサイトのファイルをバックアップするかについて説明します。

ロリポップのサーバーにSSHでログインすると、通常は次のディレクトリにいるはずです。

/home/users/0/username

ここからさらにwebディレクトリが存在しており、この中にWordPress関連のファイルが保存されています。基本的には、webディレクトリ内にすべてのWordPressファイルがあるので、まずはこのディレクトリ全体をバックアップするのが重要です。

例えば、特にカスタム設定を行っていない限り、WordPressのテーマやプラグイン、アップロードした画像ファイルなどがこのディレクトリに含まれています。つまり、webディレクトリを丸ごとバックアップすれば、WordPressのファイルは一通りカバーできるわけです。

次のステップでは、具体的なコマンドを使って、このwebディレクトリをバックアップする方法を説明していきます。

webディレクトリをバックアップ先PCに保存するコマンド

まず、webディレクトリをバックアップ先のPCに転送するための具体的なコマンドを紹介します。今回は、バックアップ先のPCに以下の情報を持つUbuntu 24.04マシンを使うことを想定しています。

バックアップ先の情報

  • IPアドレス:123.123.123.123(またはドメイン名)
  • OS:Ubuntu 24.04

SSHで接続し、rsyncを使ってwebディレクトリをまるごとバックアップするコマンドは次の通りです。

rsync -avz /home/users/0/username/web/ yourbackupuser@123.123.123.123:/home/yourbackupuser/backup/

コマンドの詳細

  • yourbackupuser:これは、バックアップ先PC(IPアドレス:123.123.123.123)にログインするためのユーザー名です。自分がUbuntu 24.04をインストールしたときに作成したユーザー名に置き換えてください。たとえば、自宅のPCに「john」というユーザー名でログインしているなら、この部分はjohn@123.123.123.123になります。
  • /home/yourbackupuser/backup/:これは、バックアップ先PCのディレクトリです。バックアップを保存したいフォルダのパスを指定します。yourbackupuserは、バックアップ先PCのユーザー名に置き換えてください。たとえば、ユーザー名がjohnなら、/home/john/backup/になります。

オプションの説明

  • -a:アーカイブモードで、ファイルの権限やタイムスタンプを保持しながらコピーします。
  • -v:詳細な出力を表示します(何がコピーされたのか確認できる)。
  • -z:転送データを圧縮して、転送時間を短縮します。

これで、レンタルサーバー上のWordPressファイルがバックアップ先PCに安全に転送されます。

バックアップ先ディレクトリの作成とパーミッション設定

バックアップを行う前に、バックアップ先のPC(Ubuntu 24.04)にバックアップ用のディレクトリを作成しておく必要があります。以下の手順で進めてください。

  1. バックアップ先PCにディレクトリを作成する

まず、バックアップ先PCにSSHでログインし、バックアップを保存するためのディレクトリを作成します。ここでは、backupという名前のディレクトリを作成します。

mkdir -p /home/yourbackupuser/backup
  • yourbackupuserは、バックアップ先PCのユーザー名に置き換えてください。
  1. パーミッションの設定

作成したディレクトリに適切なアクセス権限を設定するため、以下のコマンドを実行します。

chmod 700 /home/yourbackupuser/backup
  • chmod 700は、そのディレクトリの所有者だけが読み書き・実行できる権限を付与します。これは、バックアップ先ディレクトリのセキュリティを確保するための重要なステップです。

これで、バックアップ先の準備が整い、安全にデータを転送できるようになります。

SSH認証鍵の設定方法

次に、毎回パスワードを入力せずに、安全にバックアップを行うために、SSHの認証鍵を使う方法を説明します。これを設定することで、rsyncコマンドを自動化したり、バックアップ作業を効率化することができます。

  1. バックアップ元(レンタルサーバー)でSSH鍵を生成する
    まず、レンタルサーバーで次のコマンドを実行してSSH鍵を生成します。
    ssh-keygen -t rsa
    途中でファイル名やパスフレーズの入力が求められますが、特別な理由がない限りそのままEnterキーを押して進めてください。
  2. バックアップ先PCにSSH公開鍵をコピーする
    次に、生成した公開鍵をバックアップ先PCにコピーします。以下のコマンドを使って簡単に設定できます。
    ssh-copy-id yourbackupuser@123.123.123.123
    この場合のyourbackupuserは、バックアップ先のPCにログインする際のユーザー名です。
  3. 接続のテスト
    設定が完了したら、実際にSSHでバックアップ先PCに接続できるか確認します。
    ssh yourbackupuser@123.123.123.123
    問題なく接続できれば、次回以降はパスワードを入力せずにrsyncを使ったバックアップが可能です。

補足

ssh-copy-id コマンドの一般的な書式は以下の通りです:

ssh-copy-id [オプション] [ユーザー名]@[ホスト]

具体的な例を示すと、以下のようになります。

ssh-copy-id -i [公開鍵ファイルのパス] [ユーザー名]@[ホスト名またはIPアドレス] -p [ポート番号]

各部分の説明:

  • -i [公開鍵ファイルのパス]: コピーする公開鍵ファイルを指定します。省略すると、デフォルトで ~/.ssh/id_rsa.pub~/.ssh/id_ed25519.pub などが使われます。
  • [ユーザー名]@[ホスト名またはIPアドレス]: リモートサーバーに接続するためのユーザー名とホスト名(またはIPアドレス)。
  • -p [ポート番号]: SSH接続に使うポート番号。デフォルトは22ですが、変更されている場合は指定します。

例:

たとえば、ポート2222でyourbackupuserというユーザーを使って 123.123.123.123 というIPアドレスのサーバーに公開鍵をコピーする場合、以下のようになります。

ssh-copy-id -i ~/.ssh/id_ed25519.pub yourbackupuser@123.123.123.123 -p 2222

このように、ssh-copy-idコマンドの書式はシンプルですが、必要に応じてオプションを追加することで、柔軟に使うことができます。

また、ssh-keygen -t rsa コマンドは、どのディレクトリからでも実行できます。実行すると、通常はホームディレクトリの .ssh フォルダ(~/.ssh/)に鍵が作成されます。デフォルトの保存場所を指定しない限り、id_rsa という名前で秘密鍵、id_rsa.pub という名前で公開鍵がそのフォルダ内に保存されます。

具体的には次のようになります:

  • 鍵ファイルの保存先:/home/ユーザー名/.ssh/id_rsa(デフォルトの場合)
  • 公開鍵の保存先:/home/ユーザー名/.ssh/id_rsa.pub

また、実行時に別の保存場所を指定することも可能です。その場合、プロンプトに従ってディレクトリを選択することができます。

通常、ssh-keygen で生成した鍵は ~/.ssh/id_rsa という名前で保存され、デフォルトのSSH接続ではこの鍵が自動的に使用されます。そのため、特に指定がなければ rsync コマンドも自動的にその鍵を使用して接続します。

ですので、鍵をデフォルトの場所(~/.ssh/id_rsa)に保存している場合は、以下のコマンドで鍵を指定せずにそのまま実行できます。

rsync -avz /home/users/0/username/web/ yourbackupuser@123.123.123.123:/home/yourbackupuser/backup/

もし、SSH鍵がデフォルトではない場所に保存されている場合や、特定の鍵を指定したい場合は、-e オプションを使って明示的に指定できます。たとえば、my_custom_key という名前で鍵を保存した場合は以下のようにします。

rsync -avz -e "ssh -i /path/to/my_custom_key" /home/users/0/username/web/ yourbackupuser@123.123.123.123:/home/yourbackupuser/backup/

まとめると、デフォルトの鍵を使用している場合は特に鍵の指定は不要ですが、カスタムの鍵を使用する場合は -e オプションで指定する必要があります。とここまで説明してきたのですが問題が発生しました。制限がかけられているせいかssh-copy-idコマンドが使用できないようです。以下のエラーが出ます。

-bash: ssh-copy-id: コマンドが見つかりません

対処法:手動でSSH公開鍵をコピーする

  1. SSH鍵を生成(もしまだ作成していない場合) まず、バックアップ元のサーバーでSSH鍵を生成します。
    ssh-keygen -t rsa
    生成した公開鍵は、通常、~/.ssh/id_rsa.pubに保存されます。
  2. 公開鍵をバックアップ先PCに手動でコピー
    ssh-copy-idを使えない場合は、公開鍵を手動でバックアップ先PCの~/.ssh/authorized_keysに追加します。
    まず、公開鍵の内容を確認します。
    cat ~/.ssh/id_rsa.pub
    表示された公開鍵の内容をコピーします。
    次に、バックアップ先PCにSSHで接続します。
    ssh yourbackupuser@123.123.123.123
    バックアップ先PCにログインしたら、~/.ssh/authorized_keysに公開鍵を追加します。もし~/.sshディレクトリが存在しない場合は、作成します。
    mkdir -p ~/.ssh
    echo "公開鍵の内容" >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    chmod 700 ~/.ssh
    これで、公開鍵が正しく設定されました。次回から、パスワードなしでSSH接続ができるようになります。

ただし、ssh yourbackupuser@123.123.123.123コマンドで接続はできるようです。

The authenticity of host ‘60.82.66.64 (60.82.66.64)’ can’t be established.
ECDSA key fingerprint is SHA256:67KE/wgp+T5CHdx/sz4teS1MhT7VrrjL/UH9FXMgCdE.
ECDSA key fingerprint is MD5:cd:bb:21:a1:12:9e:5f:21:74:e5:82:3a:f0:05:1b:24.
Are you sure you want to continue connecting (yes/no)?

しかし、すでにこのバックアップ先のPCにはLAN内のほかのPCからSSH接続をしていて、**authorized_keys**ファイルが存在しています。この場合、疑問が生じませんか?それはすでにあるのに、再度作成するとLAN内のPCから接続できなくなるのではないか、ということです。以下にこれらをまとめてみました。実は、公開鍵をそのファイルに追加するだけで大丈夫です。以下の手順を進めます。

既存の authorized_keys に公開鍵を追加する方法

  1. バックアップ元のサーバーで公開鍵を表示
    まず、バックアップ元のサーバーで次のコマンドを実行して、公開鍵の内容を確認します。
    cat ~/.ssh/id_rsa.pub
    表示された公開鍵の内容をコピーします。
  2. バックアップ先PCの authorized_keys に公開鍵を追加
    バックアップ先PCにすでにSSH接続できているので、バックアップ先PCに接続し、次のコマンドでauthorized_keysファイルに公開鍵を追加します。
    echo "公開鍵の内容" >> ~/.ssh/authorized_keys
    これで、公開鍵が追加されます。
  3. ファイルのパーミッションを確認
    必要に応じて、authorized_keysのパーミッションを確認し、以下のように設定します。
    chmod 600 ~/.ssh/authorized_keys
    chmod 700 ~/.ssh

つまり、上記の方法は2つ目の接続情報を追加するということです。これで、公開鍵が正しくバックアップ先PCに追加され、パスワードなしで接続できるようになるはずです。

authorized_keysファイルに新しい公開鍵を追加する際、上書きしてしまうと、既存のLAN内のPCからの接続ができなくなる可能性があります。しかし、authorized_keysファイルに追記することで、既存の鍵と新しい鍵の両方が許可され、全てのPCから接続できるようにすることが可能です。

既存の接続に影響を与えないようにするためには、公開鍵をファイルに追記する形で設定を行います。以下の手順を確認してみてください。結局のところ上で説明したことと同じ手順です。

authorized_keysファイルに公開鍵を追記する手順

  1. バックアップ元のサーバーで公開鍵を表示
    バックアップ元のサーバーで次のコマンドを実行して、公開鍵の内容を確認します。
    cat ~/.ssh/id_rsa.pub
    表示された公開鍵の内容をコピーします。
  2. バックアップ先PCの authorized_keys に公開鍵を追記
    次に、バックアップ先PCに接続し、以下のコマンドで公開鍵を追記します。この方法では、既存の鍵に追加されるため、今まで使っていたLAN内のPCからの接続が維持されます。
    echo "公開鍵の内容" >> ~/.ssh/authorized_keys
    注意>>は追記を意味します。これにより、既存のauthorized_keysに新しい鍵を追加し、上書きすることはありません。
  3. パーミッションの確認
    追記が完了したら、authorized_keysファイルのパーミッションを確認し、必要であれば次のコマンドで設定します。
    chmod 600 ~/.ssh/authorized_keys
    chmod 700 ~/.ssh

これで、既存のLAN内のPCや、新しく追加したバックアップ元のサーバーからのSSH接続が両方とも可能になります。先の方法も、**追記(append)**の形で公開鍵をauthorized_keysに追加していました。>>を使うことで既存の内容を保持しつつ新しい鍵を追加するため、元々設定されていた他のPCからのアクセスにも影響はありません。

要するに、公開鍵の追加は、既存の鍵を削除することなく、安全に行う方法となっていますので、安心して操作していただけます。authorized_keysファイルには、複数の公開鍵を一行ずつ追加することで、複数の接続設定を同時に保持できます。それにより、異なるPCやユーザーが同じサーバーにSSH接続できるようになっています。

一方で、故意に上書きする方法もあります。例えば、特定の公開鍵のみを許可し、既存のすべての公開鍵を無効にしたい場合には、authorized_keysファイルを上書きする方法が取れます。

authorized_keysファイルを上書きする方法

  1. 公開鍵の上書き
    次のコマンドを使うことで、公開鍵をauthorized_keysファイルに上書きできます。これによって、既存の公開鍵はすべて削除され、新しい公開鍵のみが許可されます。
    echo "新しい公開鍵の内容" > ~/.ssh/authorized_keys
    この場合、>を使用して上書きを行います。既存の内容はすべて削除され、指定した新しい公開鍵だけがauthorized_keysに残ります。
  2. パーミッションの確認
    上書き後も、パーミッションの確認を忘れずに行います。
    chmod 600 ~/.ssh/authorized_keys
    chmod 700 ~/.ssh

上書きするシチュエーション

  • 新しい鍵だけを使用して、他の接続を無効化したい場合
  • 不要になった古い鍵をすべて削除して、セキュリティを強化したい場合

ただし、この操作は慎重に行う必要があります。上書き後に必要な鍵が含まれていない場合、接続ができなくなるリスクがあるため、事前に確認が重要です。

どの方法を使うにしても、バックアップ元のサーバーでSSH鍵を生成することは基本的なステップとなります。具体的には、以下のコマンドでRSA鍵を生成します。

ssh-keygen -t rsa

この手順により、バックアップ元のサーバーにSSH鍵が作成され、その公開鍵をバックアップ先のサーバーに追加することで、パスワードなしでSSH接続を行えるようになります。

鍵生成のプロセスは、すべてのSSH接続設定に共通の必須ステップなので、まずはこのコマンドを実行して鍵を準備することが重要ですね。

まぁ、もっとも自分はauthorized_keys ファイルを直接エディタで編集することが多いです。なぜなら鍵のあるディレクトリで編集するのに慣れているからです。

エディタで編集するメリット

  1. 複数の公開鍵の管理が簡単: エディタで開くと、すでに登録されている鍵が確認でき、不要な鍵を削除したり、新しい鍵を追加したりする際に細かい調整が可能です。echo コマンドで誤って上書きしてしまうリスクを避けることができます。
  2. 改行やフォーマットの確認: 公開鍵の改行や余分なスペースなど、フォーマットが正しいかを目視で確認できます。フォーマットのミスがあると、鍵が正しく認識されないことがあるので、エディタを使うことでミスを防ぎやすくなります。
  3. 安全な編集: 特にリモートサーバーにアクセスしている場合、echo コマンドを間違って使用して authorized_keys ファイルを上書きしてしまうと、既存の鍵が削除され、次回からリモートアクセスができなくなるリスクがあります。エディタを使うと、現在の内容を確認しながら慎重に編集できるため、安全性が高まります。
  4. 複数行の公開鍵やコメントの管理: エディタを使用すると、各公開鍵に対してコメントを追加して、どの鍵がどのデバイスのものか識別することもできます。特に、複数のデバイスやユーザーの鍵を管理する場合には便利です。

おすすめの手順

  1. SSHでリモートサーバーに接続。
  2. authorized_keys をエディタ(例:nano, vim, vi)で開く。
    nano ~/.ssh/authorized_keys
  3. 必要な公開鍵を追加または削除し、保存。

注意点

  • 編集する際は、公開鍵の一行全体を正確にコピーして追加することが重要です。途中で改行が入ると、鍵が正しく認識されなくなります。
  • 編集後、ファイルのパーミッションも確認しておくことが推奨されます。例えば、authorized_keys ファイルのパーミッションは通常 600(読み書きのみ)に設定する必要があります。
chmod 600 ~/.ssh/authorized_keys

エディタでの編集は、慎重に作業ができる点で便利ですね。

ポート開放とルーターの設定

もし自宅や外部からバックアップ先PCにSSHで接続してバックアップを行う場合、ポート開放ルーターの設定が必要です。ここでは、具体的な設定方法を説明します。

1. バックアップ先PCのポート開放(UFWの設定)

まず、バックアップ先PC(Ubuntu 24.04など)がファイアウォールを使用している場合は、SSH用のポート(通常は22番)を開放する必要があります。以下のコマンドでポート22を開放します。

sudo ufw allow 22/tcp

これで、バックアップ先PCが外部からのSSH接続を受け付ける準備が整います。

2. ルーターのポート転送設定(自宅の場合)

自宅のネットワーク内でバックアップ先PCにリモートアクセスする場合、ルーターのポート転送設定も行う必要があります。ポート転送を設定することで、外部のインターネットからバックアップ先PCに接続できるようになります。

ルーターの設定例(TP-linkの場合)
  • サービス名:任意の名前をつけてください(例:SSHバックアップ)
  • デバイスのIPアドレス:192.168.0.91(バックアップ先PCのローカルIPアドレス)
  • 外部ポート:22(SSHのデフォルトポート)
  • プロトコル:TCP

これによって、外部のインターネットから自宅のPCへSSHでアクセスできるようになります。

3. 動的DNS(DDNS)の設定

多くのルーターには動的DNS(DDNS)機能が備わっており、これを利用することで、IPアドレスではなくドメイン名を使って接続することが可能です。IPアドレスが変更になっても、ドメイン名で外部からも簡単に自宅のPCにアクセスできます。

例(TP-linkルーターの場合)
  • 動的DNSサービス:TP-linkのDDNS機能を使用
  • ドメイン名:test.tplinkdns.com

このドメイン名を使って、外部からtest.tplinkdns.com経由でSSH接続を行うことができます。

ルーターによってポート開放の機能の名称が異なる場合があります。ポート開放(Port Forwarding)は、ルーターのメーカーやモデルによって以下のような名前で呼ばれることがあります。

ポート開放の異なる名称

  • Port Forwarding(ポートフォワーディング): 最も一般的な名前。
  • Virtual Server(仮想サーバー): 特定のポートを指定した内部サーバーに転送する機能として、この名前が使われることがあります。
  • NAT設定(Network Address Translation): NAT設定の一環としてポート開放が行われることがあり、この中に「ポート転送」設定が含まれます。
  • Application Sharing: 一部のルーターでは、アプリケーションごとにポートを開放するため、この名前が使われることもあります。
  • Gaming Mode: ゲーム用に特定のポートを開放する機能として、特にゲーミング向けルーターで見かけます。

共通の項目

どの名前であっても、以下の共通の設定項目が見られます。

  • 外部ポート番号(External Port): インターネット側からアクセスするためのポート番号。
  • 内部ポート番号(Internal Port): 内部ネットワーク内で通信を受けるデバイスが使用するポート番号。
  • IPアドレス: 通信を受け取るデバイスの内部ネットワークのIPアドレス(通常は固定IPアドレスを使用するのが推奨)。

ルーターの取扱説明書や設定画面のヘルプを参考にすることで、該当する設定が見つかるはずです。ルーターによって名称が異なっても、基本的な機能は同じですので、説明書の該当部分を確認して設定してみてください。

ファイアウォールの有効化とポート開放(Ubuntu 24.04)

Ubuntu 24.04では、初期設定ではファイアウォール(UFW: Uncomplicated Firewall)が無効になっています。そのため、セキュリティを強化するためには、ファイアウォールを有効にし、必要なポートだけを開放することが重要です。

1. ファイアウォールの有効化

まず、ファイアウォールが無効になっている場合は、次のコマンドで有効にします。

sudo ufw enable

このコマンドを実行することで、ファイアウォールが有効になり、外部からの不要なアクセスを遮断できるようになります。

2. 必要なポートだけを開放する

次に、バックアップやSSH接続に必要なポート22だけを開放します。これにより、SSH経由での接続は許可されますが、それ以外のポートからのアクセスは制限されます。

sudo ufw allow 22/tcp

これで、必要最小限のポートだけが開放され、セキュリティを確保しながら、バックアップ作業が行えるようになります。

rsyncの誤解を防ぐための補足説明

初心者にとって、rsyncを使ってバックアップを取る際に、次のような不安があるかもしれません。

1. バックアップ先が空だと上書きされる?

最もよくある誤解の一つに、バックアップ先が空の場合、**バックアップ先の状態が優先されて、バックアップ元(レンタルサーバー側)が消去されてしまうのでは?**という心配があります。

しかし、心配しなくて大丈夫です。rsyncは、バックアップ元のデータをバックアップ先にコピーする仕組みです。バックアップ先が空の場合でも、バックアップ元のデータは削除されません。つまり、バックアップ先に元のデータをしっかりとコピーするだけで、バックアップ元が上書きされたり消えることはありません。

2. まずは全てのデータをコピーしてみる

もし不安であれば、最初にバックアップ先が空の状態で、一度すべてのデータをコピーしてみることをおすすめします。このようにして、一度バックアップ先に全てのファイルが正しく保存されていることを確認すれば、安心してバックアップ作業を続けられます。

rsync -avz /home/users/0/username/web/ yourbackupuser@123.123.123.123:/home/yourbackupuser/backup/

3. バックアップ元でファイルが減ってもバックアップ先は影響を受けない

また、バックアップ元(レンタルサーバー側)でファイルが削除された場合でも、バックアップ先(自宅PCなど)のデータが勝手に削除されることはありませんrsyncは、通常のコピー操作では、バックアップ元にあるデータをバックアップ先に追加するだけで、バックアップ先のデータを削除することはありません。

4. バックアップ先から不要なファイルを削除したい場合の対策

もし、バックアップ先でもバックアップ元と同じ状態を保ちたい(つまり、バックアップ元で削除されたファイルを、バックアップ先からも削除したい)場合は、次のオプションを使います。

rsync -avz --delete /home/users/0/username/web/ yourbackupuser@123.123.123.123:/home/yourbackupuser/backup/

--deleteオプションを使うと、サーバー側(バックアップ元)とバックアップ先が全く同じ状態になります。つまり、バックアップ元で削除されたファイルが、バックアップ先からも自動的に削除されるという動作です。

これによって、サーバー側のファイル構成とバックアップ先のファイル構成を完全に一致させることができます。ただし、この操作は非常に強力で、一度削除されたファイルは復元できないため、十分に注意して使用する必要があります。


--deleteオプションのポイント:

  • メリット:サーバー側で削除されたファイルやフォルダがバックアップ先からも削除され、2つの環境を常に同期状態に保てる。
  • 注意点:誤って必要なファイルまで削除してしまわないように、コマンドを実行する前に必ず内容を確認すること。

これで、サーバーとバックアップ先を完全に同期したい場合に、適切な方法を使用できますね!

ファイル名が同じで容量が変わった場合は?

rsyncは、ファイル名が同じでもファイルのサイズや内容が異なる場合、その差分を検出して変更された部分だけを転送します。ゆえに、すでにバックアップ先に存在するファイルが新しい内容に自動で更新されます。

たとえば、サーバー側でWordPressのテーマファイルを編集した場合、その変更がバックアップ先にも正しく反映されます。

例:

  • サーバー側のファイルstyle.css(10KB)
  • バックアップ先のファイルstyle.css(8KB)

この場合、rsyncはファイルのサイズや内容が異なることを検出し、サーバー側の新しいstyle.css(10KB)をバックアップ先にコピーして、内容を最新の状態にします。

変更された部分だけが転送されるため、転送時間やデータ量が最小限に抑えられます

余分なデータを残さないための対策

rsyncを使ってバックアップを取る際、もしバックアップ元でファイルを削除しても、バックアップ先にそのファイルが残っている場合、将来的にそのデータが不要になることがあります。特に、バックアップ先から別の場所にデータを移行する際、この余分なデータが残っていると、無駄なスペースを占有したり、管理が複雑になったりすることがあります。

--deleteオプションの役割

こうした余分なデータを残さないためには、--deleteオプションを使用することで、バックアップ元の状態とバックアップ先の状態を完全に同期させることができます。このオプションを使用すると、バックアップ元で削除されたファイルがバックアップ先からも削除され、不要なデータが残りません。

例:

  • バックアップ元で不要になったファイルやフォルダを削除した場合、その変更は自動的にバックアップ先にも反映されます。
  • その結果、バックアップ先を別の場所に移行する際も、余分なデータが含まれず、クリーンな状態で移行できます。

結局どっちなの?

--deleteオプションを使うべきか、それとも使わないべきか?」という疑問を持つかもしれませんが、私の場合は、--deleteオプションを使用してバックアップ運用をしています。その理由は、先に述べた通り、不要なデータを残さないようにするためです。

ただし、初めてバックアップを取るときには--deleteを使わない方が安心です。なぜなら、バックアップ元とバックアップ先の状況を確認しながら進めることができ、もし何か問題があっても、サーバー側のファイルが削除される心配がないからです。

1. 最初のバックアップ

最初のバックアップ時には、次のコマンドを使ってファイルをバックアップしましょう:

rsync -avz /home/users/0/username/web/ yourbackupuser@123.123.123.123:/home/yourbackupuser/backup/

このコマンドで、サーバーのデータがそのままバックアップ先にコピーされます。最初はデータのコピーが完了することを確認するため、--deleteオプションは使用しません。

2. 2回目以降のバックアップ

2回目以降のバックアップでは、サーバー側とバックアップ先のファイルが完全に同期することを目的に、次のコマンドを使用します:

rsync -avz --delete /home/users/0/username/web/ yourbackupuser@123.123.123.123:/home/yourbackupuser/backup/

このコマンドを使えば、サーバー側で削除されたファイルもバックアップ先から削除され、不要なデータが残りません。

特定のフォルダやファイルをバックアップしない方法:--excludeオプション

rsyncを使ってファイルやフォルダをバックアップするとき、すべてのファイルを転送する必要がない場合があります。たとえば、キャッシュファイル一時ファイルなど、バックアップする意味がないデータを除外したいときがあります。そんな時に使うのが、**--exclude**オプションです。

このオプションを使うと、特定のフォルダやファイルをバックアップから除外でき、不要なデータを転送しないで済みます。

--excludeの使い方

基本的な使い方は、rsyncコマンドに--excludeオプションを追加し、除外したいフォルダやファイルのパスを指定するだけです。例を見てみましょう。

例:特定のフォルダを除外する

たとえば、webディレクトリの中に**cacheフォルダ**があり、このフォルダをバックアップしたくない場合は、次のようにします。

rsync -avz --exclude 'cache/' /home/users/0/username/web/ yourbackupuser@123.123.123.123:/home/yourbackupuser/backup/
  • --exclude 'cache/': この部分で、cache/フォルダを除外しています。このようにして、バックアップの際にcache/フォルダをスキップします。

例:特定のファイルを除外する

次に、特定のファイル、例えば**debug.log**というファイルをバックアップしたくない場合は、次のように指定します。

rsync -avz --exclude 'debug.log' /home/users/0/username/web/ yourbackupuser@123.123.123.123:/home/yourbackupuser/backup/
  • --exclude 'debug.log': この部分で、debug.logファイルを除外しています。

--excludeオプションのポイント

  • 除外するファイルやフォルダは、パスで指定します。ディレクトリ名の最後に/を付けることで、フォルダ全体を除外できます。
  • 除外の対象は1つだけでなく、複数のファイルやフォルダを除外することも可能です。

例:複数のフォルダやファイルを除外する

複数のフォルダやファイルを除外したい場合は、--excludeオプションを繰り返して指定します。

rsync -avz --exclude 'cache/' --exclude 'debug.log' /home/users/0/username/web/ yourbackupuser@123.123.123.123:/home/yourbackupuser/backup/

このコマンドでは、cache/フォルダとdebug.logファイルの両方がバックアップの対象から除外されます。


--excludeオプションを使えば、必要のないファイルやフォルダをバックアップの対象から外すことができ、効率的にバックアップが取れます。バックアップ時間の短縮や、不要なデータの転送を防ぐために、ぜひ活用してみてください!

余談:サーバーに制限がなければRcloneがおすすめ

もし、サーバーに制限がない場合は、Rcloneを使うことも一つの選択肢です。Rcloneは、ファイルの同期やバックアップを非常に簡単に行ってくれるツールで、今回のようにrsyncで細かいオプションを気にすることなく、スムーズにデータを同期できます。

Rcloneは、クラウドストレージサービスとの連携にも優れており、Google DriveやDropboxなど、多くのサービスをサポートしています。サーバー環境が許すのであれば、Rcloneを使ってさらに効率的なバックアップ運用を試してみるのも良いでしょう。

1. ファイルだけでは不十分!データベースもバックアップしよう

WordPressのファイルだけでサイトを完全に復元できると思っていませんか?

実は、WordPressのバックアップにはファイルとデータベースの両方が必要です。それぞれが別々の役割を担っており、片方だけでは不十分です。

WordPressファイルの役割

WordPressのファイルには、サイトを見た目どおりに表示するためのテーマやプラグイン、アップロードした画像やメディアファイルなどが含まれています。これらのファイルがあることで、サイトのデザインや機能が成り立ちます。しかし、ファイルだけでは投稿した記事やページ、コメント、ユーザー情報などが含まれていません。

データベースの役割

WordPressサイトの本当の中身は、データベースに保存されています。ここには、次のような重要な情報が詰まっています。

  • 投稿内容(記事やページ)
  • コメント(訪問者からのコメント)
  • ユーザー情報(管理者や編集者のアカウント情報)
  • サイトの設定(プラグインの設定やサイト全体の構成)

つまり、データベースがなければ、サイトの内容はすべて失われてしまうのです。ファイルだけをバックアップしても、データベースがないと、空っぽのサイトになってしまうのです。


例:車に例えると…

車のボディがWordPressのファイル、エンジンや電子制御システムがデータベースと考えてください。どちらか片方が欠けても、車(サイト)は正常に動きません。デザインやプラグイン(ボディ)はあっても、肝心の投稿やユーザー情報(エンジン)がないと、サイトとして機能しないのです。


データベースのバックアップも必要!

ですから、WordPressサイトを安全に保つためには、ファイルのバックアップだけでなく、データベースのバックアップも必ず必要です。これで、万が一トラブルが発生しても、サイト全体を復元することができます。


2. 準備:SSH接続とデータベース情報の確認

データベースのバックアップを行うには、まずデータベースにアクセスするための情報を準備する必要があります。WordPressのデータベースの情報は、**wp-config.php**というファイルに保存されています。これから、その情報を確認し、次のステップで使います。

ステップ1: SSH接続を確認

まず、サーバーにSSH接続できることを確認します。TeraTermPuTTYなどのツールを使ってSSH接続する方法があります。


ステップ2: データベース情報を確認

次に、データベースのバックアップを取るために、データベース名、ユーザー名、パスワードが必要です。これらの情報は、WordPressの設定ファイルであるwp-config.phpに記載されています。もしくはロリポップにログインしても確認できます。

手順:
  1. wp-config.phpファイルを探す
    WordPressのインストールされているディレクトリに移動し、wp-config.phpというファイルを見つけます。たとえば、以下のようなパスにあります。
    cd /home/users/0/username/web/
  2. wp-config.phpファイルを開く
    wp-config.phpファイルを開いて、データベース情報を確認します。
    nano wp-config.php
  3. データベース情報の確認
    wp-config.php内には、以下のような行があります。これらを見つけて、メモしてください。
    DB_NAME:データベース名
    DB_USER:データベースユーザー名
    DB_PASSWORD:データベースパスワード
    DB_HOST:データベースのホスト名(通常はlocalhost
    例:
    define('DB_NAME', 'your_database_name');
    define('DB_USER', 'your_database_user');
    define('DB_PASSWORD', 'your_password');
    define('DB_HOST', 'localhost');
    これで、データベースに接続するための情報が揃いました。

ステップ3: データベースに接続できるか確認

最後に、データベースに接続できるかを確認しておきます。MySQLクライアントを使って、データベースにログインします。

mysql -u your_database_user -p

このコマンドを実行すると、パスワードが求められます。wp-config.phpに記載されているDB_PASSWORDを入力してください。正しく接続できれば、準備完了です。

3. バックアップのコマンド: mysqldumpの使い方

データベースの情報を確認したら、次に実際のバックアップコマンドを実行して、データベースの内容を1つのファイルに保存します。ここでは、**mysqldump**というコマンドを使って、データベース全体をバックアップします。


ステップ1: 基本的なmysqldumpコマンド

まず、基本的なmysqldumpコマンドの書式を紹介します。以下のコマンドを実行すると、データベース全体がバックアップファイルに保存されます。

一般的な書式:

mysqldump -u [ユーザー名] -p [データベース名] > [バックアップファイル名].sql
基本コマンド:
mysqldump -u your_database_user -p your_database_name > backup.sql
説明:
  • mysqldump:データベースをダンプ(エクスポート)するためのコマンドです。
  • -u your_database_user:データベースに接続するためのユーザー名です。wp-config.phpで確認したユーザー名を入力します。
  • -p:パスワードを入力するためのオプションです。このコマンドを実行すると、パスワードが求められます。
  • your_database_name:バックアップしたいデータベース名です。これもwp-config.phpで確認したデータベース名を使います。
  • > backup.sql:バックアップを保存するファイル名です。この例では、backup.sqlという名前で保存します。

ステップ2: --no-tablespacesオプションでエラーを回避

場合によっては、データベースのバックアップを実行する際に、次のようなエラーが表示されることがあります。

mysqldump: Error: ‘Access denied; you need (at least one of) the PROCESS privilege(s) for this operation’ when trying to dump tablespaces

このエラーは、テーブルスペースに関連する権限が不足しているために発生します。多くの初心者にとって、この権限を付与するのは難しいかもしれませんが、--no-tablespacesオプションを使うことで簡単に解決できます。このオプションは、テーブルスペース情報を除外してバックアップを取るため、エラーが発生しなくなります。

修正されたコマンド:
mysqldump -u your_database_user -p your_database_name --no-tablespaces > backup.sql

このコマンドを使うことで、エラーを回避しつつ、WordPressサイトのデータベース全体をバックアップできます。


ステップ3: パスワードを入力

mysqldumpコマンドを実行すると、次にデータベースのパスワードを求められます。ここで、wp-config.phpに記載されているDB_PASSWORDを入力します。もしくはロリポップのユーザー専用ページでも確認できます。

例:

Enter password:

パスワードを入力して、Enterキーを押せば、バックアップが開始されます。


ステップ4: バックアップファイルの確認

バックアップが完了すると、コマンドを実行したディレクトリにbackup.sqlというファイルが作成されているはずです。このファイルが、WordPressのデータベース全体を保存したものです。

ファイルの確認コマンド:
ls -lh backup.sql

これで、backup.sqlのサイズや作成時間を確認できます。

-hオプションでホストを指定する理由

通常、データベースサーバーは、Webサーバーと同じサーバー上にある場合が多く、その場合、ホスト(サーバーの場所)は**localhost**になります。しかし、データベースが別のサーバーにある場合は、そのデータベースサーバーのアドレスを指定する必要があります。

このときに使うのが、-hオプションです。


例:ホストを指定してデータベースに接続する

たとえば、以下のようなコマンドを使って、ホストが別のサーバー上にあるデータベースに接続します。

mysqldump -h 123.123.123.123 -u your_database_user -p your_database_name > backup.sql

ロリポップの場合、ホスト指定が必要です。具体的には以下のようなコマンドになります。

mysqldump -h mysql304.phy.lolipop.lan -u LAAXXXXXXX -p LAAXXXXXXX-data > backup.sql

オプションの説明:

  • -h 123.123.123.123:この部分でデータベースサーバーのIPアドレスまたはホスト名を指定します。この例では、IPアドレス123.123.123.123にあるデータベースに接続します。
  • -u your_database_user:データベースユーザー名を指定します。
  • -p:パスワードを入力するオプションです。
  • your_database_name:バックアップしたいデータベース名を指定します。

ホスト指定が必要な場合

以下のような場合には、ホスト指定が必要になります。

  1. データベースが別のサーバー上にある
    たとえば、Webサーバーとデータベースサーバーが異なる場合、データベースサーバーのIPアドレスやホスト名を指定する必要があります。
  2. クラウド環境などで外部のデータベースに接続する場合
    クラウド上にあるデータベースに接続する際も、ホストを指定する必要があります。多くの場合、データベースサービスから提供されたホスト名やIPアドレスを使って接続します。

ローカルホスト(localhost)との違い

  • localhost:Webサーバーとデータベースサーバーが同じサーバー上にある場合、ホスト名はlocalhostを使います。この場合、ホスト指定の-hオプションは必要ありません。
  • -hでホストを指定する:データベースが別のサーバーにある場合や、IPアドレスやホスト名で接続が必要な場合に使います。

定期的にバックアップするには .cnf とスクリプトがあれば最強です!

定期的にデータベースのバックアップを取るには、.cnfファイルとスクリプトの組み合わせが最強の方法です。さらに、この方法は複数のデータベースに対応しており、複数のサイトやアプリケーションを運用している場合にも非常に便利です。

そして、バックアップを効率化するために、**rsync**などのツールと組み合わせることで、同じファイルを何度もバックアップすることなく、必要なデータだけを同期できます。これで、無駄なバックアップ料金を支払う必要がなくなり、コストを削減できます。

1. .cnfファイルとは?

.cnfファイルは、MySQLなどのデータベースにアクセスするための設定ファイルです。このファイルにユーザー名やパスワードなどの情報を記載することで、コマンドを実行する際にパスワードを手動で入力せずにすみます。

どうして便利なの?

通常、データベースのバックアップを取るときや、MySQLに接続するときに毎回ユーザー名とパスワードを入力しなければなりません。しかし、.cnfファイルを使えば、必要な情報をあらかじめ保存しておけるため、コマンドの実行が簡単になります。

例えばこんな場面で便利!

  • 毎回パスワードを手入力するのが面倒な場合。
  • スクリプトで自動的にバックアップを取りたいとき。

2. スクリプトとは?

スクリプトとは、特定のコマンドを自動化するための小さなプログラムです。今回の例では、データベースのバックアップを取るためのコマンドを自動的に実行するスクリプトを作成しています。

どうしてスクリプトが必要なの?

手動で毎回コマンドを入力してバックアップを取るのは手間がかかります。しかし、スクリプトを使えば、あらかじめ書いておいたコマンドが自動で実行され、データベースのバックアップを簡単に行うことができます。さらに、このスクリプトを定期的に実行する設定も可能です。

例えばこんな場面で便利!

  • 毎日決まった時間に自動でバックアップを取りたいとき。
  • 人間が操作しなくても、システムが自動でデータベースのバックアップを取ってくれるようにしたいとき。

3. どうやって使うの?

ステップ1:設定ファイル(.cnfファイル)を準備

まず、.cnfファイルを作成して、データベースに接続するための情報(ユーザー名やパスワード)を設定します。このファイルは、バックアップスクリプトがデータベースにアクセスするために使います。

[client_db1]
user=LAA1559852
password=12345678

[client_db2]
user=LAA1559852
password=87654321

[client_db3]
user=LAA1559852
password=abcdefgh

[client_db4]
user=LAA1559852
password=testpass

ステップ2:スクリプトを実行

次に、スクリプトを実行します。スクリプトの中には、データベースのバックアップを取るためのコマンドが書かれています。このスクリプトを実行すると、事前に設定した.cnfファイルを使って、スムーズにバックアップが行われます。

#!/bin/bash

# データベース1のバックアップ
mysqldump --defaults-file=~/web/dbbk/.my.cnf --defaults-group-suffix=_db1 -h mysql304.phy.lolipop.lan --no-tablespaces LAA1559852-sdata > /home/users/0/mods.jp-minokamo/web/dbbk/sdata.sql

# データベース2のバックアップ
mysqldump --defaults-file=~/web/dbbk/.my.cnf --defaults-group-suffix=_db2 -h mysql308.phy.lolipop.lan --no-tablespaces LAA1559852-tokyo > /home/users/0/mods.jp-minokamo/web/dbbk/tokyo.sql

# データベース3のバックアップ
mysqldump --defaults-file=~/web/dbbk/.my.cnf --defaults-group-suffix=_db3 -h mysql311.phy.lolipop.lan --no-tablespaces LAA1559852-wpen > /home/users/0/mods.jp-minokamo/web/dbbk/wpen.sql

# データベース4のバックアップ
mysqldump --defaults-file=~/web/dbbk/.my.cnf --defaults-group-suffix=_db4 -h mysql310.phy.lolipop.lan --no-tablespaces LAA1559852-xyz > /home/users/0/mods.jp-minokamo/web/dbbk/xyz.sql

4. セキュリティについて

.cnfファイルやスクリプトには、データベースの接続情報が含まれているため、セキュリティには特に気をつける必要があります。ファイルへの不正アクセスを防ぐために、以下の対策が重要です。

セキュリティ対策:

  • パーミッションの設定:ファイルへのアクセス権を制限して、他のユーザーが内容を見たり変更したりできないようにします。
  • Webアクセスの制限:これらのファイルがWeb上からアクセスされないように、.htaccessファイルで保護します。
<Files "bkdb.sh">
    Order allow,deny
    Deny from all
</Files>

<Files ".my.cnf">
    Order allow,deny
    Deny from all
</Files>

<FilesMatch "\.sql$">
    Order allow,deny
    Deny from all
</FilesMatch>

5. どんな効果があるの?

.cnfファイルやスクリプトを使うことで、次のようなメリットがあります。

  • 効率化:毎回手動で行っていた作業が自動化されるため、手間が省けます。
  • ミスの防止:手入力によるミスがなくなり、安定したバックアップが取れます。
  • セキュリティ向上:適切な設定を行えば、パスワードをコマンドラインに表示させずにすみ、セキュリティも向上します。

  • .cnfファイルは、データベースに自動で接続するための設定ファイル。
  • スクリプトを使えば、バックアップ作業を自動化し、定期的に実行できる。
  • セキュリティ対策をしっかり行いながら、安全かつ効率的にデータベースのバックアップを行うことができる。

制限されたサーバーでコマンドによるcronが使えないことがありますが、幸いにもブラウザで設定できました。このスクリプトを登録しておけば、自動で自分のPCやクラウドに同期することができるでしょう!

サーバーによっては、cronコマンドが使えない場合があります。しかし、ブラウザを使ってcronの設定ができる環境があれば、このスクリプトを簡単に登録できます。設定が完了すれば、あなたのPCやクラウドに自動的にデータを同期することができ、バックアップ作業の手間が省けます。


タイトルとURLをコピーしました