シェルアクセスがない場合でも DirectAdmin リセラーを自動的にバックアップする方法
Directadmin での私の旅をフォローしている方は、私が Silicom Network で DirectAdmin 再販業者アカウントにサインアップしたことをご存知でしょう。
- Silicom Network の DirectAdmin を使い始める - パート 1: サインアップとセットアップ
- Silicom Network での DirectAdmin の使用開始、パート 2: WordPress をインストールしました。
もう 1 つやりたいことがあります。それは、すべてをバックアップすることです。
私の哲学…というかコミュニティの
一方で、共有ホスティングを提供するプロバイダーはバックアップの責任を負います。私はDirectAdminを使用するためにここにいるのですから、サーバーを管理するためにここにいるわけではありません。サイトのバックアップについて、私が何を知っているというのでしょう?サーバーがダウンした場合、プロバイダーはデータも含めてサーバーを正常な状態に復旧してくれると期待しています。
そして現実がある。
サイト構築に時間と労力を費やした後、すべてを他人に任せたくはありません。バックアップは自分で取りたいのです。プロバイダがハッキングされたり、倒産したり、隕石に見舞われたり、といった事態に陥る可能性もあります。
バックアップは自動化されるべきです。FileZillaに定期的にアクセスしてバックアップを取らなければならないとしたら、それは実現しません。
バックアップも、安全で、オフサイトで、2 重または 3 重で、バージョン管理されている必要がありますが、ここでは基本だけを整えておきましょう。
データベースのバックアップ
幸いなことに、DAリセラー上のすべてのデータを自動的にコピーするスクリプトの設定は非常に簡単です。ただし、MySQLについては考慮する必要があります。
データベースはDBサーバー上にホストされています。DAサーバー自体と同じサーバーでも構いませんが、重要なのはデータがホームディレクトリに保存されていないことです。そのため、まずMySQLのダンプを取得する必要があります。
シェルアクセスがないので、これをどうやって実現するのでしょうか?
cronを入力します。mysqldumpを実行するためのcronジョブを作成します。
MySQLバックアップのためのDAの準備
まず、バックアップを保存するディレクトリを作成しましょう。このフォルダをpublic_htmlディレクトリに置くと、世界中の誰もがアクセスできてしまうので、避けてください。
DirectAdminでファイルマネージャーを起動します

次に、左側にある [新しいフォルダー] をクリックします。

mysql_backups という名前を付けます。完了すると、次のようになります。

それでは認証に移りましょう。
コマンドラインからデータベースへの認証にはいくつかの方法があります。パスワードを入力することもできますが、ここでは明らかに機能しません。
MYPWD環境変数も使用できます。「安全ではない」「誰でも見れるpsでパスワードが表示される」といったナンセンスな主張をよく目にするでしょう。しかし、これは誤りです。「export」コマンドはシェルに組み込まれています(考えてみれば当然のことです)。あなたの環境を見ることができるのは、あなたとrootだけです。つまり、あなたの行動を見ることができるのは、あなたとrootだけです。
ただし、MYPWD は非推奨となっているため、古い信頼性の高い .my.cnf ファイルを使用します。
再度ファイルエクスプローラーで、[新しいテキストファイル] をクリックします。

.my.cnf という名前を付け、右クリックして「編集」をクリックします。

次のように入力します。
[クライアント] user=データベースユーザー パスワード=データベースのパスワード database=データベース名
次に、右上隅の「ファイルを保存」をクリックします。
このファイルを所有者のみが読み書き可能(モード0600)にする必要があります。そのためには、ファイルマネージャーでファイルを右クリックし、「アクセス権の設定」を選択します。

ダイアログで、「Chmod」の下に「600」と入力します。または、該当するチェックボックスをクリックして、次のように変更することもできます。

[保存]をクリックします。
Cronジョブの作成
DA パネルで Cron ジョブをクリックします。

次に、右上の「Cron ジョブの作成」をクリックします。
次のパネルでは、このジョブを実行する時間を選択する必要があります。例えば、午前11時に実行したいとします。「時間」欄に「11」と入力し、他の項目はそのままにしておきます。毎日午前11時にジョブが実行されます。必要に応じて設定を変更してください。
次に、ジョブ自体のコマンドで次の操作を実行します。
mysqldump -u your-db-user -h localhost your-db-name > /home/your-da-user/mysql_backups/your-db-name.sql
これにより、データベースが mysql_backups 内の your-db-name.sql というファイルにダンプされます。
複数のデータベースがある場合は、それぞれにcronジョブを作成する必要があります。それらを処理するスクリプトを作成することもできますが、この簡単なチュートリアルの範囲外になります。.my.cnfでそれらを処理する方法については、こちらのStackOverflowのノートをご覧ください。
「すべてのCron出力をメール送信」をクリックしてメールアドレスを入力することもできます。そうすれば、cronジョブのエラーがすべてメールで届きます。
バックアップホームの取得
ホーム システムでは、wget を使用して、'domains' フォルダー内のすべてのコピーを効率的に取得できます。
たとえば、私の runningdos.com アカウントを取得するには、次のようにします。
wget -r --mirror 'ftp://raindog308:[email protected]:/domainsもちろん、データベースのダンプが機能した後の時間にこれをスケジュールするようにしてください。
改善の可能性
この設定を改善する方法はいくつかあります。
- 日付に基づいてデータベースを異なるファイルにダンプし、新しいバックアップが古いものを上書きしないようにします。
- これが完了すると、古いバックアップを削除するジョブが実行されます
- 複数のデータベースを扱う
- 「ドメイン」フォルダ以外にも、メールなど他のものをバックアップすることもできます。
でも、これで始めるには十分だと思います。楽しんでください!