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

推薦する

Docker コンテナに TensorRT をインストールする際の問題

Ubuntu にインストールされているバージョンをアンインストールします。 sudo apt-get...

Windows での MySQL 8.0.15 の詳細なインストールと使用のチュートリアル

この記事では、MySQL 8.0.15の詳細なインストールと使用方法のチュートリアルを参考までに紹介...

Webデザイン講座(4):素材と表現について

<br />前回のWebデザインチュートリアル:Webデザインチュートリアル(3):デザ...

Ubuntu サーバーで MySQL を設定し、リモート接続を実装する方法

サーバー: Ubuntu Server 16.04 LSSクライアント: Ubuntu 16.04 ...

MySQL と Golan 間の従来の分散トランザクションのための 7 つのソリューション

目次1. 基本理論1.1 取引1.2 分散トランザクション2. 分散トランザクションソリューション2...

HTML チュートリアル: title 属性と alt 属性

XHTML は CSS レイアウトの基礎です。jb51.net は常に XHTML 知識の習得を重視...

JavaScript 関数構文の説明

目次1. 通常の機能2. 矢印関数3. データパケットJSON 4. オブジェクト5. 約束6. 非...

axios リクエストのカプセル化に基づく Vue アプリケーションのサンプルコード

目次axiosとは何ですか? Axios リクエストタイプ? Axiosはデフォルトのカスタム構成を...

Linux環境でのDockerインストールチュートリアル

1. 設置環境Dockerは次のCentOSバージョンをサポートしていますCentOS 6.5 (6...

OpenSSL を使用した Kubernetes 証明書の生成の概要

Kubernetes は、基本認証、トークン認証、CA 認証の 3 種類の認証をサポートしています。...

制限を使用すると、MySQL のページングがどんどん遅くなるのはなぜですか?

目次1. テスト実験2. 制限ページング問題に対するパフォーマンス最適化手法2.1 テーブルをカバー...

Dockerで新しいイメージを手動で構築する方法

この記事では、Docker で新しいイメージを手動で構築する方法を紹介し、皆さんと共有します。詳細は...

Dockerネットワーク作成に--subnetを追加した後の問題を解決する

Docker ネットワークの作成に –subnet を追加した後、docker network ls...

Vue で video.js を使用して m3u8 形式のビデオを再生する方法

目次1. インストール2. videojsの紹介3. コンポーネントでのテストと使用1. 基本的な自...

ホワイトボードを踏まないようにするゲームを実装するための HTML+CSS+JS

目次背景1. 思考分析2. ページ構成2.1 HTML レイヤー2.2 CSS レイヤー2.3 JS...