Zabbix:小さなデータベースのバックアップ

データバックアップの必要性に関する長い説明は省略します。 私たちは皆、バックアップが必要であることを知っています。 Zabbixを積極的に使用する人は、データベースが破損したり新しいサーバーに転送されたりした場合などにデータベースを復元できる可能性についても考えています。 これに最適なオプションは複製であることは明らかですが、すべての組織が複製できるわけではありません。 Zabbixバックアップの問題がどのように解決されたかを示します。 興味がある人は猫をお願いします。



警告:以下に示すスキームは理想的ではないと考えているため、この記事はモデルとして書かれたのではなく、建設的な批判と改善のための有用なヒントを得ることを目的としています。



Zabbixデータベースをバックアップする必要に直面したとき、私は遠くまで行かず、実績のあるツールmysqldumpを使用することにしました。 redmine、glpi、drupalなどの他のWebサービスのデータベースで使用するとうまく機能しましたが、Zabbixの場合は完全に不適切であることが判明しました。 バックアップが作成され、エラーは発生しませんでしたが、雨の日が来るとバックアップの復元が必要になりました。 ダンプから比較的小さなベースをアンロードするのに約2日かかりました。 当時のデータベースが初期状態だったとすると、将来のダウンタイムは大幅に増加するでしょう。 それはまったく受け入れられませんでした。 その時、私の心はPercona XtraBackupに落ちました。



Percona Xtrabackupは、ブロックせずにMySQLデータベースをバックアップできるオープンソースソフトウェア製品です。 Open Query、mozilla.org、およびFacebookはこのプログラムを使用しているため、これは粗雑な赤い目ではないと結論付けることができます。 私の場合、ディスクサブシステムのパフォーマンスが低いため、zabbixサーバーと一緒にPerconaを使用することはできませんでした。 PerbbaがZabbixがアクティブに書き込んでいるデータを読み取る時間がなかったために、エラーが発生することがありました。 バックアップの作成中に、zabbixサーバーを停止することが決定されました。 今日では1日約6分かかります。 特に重要なトリガーはすべてSNMPトラップに関連付けられていることを考慮すると、zabbix-serverを起動した後もまだ除外されないため、今回は非常に受け入れられます。 おそらくあなたの場合、Zabbixデーモンを停止する必要はなく、ダウンタイムはまったくありません。



それから、私にとって理想的なバックアップはどうあるべきかを考えました。 そして、最高のバックアップは気にしないバックアップであることに気付きましたが、実行されていることは知っています。 私はなんとかこの結果を達成することができました。バックアップについては心配していません。 毎朝指を交差させてサーバーに行くわけではなく、ログ、ファイルサイズ、パーティションの残りスペースを確認しません。 しかし、バックアップが行われていることは知っています。必要な情報をすべて電子メールで取得しているからです。 かなり単純なスクリプトがこれに役立ちます。これを一般に公開したいと思います。 おそらく彼には、私が疑わないいくつかの問題があるのでしょうか?



Zabbixでは、電子メール通知が設定されています。 このために、 ssmtpが使用されます。 インターネットには十分な説明があります。さらに、トピックは完全に異なると考えられているため、これについては説明しません。 Perconaとssmtpを除き、具体的なものは何も使用されていません。tar、gzip、sed、およびfindはすべてのディストリビューションに含まれています。 信頼性のために、バックアップファイルはNFSを介してリモートサーバーに複製されます。



使用されるシステム:





