ファーストサーバ問題により、バックアップをサーバに置いておいても意味無いじゃん!ってことになってきてます(´・ω・)
で、違うオンラインストレージを借りてそこにバックアップするのもいいんですが、お金がかかります。
せっかくの目の前にパコソンがあるので、そのHDD内にバックアップしようという話です。
ローカルに落とせばMacのTimeMachineで世代管理も完璧です。
MTには標準でバックアップする方法がありますが、いまどき手動でバックアップするスタイル(´・ω・`)。ここでは全自動で行います。
方法としては
- mysql DBをmysqldump機能を使って定時に全バックアップ。
サーバ側でcronが使えることが条件です。cronが使えないと結局手動になります。 - UNIXコマンドwgetにてローカルにダウンロード
※OSXには標準でwgetがインストールされていないです。そんなときはMacportsを入れてwgetをインストール。
※Windowsでのwgetはこれまたインストールすれば動くでしょう。 - それをcronにて自動化
※OSXでは標準で入っているはずです。Windowsでcronはどうか知りません(笑)。でもWinには他に自動化するツールとかありそうですけどね。
MySQLの定期的バックアップ(cron) : Project MultiBurst
しかし自分のサーバではGNU dateが使えないので、findコマンドにて古いバックアップを削除する仕組みを作りました。
使うときはよくテストして下さい。
#!/bin/sh # バックアップしたファイルを保存するディレクトリを指定 BackupDIR=/home/xxx/mysql_backup # MySQLのダンプ処理(とりあえず一時ファイルとして保存) /usr/local/bin/mysqldump --default-character-set=binary -u (mysqlアカウント) --password='(mysqlパスワード)' --opt (DB名) > $BackupDIR/temp.sql # 改めてバックアップ元ファイルとして指定 srcfile=$BackupDIR/temp.sql # タイムスタンプの取得 timestamp=`date +%Y%m%d` #バックアップファイルのファイル名生成 bkfile=$BackupDIR/$timestamp.tar.gz #固めます tar zcvf $bkfile $srcfile > /dev/null 2>&1 #30日以上過ぎた古いバックアップ*.gzを削除する処理 find $BackupDIR -type f -mtime +30 -name "*.gz" -exec rm -f {} \; #tempファイルを削除 rm -f $BackupDIR/temp.sql
参考:
findコマンドはUNIXコマンド [find]
で、これを mysql_backup.sh などとしてサーバー側のどこかに保存します。そしてサーバ側のcronで一日一回動かしてバックアップを取って下さい。
これでmysqlの全バックアップを一日一回取得する仕組みができました。
さて次にこのサーバ内にあるバックアップファイルや、アップロードしたファイルなどをローカルにwgetでダウンロードしてきます。
先ほどバックアップしたのはDB情報だけでアップロードした写真などはバックアップされていません。
なので、ダウンロードしてくるのは、サイトのルートから全部を落としてくればいいと思います。
shを使って書きます。
これを backupget.sh などとして保存します。
#!/bin/csh -f # WgetFunc="/usr/local/bin/wget" BackUpLocalDir="(ローカル側のディレクトリを指定 例:/Volumes/HDD/full_backup )" LogFile="(ログファイルを指定 例:/Volumes/HDD/full_backup/log.txt" FtpAccount="(FTPアカウント名)" FtpPass="(FTPパスワード)" FtpServer="(FTPサーバ名)" FtpDir="(ダウンロードしたいサーバ側のディレクトリ名 例:/home/hoge/)" # ${WgetFunc} -r -N -np -P ${BackUpLocalDir} -a ${LogFile} ftp://${FtpAccount}:${FtpPass}@${FtpServer}${FtpDir} #
-r は必ず付けて下さい。これを付けないとディレクトリをダウンロードできません。あとのオプションなどは各自調べてみてください。
Linuxコマンド集 – 【 wget 】 ファイルをダウンロードする:ITpro
ダウンロードコマンドwgetのオプション一覧(linux)
これをターミナル.appで動かしてみて下さい。動けばちゃんとローカルディレクトリにダウンロードしてくるはずです。こちらを参考にしてください。
xxxxx:$ sh backupget.sh
とこんな感じで設定すれば、毎日3時半に勝手にダウンロードしてくれて、ローカルに完全なバックアップが手に入ります。
以上。
コメント
[…] (MovableType版はこちら) […]