MySQL-Backup + ログ: メディア障害とデータベースの回復

レベル 1: バックアップとリカバリ

ミッションの詳細

このレベルのタスク:
データベースをバックアップし、それを復元します。

関連情報

このタスクを完了するには、
1. MySQL リカバリ メカニズム、
2. MySQL が提供するバックアップおよびリカバリ ツールを習得する必要があります。

MySQLのリカバリメカニズム

ほとんどの DBMS と同様に、MySQL はリカバリにバックアップとログ ファイルを利用します。
特定の理論的知識については、ここでは詳しく紹介しません。

MySQL のバックアップおよびリカバリ ツール

MySQL は次のツールを提供します。

  • 論理バックアップツール: mysqldump
  • 物理バックアップツール:mysqlbackup(商用版のみ)
  • ログツール: mysqlbinlog
  • 復元ツール: mysql
  • 管理ツール: mysqladmin

mysqldump
論理バックアップ ツールは、一連の SQL ステートメントを生成し、これらのステートメントを実行すると、元のデータベース内のすべてのオブジェクトとデータを再構築できます。デフォルトの出力はコンソールであり、生成された SQL ステートメントのコレクションはリダイレクト シンボルを介してファイルに保存できます。
mysqldump は、サーバー上のすべてのデータベースをバックアップしたり、特定のデータベースやデータベース内の特定のテーブルを指定したりできます。
mysqldump -h127.0.0.1 -uroot -p123123 [options] --databases db_name

--databases パラメータはデータベース名を指定するために使用されます。データベース名の後に 1 つ以上のデータベースの名前を続けることができ、複数のデータベース名はスペースで区切られます。
mysqldump コマンド ライン ツールは複数のパラメータを取ることもでき、オプションのパラメータが多数あります。詳細については、公式リファレンス マニュアルを参照してください。ここでは 1 つだけ紹介します。
--flush-logs MySQL ログをフラッシュします。つまり、ログ ファイルを再起動します。
新しいログ ファイルを使用してやり直すと、将来どのログがより役立つかを判断するのに役立ちます。通常、一括バックアップ前のログ ファイルはそれほど重要ではありません。バックアップ ファイルが存在するため、バックアップ ファイルが失敗しない限り、以前のログ ファイルを使用する必要がなくなるからです。

mysqlbackup
mysqlbackup は MySQL の物理バックアップ ツールであり、有料の商用エンタープライズ エディションでのみ利用可能です。

mysql
mysql は MySQL の最も重要なクライアント管理ツールであり、通常、ユーザーは mysql を通じて MySQL サーバーにログインし、さまざまな操作を実行します。さらに、SQL スクリプトの実行、新しいライブラリの復元または作成を直接実行することもできます。
mysql -h127.0.0.1 -uroot -p12313 < mydb.sql
これは、mydb.sql のスクリプトを直接実行します。この方法では、mysqldump でバックアップしたスクリプト ファイルを直接使用して、元のデータベースを復元できます。

mysqladmin
mysqladmin は、MySQL サーバーの管理ツールです。通常、サーバーの構成に使用されますが、データベースの作成または削除にも使用できます。一般的なコマンド (
mysqladmin [options] command [command-arg] [command [command-arg]]
実行コマンド) は次のとおりです:
create db_name create database
drop db_name delete database
flash-logs flashログ
フラッシュ テーブル フラッシュ テーブル、すべてのテーブル データがディスクに書き込まれます。
kill id、id、... 一部のプロセスを強制終了します。
パスワード new_password 変更 (ログイン) ログイン パスワード
ping サーバーが利用可能かどうかを確認します。ステータスを
表示します。 サーバー ステータス
変数の値を表示します。各設定パラメータ
...

同様に、このツールは多くのオプションのパラメーターもサポートしています。詳細については、公式マニュアルを参照してください。