スクリプト自体
#!/bin/bash DAY=`date +%Y%m%d` LOGFILE=/var/log/zabbix_backup.log # E-mail,     EMAIL=admin@host.com #   logfile  mailfile:             logrotate MAILFILE=/tmp/mailfile.tmp #    BK_GLOBAL=/home/zabbix/backups #     BK_DIR=$BK_GLOBAL/Zabbix_$DAY # # set_date        set_date () { DT=`date "+%y%m%d %H:%M:%S"` } # mkdir $BK_DIR set_date echo -e "$DT     ZABBIX" > $MAILFILE service zabbix-server stop 2>>$MAILFILE innobackupex --user=root --password=qwerty --no-timestamp $BK_DIR/xtra 2>&1 | tee /var/log/innobackupex.log | egrep "ERROR|innobackupex: completed OK" >>$MAILFILE innobackupex --apply-log --use-memory=1000M $BK_DIR/xtra 2>&1 | tee /var/log/innobackupex.log | egrep "ERROR|innobackupex: completed OK" >>$MAILFILE #  Percona Xtrabackup   :    .    ,   tee  egrep. service zabbix-server start 2>>$MAILFILE set_date echo -e "$DT     " >> $MAILFILE set_date echo -e "$DT  " >> $MAILFILE cd $BK_DIR tar -cf $BK_DIR/zabbix_db_$DAY.tar ./xtra 2>>$MAILFILE rm -rf $BK_DIR/xtra cd /usr/share tar -cf $BK_DIR/zabbix_files_$DAY.tar ./zabbix 2>>$MAILFILE cd /etc tar -cf $BK_DIR/zabbix_etc_$DAY.tar ./zabbix 2>>$MAILFILE cd / gzip $BK_DIR/zabbix_db_$DAY.tar 2>>$MAILFILE gzip $BK_DIR/zabbix_files_$DAY.tar 2>>$MAILFILE gzip $BK_DIR/zabbix_etc_$DAY.tar 2>>$MAILFILE set_date echo -e "$DT  " >> $MAILFILE rm -f zabbix_db_$DAY.tar rm -f zabbix_files_$DAY.tar rm -f zabbix_etc_$DAY.tar set_date echo -e "$DT  NFS-" >> $MAILFILE mount 192.168.1.30:/home/backups /mnt/nfs 2>>$MAILFILE set_date echo -e "$DT     " >> $MAILFILE mkdir /mnt/nfs/Zabbix_$DAY cp $BK_DIR/zabbix_db_$DAY.tar.gz /mnt/nfs/Zabbix_$DAY 2>>$MAILFILE cp $BK_DIR/zabbix_files_$DAY.tar.gz /mnt/nfs/Zabbix_$DAY 2>>$MAILFILE cp $BK_DIR/zabbix_etc_$DAY.tar.gz /mnt/nfs/Zabbix_$DAY 2>>$MAILFILE set_date echo -e "$DT     " >> $MAILFILE echo -e "$DT   " >> $MAILFILE find $BK_GLOBAL/* -type f -ctime +30 -exec rm -rf {} \; 2>>$MAILFILE find /mnt/nfs/* -type f -ctime +30 -exec rm -rf {} \; 2>>$MAILFILE find $BK_GLOBAL/* -type d -name "*" -empty -delete 2>>$MAILFILE find /mnt/nfs/* -type d -name "*" -empty -delete 2>>$MAILFILE set_date echo -e "$DT   " >> $MAILFILE echo -e "$DT  NFS-\n" >> $MAILFILE umount /mnt/nfs 2>>$MAILFILE cat $MAILFILE >> $LOGFILE sed -i -e "1 s/^/Subject: Zabbix backup log $DAY\n\n/;" $MAILFILE 2>>$LOGFILE sed -i -e "1 s/^/From: zabbixsender@host.com\n/;" $MAILFILE 2>>$LOGFILE sed -i -e "1 s/^/To: $EMAIL\n/;" $MAILFILE 2>>$LOGFILE echo -e "\n  $BK_DIR:\n" >> $MAILFILE ls -lh $BK_DIR >> $MAILFILE echo -e "\n  :\n" >> $MAILFILE df -h >> $MAILFILE cat $MAILFILE | mail -t 2>>$LOGFILE
      
      







/ etc / zabbixおよび/ usr / share / zabbixディレクトリのファイルは、Zabbixで使用される設定および追加のスクリプトを保存するためにコピーされます。

スクリプトによって送信された手紙のテキスト




結果のコピーからデータベースを復元するには、mysqldを停止し、ディレクトリをアーカイブから抽出したディレクトリに置き換え、MySQLデーモンを再起動します。 あなたがこれをするのにどれくらいの時間がかかるかを自分で数えてください。

すべてのシステムのすべての作業バックアップと安定した動作。



All Articles