Ya.Diskの異なるアカウントへのバックアップの編成

著名なカブロソコミュニティへのご挨拶! クラウドストレージでのサイトバックアップのトピックは非常に広く開示されています。 しかし、質問に対して:1001番目の自転車を発明する価値があるかどうか、私はいつも答えます-それは価値があります。



多くの管理者の典型的な状況:





そして、お客様のYa。Disksでバックアップを整理してみませんか? ファイルだけでなく、データベースダンプもバックアップしますか? そして、彼らに指示してください: 神は禁じます、我々は近づいてくるカマズに行きます、あなたのサイトは常にあなたのY.ディスクにあります。



なぜなら Yandexについて話しているのはもちろん、サーバー上のドメインをYandexに委任しました。 サーバーをロードする理由 Yandexは、smtpプロトコル経由でメールを処理できます。 同時に、YandexとNSが管理を引き継ぎます。 実際には便利です。



異なるYa.Diskアカウントへのバックアップを整理するには何が必要ですか:





そしてもちろん、Yandexで作成されたroot@your-site.ruという形式の大切なメールがあります。 root@your-site.ruに代わって、バックアップに関する手紙を受け取ります。



この記事で提案されているアルゴリズムは、 Ubuntu 16.04を搭載したサーバーでテストされています。



サーバーにssmtpをインストール、構成、テストする



すでにサーバーから自分にメールを送信している場合は、この項目をスキップしてください。それ以外の場合は読みます。



なぜなら サーバーには多くのユーザーがいます。ルートスーパーユーザーで作業する必要があります。 さらに、データベースファイルとデータベースパスワードをユーザーファイルに書き込み、このすべてのデータを/ルートディレクトリに保存する必要があります。



ルートのssh-connectionを閉じましたか? suを実行できるのは、最も信頼できるユーザーのみです。



コンソールで実行します:



su cd /root apt update && apt upgrade apt install ssmtp
      
      





/ルートディレクトリに移動し、ssmtpをインストールしました。 それ以降のすべてのコマンドもこのディレクトリで実行されます。



ssmtp構成の編集:



 nano /etc/ssmtp/ssmtp.conf
      
      





フォームにそれをもたらします:



 root=root@your_site.ru mailhub=smtp.yandex.ru:465 AuthUser=root@your_site.ru AuthPass=your_passwd AuthMethod=LOGIN FromLineOverride=YES UseTLS=YES Hostname=your_site.ru
      
      





構成は明らかであり、コメントするものはありません。



それだけです! これで問題を解決できます。



/ rootでのバックアップに関するレターのテンプレートを作成し、ssmtpの動作を確認しましょう



 nano rsync_email_orig
      
      





フォームに持っていきましょう:



 To: your_email@gmail.com From: root@your-site Subject: Backup sites Info on backup:
      
      





自分にメールを送信:



 cp rsync_email_orig rsync_email_orig_test echo 'Test msg' >> rsync_email_orig_test ssmtp your_email@gmail.com < rsync_email_orig_test rm -f rsync_email_orig_test
      
      





問題はないはずです。設定は基本です。



クライアントのインストール、構成I.ディスク



私は仕事にクライアントIを使用しています。開発者Anton Batenevのディスク: github.com/abbat/ydcmd



この特定のクライアントが選ばれた理由:





ydcmdをインストールするには、次のコマンドを実行します。



 sudo add-apt-repository ppa:abbat/ydcmd sudo apt update sudo apt install ydcmd
      
      





私たちが検討しているクライアントは、/ usr / binにコピーされたpythonコマンド-ydcmd.pyにすぎません。 動作させるには、お客様のYandexアカウントのトークンを取得する必要があります。



トークンを取得するプロセスを説明することは意味がありません。 Githubの詳細: github.com/abbat/ydcmd 、またはYandex マニュアル



トークンを受け取った後、お客様用に異なる構成を作成します。 2つの異なるトークンがあります。1つはすべてのサイトに共通で、2つ目はサービス契約が締結されている個々のクライアント用です。 したがって、この記事では、すべてのユーザー用とユーザー獣医用の2つの構成に焦点を当てます。



/ rootにデフォルト構成を作成します



 nano /root/.ydcmd.cfg
      
      





フォームにそれをもたらします:



 [ydcmd] token = 1234567890
      
      





同様に、ユーザーvetの設定を作成します。このユーザーのサイトは別のYandex.Diskにバックアップされます。



 nano /root/.ydcmd_vet.cfg
      
      





また、フォームにそれをもたらします:



 [ydcmd] token = any_token
      
      





両方の構成のydcmdの動作を確認します。



 ydcmd stat ydcmd --config=.ydcmd_vet.cfg stat
      
      





どちらの場合も、次のようなものが出力されるはずです。



 name: disk exif: {} resource_id: 21239186:e9065863c345ergdfghjfgy51da3c5e06bc12345afeb14158ddcaae created: 2012-04-04T20:00:00+00:00 modified: 2012-04-04T20:00:00+00:00 path: disk:/ comment_ids: {} type: dir revision: 1354646733351472
      
      





通常の仕組み:



 ydcmd --help
      
      





Ya.Diskiにバックアップ用のフォルダーを作成します。



 ydcmd mkdir backup ydcmd --config=.ydcmd_vet.cfg mkdir backup
      
      





