LinuxのWebサーバ内容を外付けHDDへ定期バックアップする
VineLinuxで立てたWebサーバにHDDを認識させて、cronを使って1日1回自動でバックアップをするように設定したメモです。
環境
このような環境です。Apache2のドキュメントルート(/var/www/html)と、WordPressの他にもDBとやりとりしてるモノがあるので、MySQLの内容をバックアップしたいなーと。
HDDをマウント
こちらのとおりにできました。接続して、フォーマットして、マウント。マウント先は /mnt/backup としておきます。
Linux起動時に自動でマウントさせる
再起動したときも自動的にマウントさせたいので、/etc/fstab に
/dev/sdb1 /mnt/backup ext4 defaults 0 0
と、最終行に追記。
バックアップする
まずは手動で動くかどうか。
Apache2のドキュメントルート
こちらは簡単。ファイル名を html.tar という名前にするとして、コマンドライン端末で
tar cvf /mnt/backup/html.tar /var/www/html
このように書いて、書庫ファイルとしてHDDへバックアップ。
MySQL
こちらを参考にさせていただき、稼働させたままだと難しそうだけど、1回停止するのが良さそう。24時間稼働させておく必要はないので、使われる可能性が一番低い朝方に 停止 → バックアップ → 起動 にしてみよう!
/etc/init.d/mysqld stop tar cvf /mnt/EXT_HDD/backup/mysql.tar /var/lib/mysql /etc/init.d/mysqld start
ファイル名は mysql.tar にして、このように。
シェルスクリプトを作る
さて、手動でのバックアップは出来たので、今度はこれをひとつのプログラムにまとめてみます。任意の場所(わたしは /etc/var/www/html にしちゃいました)に bk.sh というファイル名のシェルスクリプトを作っておいて、
#!/bin/sh TODAY=`date '+%F'` YDAY=`date -d '14 days ago' '+%F'` tar cvf /mnt/EXT_HDD/backup/$TODAY-html.tar /var/www/html /etc/init.d/mysql stop tar cvf /mnt/EXT_HDD/backup/$TODAY-mysql.tar /var/lib/mysql /etc/init.d/mysql start rm /mnt/EXT_HDD/backup/$YDAY-html.tar rm /mnt/EXT_HDD/backup/$YDAY-mysql.tar
2行目で本日の日付を取得して、4~7行目で日付をつけたファイル名でバックアップしています。その後、14日(2週間)前の日付のバックアップファイルを削除する、という内容も書いています。
「`」という記号の打ち方がわからなくて調べましたw Shift + @ なんですね!「’」とか「”」以外にも括る記号ってあるんですねー、初めて使いました!
今度はコマンドライン端末から、
chmod 777 /var/www/html/bk.sh
実行権限を変更します。
/var/www/html/bk.sh
試しに走らせてみると、ちゃんと動きました!
cronを使って指定時間にシェルスクリプトを実行する
cronはデフォルトで起動していたようなので、コマンドライン端末で
crontab -e
と打つと、エディタが起動してcronの設定ファイルに書き込めるので
0 4 * * * /var/www/html/bk.sh
と、書けば毎朝4時に実行してくれる、はず…。えっと、保存…。保存とかのコマンドが全然わからなくて四苦八苦しましたw 「ZZ」が保存して終了とか!!((└(:3」┌)┘))
以上です!いまのところこれで動いています。
コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)
YouTubeでQ&Aコンテンツを企画しています
運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。