本投稿は、バックアップ関連(Dropboxとlftp)関連のインストール、設定関係の記事になります。
バックアップとしては下記のような方法をとってバックアップしています。
- Dropboxのフォルダに、日次でバックアップを取る(Vhostのコンテンツデータ、Redmineの添付ファイル、DBのデータ)
- バックアップデータを1回/日でさくらのレンタルサーバ
へlftpでミラーリングする
2つにアップすることによって、片方に何かあった時でも対応できるようにしてます。
まぁ何があるかはわからないしね。
さくらのレンタルサーバは年額でも1500円ちょっとで10Gもあるので、バックアップ先にはちょうどいいかなって。
Dropboxのインストール
1 2 3 4 5 |
cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf - ~/.dropbox-dist/dropboxd cd .dropbox-dist wget -O dropbox.py "http://www.dropbox.com/download?dl=packages/dropbox.py" chmod a+x dropbox.py |
サービスの設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
vi /etc/systemd/system/dropbox.service ============== [Unit] Description=Dropbox Client Service [Service] Type=forking ExecStart=/root/.dropbox-dist/dropbox.py start ExecStop=/root/.dropbox-dist/dropbox.py stop [Install] WantedBy=multi-user.target ============ systemctl enable dropbox.service systemctl start dropbox.service |
lftpのインストール
1 |
yum install -y lftp |
これだけ。。。
lftpへのバックアップ設定
ltfp.txt みたいなファイルを用意します。
さくらのレンタルサーバの外部から見えない領域にファイルをアップします。
一度、FTPでさくらのレンタルサーバへアクセスし、/home/<username>に filesとか適当な名前でフォルダを作っておきます。
1 2 3 4 5 6 7 8 9 10 11 |
## @filename ltfp.txt set ftp:charset Shift_JIS set ssl:verify-certificate no set ftp:ssl-allow no ## open -u <username>,<password> <hostname> open -u hogehoge,xxxxxx xxxxx.sakura.ne.jp cd /home/<username>/files ## 同期したくないフォルダは -Xではずす。 mirror -R --delete --only-newer --verbose /root/Dropbox -X /root/Dropbox/radio close quit |
lftp -f /<ファイルパス>/lftp.txt を実行して、ミラーリングができるかチェックする。
問題がなければ、Cronに下記の様に書いておく。
00 8 * * * lftp -f /<ファイルパス>/lftp.txt
バックアップ用のスクリプト(コンテンツデータ)
うちは、こうやってる程度ですが参考まで。
いろんなサイトさんを参考に書き直しているのですが。。。
このスクリプトでバックアップするものとしては、
- バーチャルホストのコンテンツ
- Redmineの添付ファイル
- ApacheのConfig類
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/bin/bash # @filename contents-backup.sh # バックアップ先 BAKDIR="/root/Dropbox/httpd/vhost"; # バックアップ元 ( tar コマンドでエラーになるので先頭の / は外す ) SRCDIRS=" var/www/vhost/ var/lib/redmine/files/ etc/httpd/conf/ etc/httpd/conf.d/ "; # バックアップ先がなければ作成 [ ! -d ${BAKDIR} ] && mkdir -p ${BAKDIR}; # バックアップ実行 cd /; tar -czf ${BAKDIR}/`date +%Y%m%d`_backupfiles.tar.gz ${SRCDIRS} 1> /dev/null; # 10daysより古いバックアップは削除 find ${BAKDIR} -type f -mtime +9 -exec rm -f {} \;; |
これを毎朝実行し、10日間分をローテーションしてます。
DBのバックアップ
Mysqlのデータをバックアップ。
DBは一括でDumpを取らずDBごとに取ってます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#!/bin/bash #適宜下記ID/PWは書き換えてください。 ID=xxxxx PASSWD=xxxxxxxx DSTDIR=${HOME}/Dropbox/sql [ ! -d ${DSTDIR} ] && mkdir -p ${DSTDIR} cd ${DSTDIR} # 11日より古いバックアップは削除 find ${DSTDIR} -type f -mtime +10 -exec rm -f {} \;; for A in $(mysql -u ${ID} -p${PASSWD} -e "show databases\G" | egrep ^Database | awk '{print $NF}' | egrep -v '(^information_schema$|^mysql$)') do [ -f 009_${A}.sql.gz ] && mv 009_${A}.sql.gz 010_${A}.sql.gz [ -f 008_${A}.sql.gz ] && mv 008_${A}.sql.gz 009_${A}.sql.gz [ -f 007_${A}.sql.gz ] && mv 007_${A}.sql.gz 008_${A}.sql.gz [ -f 006_${A}.sql.gz ] && mv 006_${A}.sql.gz 007_${A}.sql.gz [ -f 005_${A}.sql.gz ] && mv 005_${A}.sql.gz 006_${A}.sql.gz [ -f 004_${A}.sql.gz ] && mv 004_${A}.sql.gz 005_${A}.sql.gz [ -f 003_${A}.sql.gz ] && mv 003_${A}.sql.gz 004_${A}.sql.gz [ -f 002_${A}.sql.gz ] && mv 002_${A}.sql.gz 003_${A}.sql.gz [ -f 001_${A}.sql.gz ] && mv 001_${A}.sql.gz 002_${A}.sql.gz mysqldump --skip-lock-tables -u ${ID} -p${PASSWD} $A > 001_${A}.sql gzip 001_ |
2つのスクリプトをCronに書いて実行します。