MySQLのバックアップとリカバリの詳細な説明

MySQLのバックアップとリカバリの詳細な説明

序文:

前回の記事では、さまざまな MySQL ステートメント構文の使用法とユーザー権限に関する知識を紹介しました。この記事では、主にMySQLデータベースデータのバックアップとリカバリに関する知識について説明し、論理バックアップに焦点を当て、mysqldumpツールの使用方法とリカバリ方法を紹介します。

ここでは、物理バックアップと論理バックアップの概念について簡単に説明します。
物理バックアップ: データ ファイルをバックアップし、データベースの物理ファイルを特定のディレクトリにダンプします。物理バックアップはすぐに復元できますが、多くのスペースを占有します。MySQL では、xtrabackup ツールを使用して物理バックアップを実行できます。
論理バックアップ: ツールを使用してデータベース オブジェクトをエクスポートし、バックアップ ファイルにまとめます。論理バックアップは復元に時間がかかりますが、占有するスペースが少なく、柔軟性が高くなります。 MySQL でよく使用される論理バックアップ ツールは mysqldump です。

1. すべてのデータベースをバックアップする

mysqldump を使用してインスタンス全体をバックアップする場合は、--all-databases または -A パラメータを使用できます。

mysqldump -uroot -pxxxxxx --all-databases > /tmp/all_database.sqlmysqldump -uroot -pxxxxxx -A > /tmp/all_database.sql

2. データベースをバックアップする

場合によっては、特定のデータベースのみをバックアップする必要があります。この場合、--databases または -B パラメータを使用し、その後にデータベース名を指定します。複数のデータベースを指定する場合は、スペースで区切ります。

mysqldump -uroot -pxxxxxx --databases testdb1 testdb2 > /tmp/testdb.sqlmysqldump -uroot -pxxxxxx -B testdb1 testdb2 > /tmp/testdb.sql

3. いくつかのテーブルをバックアップする

通常、いくつかのテーブルをバックアップする必要もあります。たとえば、テーブルを変更する前にバックアップを作成する場合は、次のように実行できます。

testdbライブラリのtest_tbテーブルのみをバックアップする

mysqldump -uroot -pxxxxxx testdb test_tb > /tmp/test_tb.sql#複数のテーブルをバックアップ mysqldump -uroot -pxxxxxx testdb tb1 tb2 tb3 > /tmp/tb.sql

4. データの一部を単一のテーブルにバックアップする

テーブルに大量のデータがあり、そのデータの一部だけが必要な場合、どうすればよいでしょうか?このような場合に --where オプションを使用できます。ここで、その後に満たす必要のある条件が続きます。たとえば、create_time が 2019-08-01 より大きい tb1 テーブルのデータのみが必要な場合は、次のようにエクスポートできます。

mysqldump -uroot -pxxxxxx testdb tb1 --where=" create_time >= '2019-08-01 00:00:00' " > /tmp/tb1.sql

5. 特定のテーブルをエクスポートから除外する

データベースをバックアップしたいが、一部のテーブルに大量のデータが含まれていたり、ビジネスと密接な関係がなかったりする場合は、これらのテーブルを除外することを検討できます。同様に、オプション --ignore-table でこの機能を実現できます。

mysqldump -uroot -pxxxxxx testdb --ignore-table=testdb.tb1 > /tmp/testdb.sql

6. 構造のみまたはデータのみをバックアップする

構造のみをバックアップするには、--no-data オプション (省略形 -d) を使用します。データのみをバックアップするには、--no-create-info オプション (省略形 -t) を使用します。

mysqldump -uroot -pxxxxxx testdb --no-data > /tmp/testdb_jiegou.sqlmysqldump -uroot -pxxxxxx testdb --no-create-info > /tmp/testdb_data.sql

7. バックアップにはストアドプロシージャ、関数、イベントが含まれます

デフォルトでは、mysqldump バックアップにはストアド プロシージャ、カスタム関数、およびイベントは含まれません。 --routines または -R オプションを使用してストアド プロシージャと関数をバックアップし、--events または -E パラメータを使用してイベントをバックアップできます。たとえば、ストアド プロシージャとイベントを含む testdb データベース全体をバックアップするとします。

mysqldump -uroot -pxxxxxx -R -E --databases testdb > /tmp/testdb.sql

8. トランザクション形式でのバックアップ

ダンプ処理中にデータの一貫性を確保し、テーブル ロックを削減したい場合は、--single-transaction オプションを使用できます。このオプションは InnoDB データ テーブルに非常に役立ち、テーブルをロックしません。

mysqldump -uroot -pxxxxxx --single-transaction --databases testdb > /tmp/testdb.sql

9. 完全なバックアップとリカバリ

昨日の完全バックアップがあり、それを今復元したい場合は、次のようにします。

mysql -uroot -pxxxxxx < /tmp/all_database.sql