mysqlbinlog
mysqlbinlog は、MySQL のログ管理ツールです。このツールは、手動介入が必要な障害からの回復に不可欠です。もちろん、一般的なログを表示するために使用することもできます。
mysqlbinlog mysql-bin.000983
上記の例は、ログ ファイル mysql-bin.000983 を表示するために使用されます。MySQL のログ ファイルには同じプレフィックスが付いており、次の番号はログ ファイルの順序です。このプレフィックスは構成可能です。たとえば、binlog.* である場合もあります。次に例を示します。
ログファイル

ログ ファイルを実行すると、ログに記録されたイベントが再度実行され、特定の期間のデータを回復できます。回復方法は次のとおりです。メディア障害の回復では、通常、すべてのログをリストする必要があります。
mysqlbinlog [option] binlog_files | mysql -u root -p
最新のバックアップ後のファイル。

mysqlbinlog は、次のような多数のオプション パラメータもサポートしています。
–disable-log-bin は、データベースのリカバリ中にログを介してログを書き込みません
–no-defaults は、MySQL のデフォルト設定を使用しません

その他のパラメータの詳細については、公式ドキュメントを参照してください。

MySQL には他のツール (mysqlimport、mysqlshow など) もありますが、ここでは紹介しません。

プログラミング要件

住民登録データベースの住民がいます。データベースの静的 (サーバーを所有している) 大規模な論理バックアップを作成してください。バックアップ ファイルの名前は、resident_bak.sql です。次に、論理バックアップ ファイルを使用してデータベースを復元します。
テスターはバックアップ ファイルの名前をチェックしません。他のファイル名を使用できますが、バックアップと復元の際には必ず同じファイルを使用してください。バックアップ コマンドとリカバリ コマンドは、それぞれ test1_1.sh ファイルと test1_2.sh ファイルに書き込まれます。

  • test1_1.sh - バックアップ用
  • test1_2.sh - リカバリ用

2 つのファイルを逆にしないでください。

プロンプトに従って、右側のコード ファイル エディターにステートメントを入力して、上記の要件を満たします。デフォルトでは、test1_1.sh が表示されるはずです。「コードファイル」の右側にある三角マークにマウスを移動すると、すべてのコードファイルが一覧表示され、2つのコードファイルを自由に切り替えることができます。すべてのコード ファイルを入力したら、[評価] ボタンをクリックします。

注: mysql、mysqldump、および mysqladmin は、実行時にログイン ユーザー名とパスワードを提供する必要があります。これらのツールは対話型環境では使用されないため、コマンド ラインでログインに必要な情報を提供する必要があります。例: mysql
- h127.0.0.1 -uroot -p123123
ただし、コマンド ラインでパスワードを公開することは非常に危険です。MySQL は警告メッセージをスローします。そのため、評価プログラムは他の手段でログイン パスワードを提供します。コマンドでは -p パラメータを省略してください。ライン。mysql を例に挙げると、次のように記述するだけです:
mysql -h127.0.0.1 -uroot

テストの説明
データベース常駐者はすでに存在します。プラットフォームは最初に test1_1.sh を実行してバックアップを作成し、次に常駐者を削除します。次に、test1_2.sh を実行してデータベースを復元します。最後に回復が成功したかどうかを確認し、各居住者インスタンス列の評価結果が期待した結果と完全に一致していれば合格です。

ミッションを始めましょう。成功を祈っています!

コードリファレンス

test1_1.sh ファイルの内容

# 你写的命令将在linux的命令行运行
# 对数据库residents作海量备份,备份至文件residents_bak.sql:
mysqldump -h127.0.0.1 -uroot --flush-logs --databases residents > residents_bak.sql

test1_2.sh ファイルの内容

# 你写的命令将在linux的命令行运行
# 利用备份文件residents_bak.sql还原数据库:
mysql -h127.0.0.1 -uroot < residents_bak.sql

レベル 2 バックアップ + ログ: メディア障害の発生とデータベースの回復

ミッションの詳細

このレベルのタスク:

メディア障害の発生と、バックアップとバックアップ後のログを使用してデータベースを復元する方法をシミュレートします。

関連情報

前回のバックアップ以降のバックアップファイルとログファイルが存在していれば、メディア障害によりデータベース全体が消失した場合でも、メディアを交換すればデータベースを復元できます。関連する知識は前のレベルで導入されています。

