MySQL 増分バックアップとブレークポイントリカバリスクリプトの例

MySQL 増分バックアップとブレークポイントリカバリスクリプトの例

導入

増分バックアップとは、完全バックアップまたは最後の増分バックアップの後、後続の各バックアップでは、前回のバックアップと比較して追加または変更されたファイルのみをバックアップする必要があることを意味します。つまり、最初の増分バックアップの対象は、完全バックアップ後に生成された追加および変更されたファイルであり、2 番目の増分バックアップの対象は、最初の増分バックアップ後に生成された追加および変更されたファイル、というようになります。

目的

フルバックアップでは回復に時間がかかり、回復が遅いという問題を解決するために、増分バックアップが採用されています。

特徴

利点: 重複データなし、バックアップボリュームが小さい、時間が短い: フルバックアップ後の最後のフルバックアップと増分バックアップから復元する必要があり、増分バックアップを1つずつ繰り返し復元する必要があり、操作が面倒

実装

mysql バイナリ ログを介した間接増分バックアップ:
バイナリ ログには、更新されたデータや更新される可能性のあるデータがすべて保存されます。バイナリ ログは、MySQL の起動時に記録を開始し、新しいログ ファイルが作成されます。ログを再作成してバイナリ ファイル シーケンスを生成するには、定期的にフラッシュ ログ メソッドを実行する必要があります。

実験環境:

MySQL5.7データベースがインストールされたCentos7仮想マシン

操作プロセス:

1. 増分バックアップ

1. 設定ファイルにバイナリログを追加する

vim /etc/my.cnf
[mysqld] #このモジュールの下に追加
log-bin=mysql-bin #バイナリログ

2. サービスを再起動してバイナリログを表示します

systemctl で mysqld.service を再起動します。
cd /usr/local/mysql/data/
mysqlbinlog --no-defaults mysql-bin.000001


3. 実験テンプレートとしてデータベース内にデータベースとテーブルを自由に作成する


4. 学校のデータベースの完全なバックアップを作成する

mysqldump -uroot -pabc123 学校 > /opt/school.sql

5. ログを更新し、新しいログを生成します。注: 以前のデータベース操作は番号 000001 のログに書き込まれ、番号 000002 の新しく生成されたログは空です。

mysqladmin -uroot -pabc123 flush-logs #ログをフラッシュする
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000001 #000001 ログを表示
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002 #000002 ログを表示
#--base64-output=decode-rows -v: ファイル内の文字化けを避けるために、前の表示コマンドも使用できます。



6. 新しいMySQLデータベース操作を追加し、ログを更新して増分バックアップを実行します。

学校を利用する;
mysql> 情報(ID、名前、スコア)の値(3、 'aaa'、78)に変換します。
mysql>info から name='tom' を削除します。#エラー
mysql> info (id,name,score) に値 (4,'bbb',64) を挿入します。
mysqladmin -uroot -pabc123 flush-logs #ログをフラッシュし、000003 を生成
#この増分バックアップはログファイル000002に記録されています



7. 情報テーブルを削除する

mysql -uroot -pabc123 -e 'use school;drop table info;'

8. 完全バックアップを復元し、増分バックアップを復元する

mysql -uroot -pabc123 school < /opt/school.sql #フルバックアップと復元

mysqlbinlog --no-defaults mysql-bin.000002 | mysql -uroot -p


さて、ここで問題があります。エラーが発生すると、バックアップの復元時にエラーが発生し、本来の目的を達成するための理想的なバックアップを実現できなくなります。このとき、壊れたチェーンのリカバリ(増分バックアップを復元する特別な方法)が必要になります。つまり、復元中に正しいデータベース操作のみが復元されます。

2. 壊れたリンクの回復

壊れたリンクの回復を実行する前に、図に示すように、増分バックアップと復元のない状態に復元する必要があります。


時点に基づく

2018-09-04 16:43:52 エラー操作時間(この時点で読み込みの開始が終了します)
2018-09-04 16:44:32 正しい操作時間(この時点から再度読み込みを開始します) この時点から再度読み込みを開始します

mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002 #000002 ログを表示


