MySQLデータベースの増分バックアップのアイデアと方法

MySQLデータベースの増分バックアップのアイデアと方法

MySQL データベースの増分バックアップを実行するには、データベース構成ファイル /etc/my.cnf を変更して bin-log 機能を有効にするだけです。次に、インターネットでいくつかの方法を参考にして、自分で書いてみました。主なことは、彼のアイデアと方法のいくつかを学ぶことでした。

#機能: MYSQL 増分バックアップ #バージョン: 1.0.0
#著者:wangyanlin
#日付: 2017/08/02
#-------------------------------------------------------------------------------------------------
#!/bin/sh
エクスポート LANG=en_US.UTF-8
#時刻を設定 DATE=`date +%Y%m%d`
#情報の設定 USER=root
パスワード=withub
#パスを設定する cd /
/usr/bin/mkdir -p mysql_bak/daily 
/usr/bin/mkdir -p mysql_bak/logs
バックアップディレクトリ=/mysql_bak/daily
バイナリディレクトリ=/var/lib/mysql
ログファイル=/mysql_bak/logs/Daily_$DATE.log
バイナリログファイル=/var/lib/mysql/mysql-bin.index
/usr/bin/mysqladmin -u$USER -p$PASSWORD flush-logs #ログをフラッシュ Counter=`wc -l $BinlogFile | awk '{print $1}'`
次の番号=0
start_time=`日付 +'%Y-%m-%d %H:%M:%S'`
echo `date +"%Y 年%m 月%d 日%H:%M:%S"` $Next1 バックアップ開始! >> $LogFile
#この for ループは、$Counter と $NextNum の 2 つの値を比較して、ファイルが存在するか、最新であるかを判断するために使用されます。
`cat $BinlogFile` 内のファイル
する
  base=`ベース名 $file`
  #basename は、mysql-bin.00000* ファイル名をインターセプトし、./mysql-bin.000005 の前の ./ を削除するために使用されます。
  NextNum=`式 $NextNum + 1`
  if [ $NextNum -eq $Counter ]
  それから
    echo $base スキップ! >> $LogFile
  それ以外
    宛先=$BakDir/$base
    if(テスト -e $dest)
    #test -e は、対象ファイルが存在するかどうかを検出するために使用されます。存在する場合は、$LogFile に existing! を書き込みます。
    それから
      echo $base が存在します! >> $LogFile
    それ以外
      cp $BinDir/$base $BakDir
      echo $base をコピー >> $LogFile
    フィ
  フィ
終わり
echo `date +"%Y 年%m 月%d 日%H:%M:%S"` $Next2 バックアップ成功! >> $LogFile
end_time=`日付 +'%Y-%m-%d %H:%M:%S'`
start_seconds=$(date --date="$start_time" +%s);
end_seconds=$(date --date="$end_time" +%s);
echo "このバックアップの実行時間: "$((end_seconds-start_seconds))"s" >> $LogFile

スケジュールされたタスクを追加します。

crontab -e

00 03 * * * /root/MySQL_incrementbak.sh #毎日午前3時に増分バックアップを開始する

ログ印刷の効果は次のとおりです。

PS: MySQLのフルバックアップと増分バックアップのスクリプトを見てみましょう

全額:

[root@master leo]# cat DBfullBak.sh 
#!/bin/bash
#mysqldump を使用して mysql データを完全にバックアップする
バックアップディレクトリ=/root/leo/full
ログファイル=/root/leo/full/bak.log
日付=`date +%Y%m%d`
開始=`日付 +"%Y 年%m 月%d 日%H:%M:%S"`
cd $BakDir
ダンプファイル=$Date.sql
GZDumpFile=$Date.sql.tgz
mysqldump -uroot -p123456 --all-databases --lock-all-tables --routines --triggers --events --master-data=2 --flush-logs > $DumpFile
tar zcvf $GZDumpFile $DumpFile
rm $ダンプファイル
最終=`日付 +"%Y 年%m 月%d 日%H:%M:%S"`
echo 開始: $Begin 終了: $Last $GZDumpFile succ >> $LogFile

パラメータに関する注記:

--all-databases #すべてのデータベースをバックアップします --lock-all-tables #すべてのテーブルに読み取りロックを追加します --routinge #ストアドプロシージャと関数 --triggers #トリガー --events #イベントを記録します --master-data=2 #バックアップファイルに現在のバイナリログの位置を記録し、注釈を付けます。1はコメントアウトされておらず、マスタースレーブレプリケーションで意味があります --flush-logs #ログを1回ロールします

結果は次のとおりです。

[ルート@マスター フル]# ls
20140728.sql.tgz バックアップログ
[root@master full]# cat bak.log 
開始: 2014-07-28 19:02:59 終了: 2014-07-28 19:02:59 20140728.sql.tgz succ
開始: 2014-07-28 19:12:01 終了: 2014-07-28 19:12:01 20140728.sql.tgz succ
[root@master フル]#

