費用なしのバックアップ

画像

バックアップは永遠の問題です。データボリュームがおかしい場合、通常はそれらを忘れます。 私の以前のプロジェクトdvice.ru(まだ閉じられているので、リンクがありません)の開始の最初に不幸なミスをしました。 私は小さな王冠を書きました。それは午前12時に24時間以上前に登録した非アクティブなユーザーをすべて削除しました。 しかし、リクエストを間違えて、このリクエストの最初の起動前に登録したユーザーのデータを失いました。 神に感謝します、私はセッションのすべてのデータを持っていたので、ログインしてチェックボックスをチェックしたすべての人を復元しました-覚えておいてください。 それは恥ずかしくて愚かですが、間違いから学びます。 したがって、 最新のプロジェクトinwhite.ruを開始する前に、 バックアップシステムを作成しました



バックアップが作成および蓄積され、古いバックアップが削除され、すべてが正常に行われました。 突然、完全なゴミに苦しんでいることに気付きました。 私はバックアップを取っていますが、私はそれを取りません。 私のVPSにあるデータの量はそれほど多くありませんが、あなたも特にメールしません。 別のVPSを購入してFTP / SVN / CVS / SSHですべてをそこに置きたくはありませんが、これも興味深いオプションです。



昨日まで、このデータをどのように取得できるのかという考えに戸惑っていました。 そして夕方、それは私を夜明けさせました。



私はDropboxの幸せなユーザーです。 無料のアカウントではありますが、 inwhite.ruのおかげで、2.5GB以上の空き容量があります。 最初の2GBではなく、すでに4.5GBもあります。 また、さらに500MBのスペースが増加する場合があります。 そして、これはすでに平均的なデータ量のバックアップを作成するための通常のプラットフォームです。



アーカイブ内のファイルを200 MBでバックアップした時点で、毎日バックアップするように設定したデータベースは1日あたり2 MBで、inwhite.ruデータベースのバックアップは1時間ごとに(害のない方法で)バックアップされ、これまで約1週間募集されました215MB。


「24時間以内にDROPBOXを使用してサーバーからバックアップを構成する方法」という本を検索しませんでした。 ビッグインターネットを調べてみたところ、GUIなしでDropboxをセットアップして動作させる方法に関する記事を見つけました。 これが最も重要なことでした Windowsサーバーがない場合は、サーバーにXがあるとは考えられません。



記事はこのアドレスにありますが 、ここでは引用しません。 プロセス自体は非常に単純で、十分に詳細に説明されています。 私はいくつかのことだけを言います:

  1. Dropboxのセットアップを開始した場合、HOST_IDはDropboxの起動元のフォルダーに依存します。
  2. たとえば、私のようなファイルを、説明したファイルの場所〜/ .dropbox-dist(プログラムをそこに格納するために使用した)から/ usr / local / dropboxに転送する場合、HOST_IDを新しい方法で取得する必要があります
  3. dbreadconfigは私には機能しませんでした。このPythonスクリプトを修正しない限り、dbreadconfigが機能しないことがわかります。
  4. p。3の結果-ストックsqlite3
  5. Debian / Ubuntu起動スクリプトも私には役に立たなかったので、修正された形式で投稿します。
また、私はいくつかの新しいステップを踏むことを許可しました。 サーバーに独自のルールがあります。 Dropboxのユーザーを作成します。



adduser --home /home/dropbox --shell /bin/false --disabled-login dropbox





ユーザーのフォルダに別のフォルダ「Dropbox」を作成する必要があることに注意してください。 Dropboxはデフォルトでファイルを書き込みます。



つまり 基本的に次のようなもの:



/home

/home/dropbox

# Dropbox

/home/dropbox/.dropbox

# , .. Dropbox -

/home/dropbox/Dropbox






スクリプト自体を起動する



USERS= "dropbox" <br>DAEMON=/usr/local/dropbox/dropbox<br>LAUNCH=/usr/local/dropbox/dropboxd<br><br>start() {<br> echo "Starting dropbox..." <br> for dbuser in $USERS; do <br> HOMEDIR=`getent passwd $dbuser | cut -d: -f6`<br> if [ -x $DAEMON ]; then<br> HOME= "$HOMEDIR" start-stop-daemon -b -o -c $dbuser -S -u $dbuser -x $LAUNCH<br> fi<br> done<br>}<br> <br>stop() {<br> echo "Stopping dropbox..." <br> for dbuser in $USERS; do <br> if [ -x $DAEMON ]; then<br> start-stop-daemon -o -c $dbuser -K -u $dbuser -x $DAEMON<br> fi<br> done<br>}<br> <br>status() {<br> for dbuser in $USERS; do <br> HOMEDIR=`getent passwd $dbuser | cut -d: -f6`<br> USERPID=`cat $HOMEDIR/.dropbox/dropbox.pid`<br> if [ -z $USERPID ] ; then<br> echo "Dropbox for USER $dbuser: not running." <br> else <br> echo "Dropbox for USER $dbuser: running (pid $USERPID)" <br> fi<br> done<br>}<br> <br> case "$1" in <br> start)<br> start<br> ;;<br> <br> stop)<br> stop<br> ;;<br><br> restart|reload|force-reload)<br> stop<br> start<br> ;;<br> <br> status)<br> status<br> ;;<br> <br> *)<br> echo "Usage: /etc/init.d/dropbox {start|stop|reload|force-reload|restart|status}" <br> exit 1<br> <br>esac<br> <br>exit 0