運用環境では、データベース ファイル、バックアップ ファイル、およびログ ファイルは同じメディアに保存されず、同じ地理的空間にも保存されません。目的は、災害発生後にデータを回復する機会を得ることです。

このレベルでは、メディア障害の発生とデータベースの回復をシミュレートします。使用するツールには次のものがあります。

  • mysql
  • mysqldump
  • mysqlbinlog

前のレベルではその使用法を紹介しました。

プログラミング要件

メディア障害の発生とデータベースの復旧をシミュレーションします。以下のイベントが時系列に発生します (赤色でマークされた部分はユーザーが完了し、残りは評価プログラムによって完了します)。

時点 1: データベース トレインによってビジネス データが生成されます。
時点 2: データベース トレインの大規模なバックアップを作成し、同時に新しいログを開きます。
時点 3: データベース トレインに再びビジネス データが含まれる;
時点 4: 障害が発生する。
時点 5: データベースを復元して、2 回発生したビジネス データが失われないようにします。

時点 2 と時点 5 (赤でマークされた部分) で作業を完了し、対応するファイルにタスクを完了するためのスクリプトを入力してください。

  • データベース トレインの大規模な論理バックアップを作成し、同時に新しいログを開きます: test2_1.sh
  • バックアップ ファイルとログ ファイルを使用してデータベースを復元します: test2_2.sh

2 つのファイルを逆にしないでください。

他のすべての作業は、評価プログラムが自動的に実行します。

  • ビジネスデータが発生した時点で、データはバッチで書き込まれます。
  • 障害が発生した時点で、データベース トレインは削除されます。
  • データベースを削除する前に、評価プログラムはバックアップ後に新しく開かれたログ ファイルを log/binlog.000018 として保存します。

ここで、評価プログラムは常に必要なログ ファイルを検索し、リカバリ用に固定ログ ファイルに保存します。しかし実際には、ログファイルは常に変化しており、サーバーインスタンスを独占的に使用する環境であっても、「評価」ボタンを2回クリックすると、評価プログラムによりログファイルにデータが複数回書き込まれ、変更が追加されます。バックアップおよびリカバリ操作において、ログ ファイルが特定のサイズに達すると、MySQL は自動的に新しいログ ファイルを開きます。ローカルで実験する場合は、必要なログ ファイルを特定する方法を学習してください。

上記の要件を完了するには、プロンプトに従って右側のコード ファイル エディターにステートメントを入力してください。デフォルトでは、test2_1.sh が表示されるはずです。「コードファイル」の右側にある三角マークにマウスを移動すると、すべてのコードファイルが一覧表示され、2つのコードファイルを自由に切り替えることができます。すべてのコード ファイルを入力したら、[評価] ボタンをクリックします。

試験指導

評価プログラムは、上記の対応するイベントを時系列順にトリガーし、タイム 2 とタイム 5 の順番になったときにスクリプトを実行します。すべてのイベントが終了した後、データベースが正常に復元されたことを確認します。データベースの 2 つの異なるインスタンス上にある場合、障害が発生した後、データベースは完全に復元され、税関を通過できます。

ミッションを始めましょう。成功を祈っています!

コードリファレンス

test2_1.sh ファイルの内容

# 这是shell脚本,将在linux命令行上执行
# 命令行上可省略密码的指定
# 请写出对数据库train作逻辑备份并新开日志文件的命令,备份文件你可以自己命名(如train_bak.sql):
mysqldump -h 127.0.0.1 -uroot --flush-logs --databases train > backup/train_bak.sql

test2_2.sh ファイルの内容

# 这是shell脚本,将在linux命令行上执行
# 命令行上可省略密码的指定
# 请写出利用逻辑备份和日志恢复数据库的命令:
mysql -h127.0.0.1 -uroot < backup/train_bak.sql
mysqlbinlog --no-defaults log/binlog.000018 | mysql -h127.0.0.1 -uroot

おすすめ

転載: blog.csdn.net/qq_46373141/article/details/130744739