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

推薦する

React Hook の使用例 (一般的なフック 6 つ)

1. useState: 関数コンポーネントに状態を持たせる使用例: // カウンター impor...

CentOS で yum を使用して rabbitmq-server をインストールする方法

RabbitMQをインストールする前にSocatをインストールする必要があります。そうしないと、Ra...

純粋な CSS ドロップダウン メニュー

成果を達成する実装コードhtml <div id="コンテナ"> &...

SQL 実践演習: オンライン モール データベース ユーザー情報データ操作

オンラインショッピングモールデータベース - ユーザー情報データ運用プロジェクトの説明電子商取引の台...

Vueのトグルボタンをクリックしてボタンを有効にし、無効にします。

実装方法は3つのステップに分かれています。テンプレートに 2 つのボタンを設定し、v-if と v-...

element-plus でオンデマンドインポートとグローバルインポートを実装する方法

目次オンデマンドインポート:グローバルインポートオンデマンドインポート:プラグインをインストールする...

Ubuntu 20.04 に MySql5.7 をインストールして構成するための詳細なチュートリアル

目次1. Ubuntuソースの変更2. MySQLをインストールする3. 新しいユーザーを作成し、権...

Alibaba Cloud ドメイン名と IP バインディングの手順と方法

1 Alibaba Cloud コンソールに入り、ドメイン名コンソールを見つけて、バインドするドメイ...

Linux の圧縮および解凍コマンドの紹介

目次一般的な圧縮形式: gz .bz2 .xz .zip一般的に使用されるアーカイブは圧縮を必要とす...

Tomcat が応答データグラムを書き戻すタイミングの詳細な分析

疑問が生じるこの質問は、ファイルのダウンロードを記述しているときに発生しました。HttpServle...

MYSQL メタデータ ロック (MDL ロック) MDL ロックの問題分析

1. はじめにMYSQL の MDL ロックは常に頭痛の種でした。ロックについて話すとき、通常は I...

Vueのフロントエンドとバックエンドのデータのやり取りと表示を理解する方法

目次1. 技術概要2. 技術的な詳細1. インターフェースからバックエンドデータを取得する2. フロ...

MySQLテーブルシャーディングとパーティショニングの具体的な実装方法

縦型テーブル垂直テーブル分割とは、多数の列を持つテーブルを複数のテーブルに分割することを意味します。...

JavaScript でよく使われる 5 つのオブジェクト

目次1. JavaScript オブジェクト1).配列オブジェクト2).ブールオブジェクト3).日付...

CSS画像結合技術(スプライト画像)の詳しい説明

CSS画像結合技術1. 画像のステッチ画像ステッチング技術は、個々の画像を収集する技術です。画像の多...