WHAT'S NEW?
Loading...

簡単なシェルスクリプトで色々バックアップしてみよう

■特定の場所にあるファイルやフォルダを別の場所で世代別に同期する

例えばユーザがアップロードした画像などをファイルで保存している場合や、チャットのログをテキストファイルで管理しているような、ファイルベースのモデルだけど、それらのファイルをまるごと世代管理を意識したバックアップを取ってみたくなる衝動に駆られるっつーわけよ、少なくとも俺は。

というわけで、bashで簡単なバッチを作ってみたんで晒すよ。
rootで動かすのが前提なんで、結構単純明快。


あなたが必要になるパラメータは

  • 世代数
  • バックアップ先の所有者
  • バックアップ元
  • バックアップ先

の4つだ。

それぞれをスクリプト内に直接記述し、cronでroot権限で動かせばOK。




ライセンスはどうでもいいので、一番ゆるいと思われるMITライセンスにしておくよ。

けど別にライセンスなんかあったって、使いたい人は勝手に無許可に無断で無節操に使えばいいと思ってるんで、いちいち俺には連絡しないほうが良いよ。面倒くさいんで。


■特定の場所にあるログファイルを毎月末に圧縮して別の場所に保存する

Apacheとかのログファイルが肥大化すると厄介なんだよ。

特にCentOSとか使ってると、しょぼしょぼヘタレなsyslogちゃんとか、ログを切り詰めてくれるlogrotateちゃんとか、Apacheと一緒に仲良く落ちてくれる。

そういう意味では今や標準となってるrsyslogくらい入れておけと大きな(そしてドスの効いた)声で言いたいんだけど、どうでもいいよ。シェル作ったから。


というわけで、bashで簡単なバッチを作ってみたんで晒すよ。
rootで動かすのが前提なんで、結構単純明快。


あなたが必要になるパラメータは

  • バックアップ先の所有者
  • バックアップ元
  • バックアップ先
  • 対象となるログファイル群

の4つだ。ログファイルは配列なので複数指定できるよ。便利っぽいけど、中途半端な実装になってるから気をつけるんだ。


ライセンスはどうでもいいので、一番ゆるいと思われるMITライセンスにしておくよ。

けど別にライセンスなんかあったって、使いたい人は勝手に無許可に無断で無節操に使えばいいと思ってるんで、いちいち俺には連絡しないほうが良いよ。面倒くさいんで。

ちなみにcronで月末って指定するには、こんな感じでいいと思うよ

59 23 28-31 * * /usr/bin/test `date -d tomorrow +\%d` -eq 1 && /home/buser/backup_log.sh

今日が28〜31日で且つ、明日が1日の場合、23時59分になったら『/home/buser/backup_log.sh』を実行するよ。

■MySQLの特定のデータベースをまるごと別の場所で世代別にダンプする

激しくCRUDするタイプのWebアプリでもない限り、データベースのバックアップなんか、肩の力を抜いてゆとりを持った姿勢でいいんじゃないかと思ったんだよね。

要するに、比較的アクセスの少ない時間帯にホットでダンプする感じ。

というわけで、bashで簡単なバッチを作ってみたんで晒すよ。
rootで動かすのが前提なんで、結構単純明快。

あなたが必要になるパラメータは

  • 世代数
  • バックアップ先の所有者
  • MySQLの接続カウント
  • データベース名
  • ダンプファイル名
  • バックアップ先

の6種類だ。アカウントはユーザ名とパスワードがあるので、数で言うと7個だ。どうだ?

ライセンスはどうでもいいので、一番ゆるいと思われるMITライセンスにしておくよ。

けど別にライセンスなんかあったって、使いたい人は勝手に無許可に無断で無節操に使えばいいと思ってるんで、いちいち俺には連絡しないほうが良いよ。面倒くさいんで。

■最後に

ご理解いただけているとは思うけど一応言っておくよ。
コピペしただけで動かない!とかほざく人や、使い方がわからない人は、俺に聞くんじゃなくて、己の手で調べるが良いよ。

あと、Windowsじゃ動かないし、ぴゅう太やソードM5とかでも動かないことは火を見るより明らか。

検索するときは、『bash』とか『バックアップ』とか『とあるサーバの管理者』とか『俺のシェルがこんなに動かないわけがない!』などで調べるんだ。

もし俺のブログがヒットしたら無間地獄だ。疲労が増すよね。
まぁ疲れたら飲みにでも行けばよいよ。