これで準備は完了です。



Ssmtpが機能し、バックアップレターテンプレートが作成され、Ya.Diskクライアントが異なるアカウント用に構成されます。 / rootフォルダーで作業していることを思い出してください。



バックアップ用のbashスクリプトの準備



実際、bashスクリプトには新しいものは何もありません。 覚えていないさまざまなソースからの編集。 スクリプトは1日おきに実行され、最後の3つのコピーが保存されます。 なぜそう 私にとってより便利だからです 誰でも自分で変更できます。



bashスクリプト
 #!/bin/bash DATE=`/bin/date '+%d.%m.%Y'` USER=$1 DIR=/var/www DIR_SITES=public_html EMAIL=your_email@gmail.com TEMPLATE_EMAIL=/root/rsync_email D=`date +%j` #      .     2  bash.    == 1,  == 0. ..      if [ $((10#$D % 2)) == 1 ];then case $USER in vet) FILE=user_list_vet cnf=.ydcmd_vet.cfg DIR_BACKUP=/root/backup_vet ;; *) FILE=user_list_all cnf=.ydcmd.cfg DIR_BACKUP=/root/backup ;; esac else exit 1 fi if ! [[ -d $DIR_BACKUP ]]; then mkdir $DIR_BACKUP fi cp rsync_email_orig rsync_email echo "$DATE" >> $TEMPLATE_EMAIL echo "==============================================" >> $TEMPLATE_EMAIL while read line;do IFS=";" set -- $line USER=$1 SITES=$2 DB=$3 DB_USER=$4 DB_PASSWD=$5 FILE_NAME=$DIR_BACKUP/backup_"$SITES"_"$DATE".zip cd $DIR/$USER/$DIR_SITES mysqldump -u$DB_USER -p$DB_PASSWD $DB > $DB.sql zip -r9 $FILE_NAME $SITES $DB.sql > /dev/null rm ./$DB.sql zip -T $FILE_NAME >> $TEMPLATE_EMAIL echo "==============================================" >> $TEMPLATE_EMAIL chown $USER:$USER $FILE_NAME done < /root/$FILE find $DIR_BACKUP/ -mtime +4 -exec rm -f {} \; /usr/bin/ydcmd --config=/root/$cnf put --rsync $DIR_BACKUP/ disk:/backup >> $TEMPLATE_EMAIL /usr/sbin/ssmtp $EMAIL < $TEMPLATE_EMAIL exit 0
      
      







実際には、ここに変数を登録する必要があります。



 #home dir DIR=/var/www #sites dir DIR_SITES=public_html EMAIL=your_email@gmail.com
      
      





そして、ここでの場合:



 if [ $((10#$D % 2)) == 1 ];then case $USER in vet) FILE=user_list_vet cnf=.ydcmd_vet.cfg DIR_BACKUP=/root/backup_vet ;; *) FILE=user_list_all cnf=.ydcmd.cfg DIR_BACKUP=/root/backup ;; esac else exit 1 fi
      
      





FILE変数が何であるかが明確でないだけです。



 FILE=user_list_vet
      
      





FILE変数は、次の形式のcsvファイルにすぎません。



 user1;site1.ru;DB_name1;user_DB_1;passwd_DB_1 user1;site2.ru;DB_name2;user_DB_2;passwd_DB_2 user2;site3.ru;DB_name3;user_DB_3;passwd_DB_3 ...
      
      





バックアップごとに、データを使用して独自のcsvファイルを作成します。



system_username; ドメイン DB_for_dump; db_user_name; DB_password



当然、システムユーザーの名前はユーザーのホームディレクトリの名前と一致します。 ユーザーvet-ホームディレクトリもvetです。



バックアップに必要なcsvファイルを作成し、ファイルに余分な空行がないことを追跡します ! スクリプトには空の行のチェックはありません!



つまり csvファイルを作成するとき-カーソルは、保存されるとき、最後の行の最後になければなりません。



すべてが試運転の準備ができています。



もう一度すべてをチェックします。





ルートスーパーユーザーフォルダーで作業します。 少量のデータを持つユーザーに対してスクリプトを実行しようとします。このテストユーザーは獣医です。ユーザー名をパラメーターとしてスクリプトに渡します。



 ./rsync.sh vet
      
      





すべてが透明でシンプルなので、問題はないはずです。



エラーへ:



 mysqldump: [Warning] Using a password on the command line interface can be insecure.
      
      





私たちは注意を払いません。



しかし、待ち伏せがある可能性があります。スクリプトは単に動作を停止し、何もしないことがあります。



次の行を見てください。



 #      .     2  bash.    == 1,  == 0. ..      if [ $((10#$D % 2)) == 1 ];then
      
      





そして、1を0に変更し、再び開始しようとします。



起こるべきこと:





実際にはすべて。 cronでタスクを登録することは残っています。



私にとってはこのように見えます:



 su crontab -e
      
      





 00 01 * * * /bin/bash /root/rsync.sh all 00 03 * * * /bin/bash /root/rsyn.sh vet
      
      





ご覧のとおり、cronは午前1時に実行され、異なるバックアップに対して午前3時に実行されます。 スクリプト自体は1日で機能します。



それだけです。建設的な批判、コメント、明確化を待っています。



All Articles