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 ターミナルをインストールする方法

推薦する

一般的な XHTML タグの紹介

<br />しばらくの間、多くの人が XHTML の使い方を知らないことに気付きました。...

$remote_addr に基づく nginx フロントエンド配布方法の詳細な説明

要件は次のとおりです。ドメイン名の下に複数のサーバーがあります。現在、特定の地域をテストしています。...

CSSでフレックス配置を表示する(レイアウトツール)

display: flex レイアウトに関しては、深く理解している人もいますし、私も他の人の作業か...

MySQLは「order by」がどのように機能するかを簡単に理解します

並べ替えの場合、order by は非常に頻繁に使用するキーワードです。インデックスに関するこれまで...

TomcatはLog4jを使用してcatalina.outログを出力します。

Tomcat のデフォルトのログは java.util.logging を使用しますが、これにはい...

Vue の基本 MVVM、テンプレート構文、データバインディング

目次1. Vueの概要Vue公式サイトMVVM アーキテクチャ パターンVue の紹介2. Vueを...

Alibaba Cloud で静的ウェブサイトを素早く構築する方法

序文:ジュニアプログラマーとして、私は自分自身の個人ウェブサイトを構築し、それを他の人に見せることを...

CocosCreator で http と WebSocket を使用する方法

目次1. HTTPGET 2. HTTP POSTウェブソケット4. Egretのhttpとwebs...

Alibaba Cloud ECS クラウド サーバー (Linux システム) は、MySQL をインストールした後にリモートで接続できません (落とし穴)

昨日、1年間使用していた Alibaba Cloud サーバーを購入しました。システムは Linux...

SSH ポート転送とは何ですか?何の役に立つの?

目次序文1. ローカルポート転送2. リモートポート転送3. 動的ポート転送(SOCKS5) 4. ...

Linux 継続的インテグレーションで Maven を自動的にインストールする方法

Mavenパッケージを解凍する tar xf apache-maven-3.5.4-bin.tar....

Vue で Openlayer を使用して読み込みアニメーション効果を実現する

注意: スコープアニメーションは使用できません。 ! ! ! GIF経由 <テンプレート>...

ffmpeg 中国語パラメータの詳細な説明

FFMPEG 3.4.1 バージョンパラメータの詳細使用方法: ffmpeg [オプション] [[入...

Docker で MySQL をデプロイする詳細なプロセス (Docker でデプロイされる一般的なアプリケーション)

以前にも紹介しました: docker (一般的なアプリケーションのデプロイ): docker dep...

deepin apt コマンドを使用して最新バージョンの docker をインストールする方法

ステップ1: Ubuntuソースを追加するルートに切り替える suルートソフトウェアソースファイルの...