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 マルチページディレクトリパッケージ化手順の記録

推薦する

Taobao の商品画像切り替え効果を実現する JavaScript

JavaScriptの服装アルバム切り替え効果(Taobao商品画像切り替えに似ています)、参考ま...

MySQL 5.7.17 圧縮パッケージのインストール不要の構成プロセス図

MySQL データベース管理ソフトウェアには、エンタープライズ エディションとコミュニティ エディシ...

JSにおけるデータ型の正しい判定方法の例

目次序文typeof は型を正しく判別できますか? instanceof は型を正しく判別できますか...

CSS のフィルター属性とバックドロップフィルターの適用と違いの詳細な説明

フィルターとバックドロップフィルターにはいくつかの違いがあります。フィルターは現在の要素だけでなく、...

インスピレーションを得るための7つのクールなダイナミックウェブサイトデザイン

デザインの分野では、毎年さまざまなデザインのトレンドや流行があります。たとえば、近年のレスポンシブデ...

CSSのさまざまな背景、使用シナリオ、テクニックの詳細な分析

この記事はGitHub https://github.com/qq449245884/xiaozhi...

MySQLコマンドラインでSQLファイルを実行するいくつかの方法

目次最初の方法: MySQLデータベースが接続されていない場合2 番目の方法: データベースがすでに...

MySQLが中国語の文字を挿入する問題を永久に解決するコツを教えます

目次序文最初のステップ:ステップ2: このmy.iniを変更する要約する序文問題の説明:不正な文字列...

さまざまな種類のMySQLインデックス

インデックスとは何ですか?インデックスは、データベース ストレージ エンジンが指定されたデータをすば...

ウェブフロントエンドウェブ開発の一般的なプロセスの簡単な紹介

フロントエンド開発を行っている初心者の学生を多く見かけますが、彼らの効率は比較的遅いです。常にコード...

Google Chromeの自動入力問題に対する完璧な解決策

Google Chrome では、ログインに成功すると、パスワードを記憶するかどうかを尋ねるメッセー...

Vue3でelement-plusを使用する方法の詳細な説明

目次1. インストール2. main.jsにインポートする3. 使用Vue3がリリースされてからしば...

Web デザインでフラッシュ オーバーレイ ポップアップ レイヤーの z-index プロパティを設定しても機能しない

デフォルトでは、Flash は常にページのトップレベルに表示されます。つまり、ページに DHTML ...

Vue3のレスポンシブ原則の詳細な説明

目次Vue2 レスポンシブ原則のレビューVue3 レスポンシブ原則の分析ネストされたオブジェクトの応...

WeChat アプレットのカスタム タブバー コンポーネント

この記事では、WeChatアプレットのカスタムタブバーコンポーネントの具体的なコードを参考までに紹介...