しかし、そこに他の記事の使用方法に関する記事を書くことは私には無意味に思えます。そのため、「不要なジェスチャーなしでサーバーからデータをバックアップする方法」というトピックのこの種のバリエーションだけでなく、プロセス自体のスクリプトも共有することにしました。



私のバックアップはサイトごとに異なる恒常性で発生すると既に述べましたが、もう一度思い出させてください:

  1. inwhite.ru-1時間ごと
  2. 他のすべて-毎日
実際、これらのスクリプトには大きな違いはないため、1回だけ説明します。 2つのスクリプト、なぜなら データベースとファイルをバックアップしますが、それらは2つの異なるものです。



だから。



バックアップデータベース



#!/bin/bash<br><br>DATE=`date "+%Y-%m-%d" `<br>TIME=`date "+%H-%M" `<br><br># Dropbox Backup, ..<br># <br># Dropbox<br># , , , <br>HOME= "/home/dropbox/Dropbox/Backup" <br><br># , <br># , , <br># <br># , , <br># , , <br>SKIP=( "information_schema" "mysql" )<br><br>HOST= "127.0.0.1" # , <br>USER= "" # <br>PASSWORD= "" # <br><br># <br>DBS= "$(mysql -h$HOST -u$USER -p$PASSWORD -Bse 'show databases')" <br><br># , <br># , , , <br># , .. <br>in_array() {<br> haystack=( "$@" )<br> needle=$1<br> <br> unset haystack[0]<br> <br> for i in "${haystack[@]}" ; do <br> if [ "$needle" == "$i" ]; then<br> return 1<br> fi<br> done<br> <br> return 0<br>}<br><br># HERE GOES THE MAGIC <br> for DB in $DBS; do <br> # <br> in_array $DB "${SKIP[@]}" <br> <br> # <br> if [ "$?" == 0 ]; then<br> # , <br> # :<br> # /home/dropbox/Dropbox/Backup/DB/inwhite<br> mkdir -p $HOME/DB/$DB<br><br> # <br> mysqldump -h$HOST -u$USER -p$PASSWORD $DB > /tmp/db-$DB-$DATE-$TIME.sql<br> # TAR '<br> tar -Pcf /tmp/db-$DB-$DATE-$TIME.tar /tmp/db-$DB-$DATE-$TIME.sql<br> # GZIP' . , ,<br> # <br> gzip -c9 /tmp/db-$DB-$DATE-$TIME.tar > $HOME/DB/$DB/$DATE.tar.gz<br><br> # , <br> rm -f /tmp/db-$DB-$DATE-$TIME.tar<br> rm -f /tmp/db-$DB-$DATE-$TIME.sql<br><br> # , 7 <br> find $HOME/DB/$DB/* -type d -mtime +7 -exec rm -rf {} \;<br> fi<br>done<br><br>exit 0;





ファイルをバックアップします



実際、これらはデータ取得の点でわずかに異なる2つのほぼ同一のプロセスです。



#!/bin/bash<br><br>HOME= "/home/dropbox/Dropbox/Backup" <br><br>DATE=`date "+%Y-%m-%d" `<br>TIME=`date "+%H-%M" `<br><br># , <br>SKIP=( "test1.ru" "test2.ru" "test3.ru" )<br><br># , <br># /home/apache<br># , , / var /www, <br># :<br># DOMAINS=`find / var /www -maxdepth 1 -type d | sed 's/\/var\/www//' | sed 's/\///' `<br>DOMAINS=`find /home/apache -maxdepth 1 -type d | sed 's/\/home\/apache//' | sed 's/\///' `<br><br>in_array() {<br> haystack=( "$@" )<br> needle=$1<br> <br> unset haystack[0]<br> <br> for i in "${haystack[@]}" ; do <br> if [ "$needle" == "$i" ]; then<br> return 1<br> fi<br> done<br> <br> return 0<br>}<br><br> for DOMAIN in $DOMAINS; do <br> in_array $DOMAIN "${SKIP[@]}" <br><br> if [ "$?" == 0 ]; then<br> mkdir -p /$HOME/FS/$DOMAIN<br><br> tar -Pcf /tmp/fs-$DOMAIN-$DATE-$TIME.tar /home/apache/$DOMAIN<br> gzip -c9 /tmp/fs-$DOMAIN-$DATE-$TIME.tar > /$HOME/FS/$DOMAIN/$DATE.tar.gz<br><br> # TAR, .. SQL <br> # <br> rm -f /tmp/fs-$DOMAIN-$DATE-$TIME.tar<br><br> find /$HOME/FS/$DOMAIN/* -type d -mtime +7 -exec rm -rf {} \;<br> fi<br>done;<br><br>exit 0;





私にとってはそれぞれデータベースとファイルシステムと呼ばれているので、それらを/etc/cron.dailyにインストールした後、以下を行う必要があります。



chmod +x /etc/cron.daily/database

chmod +x /etc/cron.daily/filesystem






もちろん、これは最も簡単なオプションです。 すべてを「正しく」実行して、これらのスクリプトをどこかに配置し、crontab -eを使用してタスクを追加できます。 しかし、私は自分のサーバーの唯一のユーザーであり、他の誰もそのサーバーにアクセスできません。したがって、私にとってはより簡単で便利なため、実行する権利があります。



また、データベースをバックアップするユーザーに代わってこれらの権限が十分にあるという事実にも注意を促します。



SELECT, SHOW DATABASES, LOCK TABLES, SHOW VIEW





一般的に、ここで言えることはそれだけです。 ご清聴ありがとうございました。健康をお楽しみください。 これが誰かに役立つことを願っています。



All Articles