10. 完全バックアップから単一のデータベースを復元する

たとえば、特定のライブラリのみを復元したいが、インスタンス全体のバックアップがあるといった要件があるかもしれません。このとき、単一のライブラリのバックアップをフル バックアップから分離できるかどうか疑問に思います。答えは「はい」です。次の簡単なシェルが役立ちます。

sed -n '/^-- 現在のデータベース: `testdb`/,/^-- 現在のデータベース: `/p' all_databases.sql > testdb.sql

分離が完了したら、testdb.sqlをインポートして単一のデータベースを復元できます。

11. 単一のデータベースバックアップから単一のテーブルを復元する

この要件は非常に一般的です。結局のところ、単一データベースまたは完全リカバリには多くの作業が伴い、リカバリ時間も比較的長くなります。たとえば、どのテーブルが誤って操作されたかがわかっている場合は、単一テーブル リカバリを使用してそれをリカバリできます。たとえば、testdbデータベース全体のバックアップはありますが、tb1テーブルにエラーがあるため、このテーブルを個別に復元する必要があります。次に、次のようにします。

cat testdb.sql | sed -e '/./{H;$!d;}' -e 'x;/CREATE TABLE `tb1`/!d;q' > /tmp/tb1_jiegou.sqlcat testdb.sql | grep --ignore-case 'insert into `tb1`' > /tmp/tb1_data.sql

シェル構文を使用して、テーブルの作成とデータの挿入のステートメントを分離し、それらを 1 つずつエクスポートしてリカバリを完了します。

要約:

この記事では、さまざまなシナリオでのバックアップとリカバリの方法について説明します。運用環境では、より複雑なシナリオが存在する可能性があり、柔軟な対応が求められます。

上記はMySQLのバックアップとリカバリの詳細な説明です。MySQLのバックアップとリカバリの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL 論理バックアップとリカバリ テストの概要
  • MySQLバックアップとリカバリの実践に関する詳細な説明
  • MySQL5.7 mysqldump バックアップとリカバリの実装
  • MySQLのバックアップとリカバリの簡単な分析
  • MySQL シリーズ 12 バックアップとリカバリ

<<:  Docker初心者が初めてよく使うコマンドを試してみる練習記録

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

推薦する

MySql5.7.18 の文字セット構成の詳細なグラフィック説明

背景:かなり前(2017.6.5、記事にはタイムリーさがあり、特に使用されているツールは頻繁に更新さ...

Ubuntuはポート22を開きます

シナリオssh 経由で Ubuntu サーバーに接続するには、xshell ツールを使用する必要があ...

docker inspect コマンドの使用に関するヒント

説明と紹介Docker inspect は Docker クライアントのネイティブ コマンドであり、...

nginx を使用してブルーグリーン デプロイメントをシミュレートする方法

この記事では、ブルーグリーン デプロイメントと、nginx を使用してブルーグリーン デプロイメント...

HTMLノードの追加と削除の簡単な例

<br />HTMLノードの追加と削除の簡単な例<input type="...

Tomcat クラスローダーの実装方法とサンプルコード

Tomcat は内部的に複数の ClassLoader を定義し、アプリケーションとコンテナーが異な...

全文検索とキーワードスコアリング方式のMySQL実装例

1. はじめに今日、同僚から、MySQL を使用して ElasticSearch に似た全文検索機能...

vue3 のコンポーネントの互換性のない変更の詳細な説明

目次機能コンポーネント非同期コンポーネントの書き方とdefineAsyncComponentメソッド...

CSS と Bootstrap アイコンを使用して、上下にジャンプするインジケーター矢印のアニメーション効果を作成します。

ページが非常に長い場合は、下にさらにコンテンツがあることをユーザーに知らせるために矢印が必要になるこ...

Dockerコンテナとホスト間のデータ相互作用の概要

序文実稼働環境で Docker を使用する場合、多くの場合、データを複数のコンテナ間で永続化または共...

HTML テーブル セルの幅と高さを設定する方法

Web ページを作成するときに、テーブルの幅が揃っていないという問題に遭遇することがよくあります。 ...

Docker を使用して ELK ログ システムを構築する例

以下のインストールではすべて、インストール ルート ディレクトリとして ~/ ディレクトリが使用され...

Windows 10 での MySQL 5.7.21 winx64 のインストールと設定方法のグラフィック チュートリアル

mysql 5.7.21 winx64 のインストールと設定方法: MySQLのコミュニティバージョ...

MySQL 最適化技術における Limit クエリの最適化分析

序文実際のビジネスでは、ページングは​​一般的なビジネス要件です。次に、制限クエリを使用します。制限...

ティックアニメーション効果を作成するための svg+css または js

以前、上司からログイン後にチェックマークを表示できるプログラムを作るように言われたのですが、Baid...