mysqlbinlog --no-defaults --stop-datetime='2018-09-04 16:43:52' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p
mysqlbinlog --no-defaults --start-datetime='2018-09-04 16:44:32' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p


位置ポイントに基づく

565 最後の正しい実行位置 --stop-position
667 次の正しい実行位置 --start-position

mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002 #000002 ログを表示

mysqlbinlog --no-defaults --stop-position='565' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p
mysqlbinlog --no-defaults --start-position='667' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p

以下もご興味があるかもしれません:
  • binlog2sql と簡単なバックアップおよびリカバリを使用して mysql8.0.20 を構成するための詳細な手順
  • MySQLのバックアップとリカバリの簡単な分析
  • MySQLのバックアップとリカバリの詳細な説明
  • MySQL データベースのバックアップとリカバリの実装コード
  • MySQLデータのバックアップとリカバリの実装方法の分析
  • MySQL の完全バックアップとクイックリカバリ方法
  • MySQL のスケジュールされたバックアップ、削除、および回復機能を実装するシェル スクリプト
  • MySQL の完全なデータベース バックアップからデータベースとテーブルを復元する方法
  • MySQL の完全なデータベース バックアップ データを使用して単一のテーブル データを復元する方法
  • C# は MySQL コマンドラインのバックアップとリカバリを実装します
  • MySQL のバックアップとリカバリの設計アイデア

<<:  Reactにおける制御されたコンポーネントと制御されていないコンポーネントの簡単な分析

>>:  CentOS 7.x に ZSH ターミナルをインストールする方法

推薦する

Linux trコマンドの使い方

01. コマンドの概要tr コマンドは、標準入力からの文字を置換、圧縮、削除できます。ある文字セット...

HTMLにスクリプトを追加する2つの方法と注意点

HTML に <script> スクリプトを追加する方法: 1. HTMLにJavaSc...

Divの境界と透明度に関する設定

フレーム:スタイル=”border-style:solid;border-width:5px;bor...

MySQL オンライン DDL ツール gh-ost 原理分析

目次1. はじめに1.1 原則1.2 プロセス1.3 特徴1.4 githubアドレス2. テスト環...

GIFアニメーション効果を模倣した自動ビデオ再生を実現するWeChatアプレットの例

需要背景:ミニプログラムページに GIF ダイナミック画像を挿入しますが、GIF 画像は通常サイズが...

JS 日付コントロール My97DatePicker の基本的な使い方

My97DatePicker は非常に柔軟で使いやすい日付コントロールです。使い方はとても簡単です。...

MYSQL ストアドプロシージャと関数の簡単な記述

ストアドプロシージャとは簡単に言えば、これは強力で、JAVA 言語のメソッドに似た比較的複雑な論理関...

Linux C バックグラウンドサービスプログラムの単一プロセス制御の実装

導入通常、バックグラウンド サーバー プログラムには 1 つのプロセスのみが必要ですが、単一のプロセ...

VMware 構成 VMnet8 ネットワーク方法の手順

目次1. はじめに2. 設定手順1. はじめに1. NAT モード (VMnet8) は、仮想マシン...

CSS3 でテキストの点滅効果を実現する 3 つの方法 サンプルコード

1. 透明度を変更してテキストを徐々に点滅させると、次のような効果が得られます。 <!DOCT...

よく知られているブラウザのDOCTYPEモード選択メカニズム

ドキュメントの範囲この記事では、Firefox やその他の Gecko ベースのブラウザ、Safar...

LinuxでDHCPサーバーを構築する方法

目次1. 基礎知識: 2. DHCPサーバーの設定: 1. サーバーのIPを確認する2. DHCP ...

コードブロックのハイライトをコピーして表示できる js プラグイン highlight.js + clipboard.js 統合

主に2つの側面から: 1. ハイライト/改行2. コードのコピーボタンこれら両方には既製のプラグイン...

JavaScript関数の詳細な紹介

任意の数のステートメントを関数を通じてカプセル化することができ、いつでもどこでも呼び出して実行できま...

Reactコンポーネントのライフサイクルの詳細な説明

目次1.ライフサイクルとは何か2. 読み込みプロセス1.コンストラクタ2. レンダリング3. コンポ...