増分バックアップ:

[root@master leo]# cat DBDailyBak.sh 
#!/bin/bash
バックアップディレクトリ=/root/leo/binlog/
バイナリディレクトリ=/var/lib/mysql
ログファイル=/root/leo/binlog/bak.log
バイナリファイル=/var/lib/mysql/mysql-bin.index
mysqladmin -uroot -p123456 ログをフラッシュする
カウンター=`wc -l $BinFile|awk '{print $1}'`
次の番号=0
`cat $BinFile` 内のファイル
する 
 base=`ベース名 $file`
 NextNum=`式 $NextNum + 1`
 if [ $NextNum -eq $Counter ]
 それから
  echo $base スキップ! >> $LogFile
 それ以外
  宛先=$BakDir/$base
  if(テスト -e $dest)
  それから
   echo $base が存在します! >> $LogFile
  それ以外
   cp $BinDir/$base $BakDir/
   echo $base をコピー >> $LogFile
  フィ
 フィ
終わり
echo `date +"%Y 年%m 月%d 日%H:%M:%S"` $Next Bakup succ~ >> $LogFile

要約する

上記は、編集者が紹介した MySQL データベースの増分バックアップのアイデアと方法です。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残していただければ、すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • MySQLデータベースのスケジュールバックアップを実装する方法
  • MySQLデータベースが大きすぎる場合にバックアップと復元を行う方法
  • MySQL データベースを手動および自動でバックアップする 8 つの方法
  • ThinkPHPフレームワークで実装されたMySQLデータベースバックアップ機能の例
  • Navicat for MySQLのスケジュールされたデータベースバックアップとデータ復旧の詳細
  • LinuxはMySQLデータベースの自動バックアップとスケジュールバックアップを毎日実装しています
  • シェルスクリプトを使用したMySQLデータベースの自動バックアップ
  • MySQL データベースをインポートおよびエクスポートする方法 (バックアップと復元)
  • Mysql 複数データベースのバックアップ コード例

<<:  ポートマッピング後に Docker コンテナが突然接続に失敗する問題のトラブルシューティング プロセス

>>:  Vue-CLI マルチページディレクトリパッケージ化手順の記録

推薦する

SWFObjectを使用すると、HTMLにFlashを挿入する際のブラウザ互換性の問題を完全に解決できます。

一緒に学びましょう1. 伝統的な方法コードをコピーコードは次のとおりです。 <object c...

Nginx を使用してポート転送 TCP プロキシを実装する例

目次需要背景Nginx を使用する理由は何ですか? Nginx によるポート転送依存関係をインストー...

Postman 自動インターフェーステストの実践

目次背景説明GETリクエストの作成事前リクエストスクリプトで署名を作成するスクリプトは環境変数に書き...

Linux でユーザー アカウントをロックおよびロック解除する 3 つの方法

組織内で何らかのパスワード ポリシーがすでに実装されている場合は、この記事を読む必要はありません。た...

LinuxシステムにDockerをインストールするプロセス

このブログでは、Docker をインストールするプロセスを簡単な手順で説明します。Docker のイ...

Tomcat でのコネクタ構成

JBoss は Tomcat を Web コンテナとして使用するため、JBoss の Web コンテ...

Linuxにソフトウェアをインストールするいくつかの方法の詳細な説明

1. RPM パッケージのインストール手順: 1. soft.version.rpm などの対応する...

Docker 環境での Jmeter の分散操作に関する詳細なチュートリアル

1. jmeterの基本イメージを構築するDockerfile は次のとおりです。 # Java 8...

MySQL ストアド プロシージャの権限の問題の概要

MySQL ストアド プロシージャは、確かに、非常にまれな使用シナリオのように見えます。この問題は、...

ネガティブマージン関数の紹介と使用方法の概要

1998 年の CSS2 勧告の時点で、テーブルは徐々に舞台から消え、歴史の中に記録されるようになり...

Vue要素はテーブルの追加、削除、データの変更を実装します

この記事では、テーブル内のデータを追加、削除、変更するためのvue要素の具体的なコードを参考までに共...

Linux でプロセスを隠す方法と、遭遇する落とし穴

序文1. この記事で使用したツールは、https://github.com/gianlucabore...

VUE + OPENLAYERSがリアルタイムポジショニング機能を実現

目次序文1. ラベルスタイルを定義する2. GeoJSONデータのシミュレーション3. Vercto...

jsはショッピングカートの加算と減算、価格計算を実装します

この記事の例では、ショッピングカートの加算と減算、価格計算を実装するためのjsの具体的なコードを共有...

Vueでaxiosを簡単にカプセル化する方法

Vueにaxiosを挿入する 'axios' から axios をインポートします。...