Linuxサーバ

サーバのバックアップをシェルスクリプト+バッチファイルで自動化してみる

先日作成した郵便番号の取込スクリプトで味をしめたというわけでもないのですが、いくつかのファイルのバックアップを自動で作成するようにしておこうと思います。

 

まずはデータベース関連から。

 

CSVファイルを吐き出す方法もよいかな~と思ったのですが、今回はmysqldumpを使用する方向で作業します。

 

最低限必要なデータベースは個人で使用しているモノとWordpress関連なんですが、ここはデータベース丸ごとバックアップを作成しておきます。(万が一DBそのものが破損してもいいように)

 

mysqldump -u root -pパスワード --all-database > mysql.sql

 

これでデータベース全てがmysql.sqlファイルにエクスポートされます。

エクスポート先はこの処理を行うユーザのカレントディレクトリ(その時の作業ディレクトリ)になりますが、今回作成するスクリプトはrootに実行させるので/root/mysql.sqlとして保存されます。

 

(データベースに戻す時はmysql -u root -pパスワード  < sqlファイルのフルパス にて行う)

 

あとはバックアップを作成するディレクトリの選別を。

 

丸ごとバックアップをとってみたらどうか?と考えもしましたが一時ファイルなんかまでとる必要は全く無いわけで、いざという時に最低限サーバを復旧させることができるようにと考えた結果

  • /etc(各種設定ファイルは必須かと)
  • /home(ユーザのデータが入っているのでこれも)
  • /var/log(障害発生時の原因がつかめるかもしれないし他にも情報満載)
  • /root(管理者固有のファイルも必要でしょう)

の4つに絞ることにしました。

 

これをtarボールに纏めてかつgzip形式で圧縮してやることにします。

 

LIST="/etc /home /var/log /root"(追加したい場合は半角スペースを挟んで追記)

tar czvfP /var/bkup/backup.tar.gz $LIST

 

ちなみに変数:LISTにバックアップを作成したいディレクトリを記載、「tar」コマンドでファイルを一まとめにします。

tarの後に続くczvfPはオプション項目で頭から順に

  1. c:新規書庫を作成する
  2. z:gzip形式を使用(書庫作成なのでここでは圧縮)
  3. v:処理したファイルの一覧を表示
  4. f:指定したファイル名(ここではbackup.tar.gz)を使用
  5. P:ファイル名の先頭につく"/"を取り除かないで使用

という意味なんですって。

今まで深く考えずに使ってました(汗

 

あと、今回の書庫作成とは反対で解凍を行う際に

tar zxvf ~

なんてコマンドを使用するんですがこちらは

  1. z:gzip形式を使用(こちらは解凍)
  2. x:書庫からファイルを取り出す
  3. v:処理したファイルの一覧表示
  4. f:指定したファイル名(~部分)から取り出すよ

という意味になります。

 

今回は/var/bkup/というディレクトリを作成しておいてそこにbkup.tar.gzというバックアップファイルを作成する形をとりますのでまずはディレクトリを作りましょう。

 

sudo mkdir /var/bkup/

 

そして作成したディレクトリにバックアップを作成するように上記の一連の処理をスクリプトに書くと

 

#!/bin/bash

 

LIST="/etc /home /var/log /root"

DB_PASS="データベースのroot用パスワード"

 

mysql -u root -p$DB_PASS --all-database > mysql.sql

tar czvfP  /var/bkup/bkup.tar.gz $LIST

exit

 

簡単でしょ♪

 

最後に

vi /etc/cron.d/auto_bkup

で新規ファイルを作成して

0 2 * * * root スクリプトのフルパス名

と書いたものを:wqで保存しておいて置くと毎日AM2:00に自動でバックアップを作成してくれるようになります。

 

こんな具合で必要なファイルを一纏めにして圧縮しておいて置くといざという時に役に立ってくれるかもしれません。

 

できればこれをサーバ上に置いておくだけでなく、クライアントにコピーして置けばマシンのトラブルなどでデータを読み出せなくなったりOSの再インストールを行うような羽目になっても対応できます。

 

ここでは端末上でバッチファイルを動かしてFTP経由にてダウンロードする方法を。

(もちろんFTPサーバの構築が必須ですが・・・)

 

まずはディレクトリを作成して適当な名前をつけます。(例えばbkup_dlとかなんとか)

 

続いて同じディレクトリにbkup_dl.txt(これも適当でよいです。要は分かりやすい名前ならOK)を作成して中身に

 

open FTPサーバ名

FTPユーザ名

パスワード

binary

get /var/bkup/bkup.tar.gz

quit

 

と記述します。

 

あとはメモ帳でもなんでもよいので

ftp -s:bkupdl.txt > bkupdl.log

と記述して「bkupdl.bat」とでも名前を付けたバッチファイルを作成します。

 

バッチファイルとテキストファイルを同じディレクトリにおいてバッチファイルをダブルクリックすればそのディレクトリ内にサーバで作成したbkup.tar.gzがダウンロードされ、その過程がbkupdl.logとして残ります。(ログは追記ではなく上書きになりますが。タイムスタンプを見ればいつバックアップのコピーをとったかすぐわかります)

 

バッチファイルのショートカットでも作成してスタートアップに放り込んでおけば端末を起動するたびにバックアップを勝手に取得してくれます。もっとも起動直後にバッチファイルを走らせるのは負荷のかかっている起動時のPCには辛い場合もあるかもしれませんので悪しからず・・・

オススメの記事

-Linuxサーバ
-, , , ,