ホームページ  >  記事  >  運用・保守  >  xtrabackup のバックアップとリカバリ、動作原理

xtrabackup のバックアップとリカバリ、動作原理

PHP中文网
PHP中文网オリジナル
2017-06-20 13:14:132188ブラウズ

XtraBackup 物理バックアップ

Percona XtraBackup は、InnoDB および XtraDB データベースのノンブロッキング バックアップを実行する世界で唯一のオープン ソースの無料 MySQL ホット バックアップ ソフトウェアです。 Percona XtraBackup を使用すると、次の利点を実現できます:

  • 高速で信頼性の高いバックアップ

  • バックアップ中のノンストップのトランザクション処理

  • ディスク容量とネットワーク帯域幅の節約

  • 自動バックアップ検証

  • データベースを一時停止せずにホット InnoDB バックアップを作成

  • MySQL の増分バックアップを作成

  • 圧縮された MySQL バックアップを別のサーバーに圧縮

  • MySQL サーバー間でテーブルを移動

  • 新しい MySQL マスター/スレーブを簡単に作成

  • サーバーに負荷を加えずに MySQL をバックアップ

Percona XtraBackup は、Percona Server、MySQL、MariaDB のすべてのバージョンに対して、MySQL ホット バックアップ、圧縮および増分 MySQL バックアップを作成します。 Percona XtraBackup は、MySQL、MariaDB、および Percona Server と連携します。 InnoDB、XtraDB、HailDB ストレージ エンジンの完全なノンブロッキング バックアップをサポートします。

Percona XtraBackup の仕組み

Percona XtraBackup は、InnoDB に基づくクラッシュ回復機能です。 InnoDB データ ファイルをコピーすると、内部的にデータが不整合になりますが、ファイルに対してクラッシュ リカバリが実行され、再び整合性のある使用可能なデータベースになります。

これは、InnoDB がトランザクション ログとも呼ばれる REDO ログを維持するためです。これには、InnoDB データに対するすべての変更の記録が含まれます。 InnoDB が起動すると、データ ファイルとトランザクション ログがチェックされ、2 つのステップが実行されます。コミットされたトランザクション ログ エントリをデータ ファイルに適用し、データを変更したがコミットしなかったトランザクションに対して元に戻す操作を実行します。

Percona XtraBackup は、ログ シーケンス番号 (LSN) を記録することから開始し、データ ファイルをコピーします。これは完了するまでに短い時間がかかるため、ファイルが変更されている場合は、さまざまな時点でのデータベースの状態が反映されます。同時に、Percona XtraBackup はトランザクション ログ ファイルを監視し、そこから変更をコピーするバックグラウンド プロセスを実行します。トランザクション ログは循環方式で書き込まれ、一定期間後に再利用できるため、Percona XtraBackup はこれを継続的に実行する必要があります。 Percona XtraBackup では、データ ファイルの実行開始以降のすべての変更についてトランザクション ログが必要です。

Percona XtraBackup は、軽量の代替手段としてバックアップ ロックを使用します。この機能は Percona Server 5.6 以降で利用できます。 Percona XtraBackup は、これを使用して非 InnoDB データを自動的にコピーし、InnoDB テーブルを変更する DML クエリのブロックを回避します。サーバーがバックアップ ロックをサポートしている場合、xtrabackup はまず InnoDB データをコピーし、MyISAM テーブルと .frm ファイルを実行してコピーします。完了すると、ファイルのバックアップが開始されます。 .frm、.MRG、.MYD、.MYI、.TRG、FLUSH TABLES WITH READ LOCKLOCK TABLES FOR BACKUP.par

ロックは MyISAM およびその他の非 InnoDB テーブルに対してのみ、Percona でのみ行われます。すべての InnoDB /XtraDB データに対して実行され、ログは後でバックアップされます。 Percona XtraBackup は、軽量の代替手段としてバックアップ ロックを使用します。この機能は Percona Server 5.6 以降で利用できます。 Percona XtraBackup は、これを使用して非 InnoDB データを自動的にコピーし、InnoDB テーブルを変更する DML クエリのブロックを回避します。読み取りロックを使用してテーブルをフラッシュします

その後、xtrabackup はバイナリ ログの場所やレポートを変更する可能性のあるすべての操作をブロックします。その後、xtrabackup は REDO ログ ファイルのコピーとバイナリ ログ座標の取得を完了します。これが完了すると、xtrabackup はバイナリ ログとテーブルのロックを解除します。 BACKUPExec_Master_Log_PosExec_Gtid_SetSHOW MASTER/SLAVE STATUS

最後に、バイナリ ログの位置が STDERR に出力され、すべてが OK であれば xtrabackup は 0 を返して終了します。

STDERR の xtrabackup はどのファイルにも書き込まれないことに注意してください。たとえば、ファイルにリダイレクトする必要があります。 xtrabackup OPTIONS2>backupout.log

また、バックアップされたディレクトリに次のファイルが作成されます。

準備段階では、Percona XtraBackup はレプリケートされたトランザクション ログ ファイルを使用して、レプリケートされたデータ ファイルのクラッシュ リカバリを実行します。これが完了すると、データベースを復元して使用できるようになります。

バックアップされた MyISAM テーブルと InnoDB テーブルは、準備 (回復) プロセスの後、バックアップが開始された時点にロールバックされるのではなく、バックアップが完了した時点まで InnoDB のデータがロールフォワードされるため、最終的に相互に一貫性が保たれます。この時点は取得された位置と一致するため、MyISAM データと準備された InnoDB データが同期されます。ロック付きテーブルのフラッシュ

つまり、これらのツールを使用すると、データ ファイルのコピー、ログ ファイルのコピー、およびデータのさまざまな組み合わせへのログの適用により、ストリーミング バックアップや増分バックアップなどの操作を実行できます。

バックアップの復元

xtrabackup を使用してバックアップを復元するには、 または オプションを使用できます。 xtrabackup – コピーバック

これにより、まず MyISAM テーブル、インデックスなど (.FRM、.MRG、.MYD、.MYI、.TRG、.TRN、.ARM、.ARZ、.CSM、.CSV、par および .opt ファイル) がコピーされます。次のステップはテーブルとインデックス、そして最後にログ ファイルです。ファイルをコピーするときにファイルの属性が保持されます。ファイルはバックアップを作成したユーザーによって所有されるため、mysql はデータベース サーバーを起動する前にファイルの所有権を変更する必要がある場合があります。

あるいは、バックアップを復元するオプションも利用できます。このオプションの唯一の違いは、ファイルをコピーするのではなく、目的の場所に移動することです。このオプションはバックアップ ファイルを削除するため、使用には注意が必要です。この機能は、データ ファイルとそのバックアップ コピーの両方を保存するのに十分な空きディスク領域がない状況で役立ちます。 xtrabackup –move-backxtrabackup –copy-back

XtraBackup をインストール

XtraBackup ソースをインストール

[root@ZHENGDA ~]# uname -r
3.10.0-327.el7.x86_64

yum -y install

インストール

yum -y install percona-xtrabackup-24

作成接続ユーザーそして認可された

mysql> CREATE USER 'zhengda'@'localhost' IDENTIFIED BY 'goyun.org';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'zhengda'@'localhost';
mysql> FLUSH PRIVILEGES;

フルバックアップ

(1) xtrabackup は innodb および xtradb エンジンのテーブルのみをバックアップできますが、myisam エンジンのテーブルはバックアップできません
(2) innobackupex は xtrabackup をカプセル化する Perl スクリプトで、innodb と myisam の同時バックアップをサポートします。ただし、myisam をバックアップするときは、グローバル読み取りロックを追加する必要があります。また、myisam は増分バックアップをサポートしていません。

$ xtrabackup --user=zhengda --password=goyun.org --backup \ 
  --target-dir=/data/backup  
$ innobackupex --user=zhengda --password=goyun.org /path/ to /backup/dir/ 
$ innobackupex --user=zhengda --password=goyun.org --stream=tar ./ | bzip2 -

/data/backup にバックアップします

备份所有库:$ innobackupex --defaults-file=/etc/my.cnf--user=zhengda \
           --password=goyun.org --socket=/tmp/mysql.sock /data/backup
           
备份两个库:$ innobackupex --databases="db1 db2"--defaults-file=/etc/my.cnf--user=zhengda \
            --password=goyun.org --socket=/tmp/mysql.sock /data/backup

増分バックアップ

注: 最初の増分バックアップは完全バックアップに基づく必要があります
–incremental /data/backup1 増分バックアップが保存されるターゲット ディレクトリを指定します
–incremental -basedir=/data/backup 完全バックアップのディレクトリを指定します

$ innobackupex  --defaults-file=etc/my.cnf --user=zhengda --password=goyun.org \
--socket=/tmp/mysql.sock --incremental /data/backuup1 --incremental-basedir=/data/backup/#会根据当天时间生成个目录

2 回目の増分バックアップを実行するには、最後の増分バックアップのディレクトリを指定する必要があります
–incremental /data/backup2 この増分バックアップのディレクトリを指定します
–incremental-basedir=/data/backup1 最後の増分バックアップディレクトリを指定します

$ innobackupex --defaults-file=/etc/my.cnf --user=zhengda --password=goyun.org \
--socket=/tmp/mysql.sock --incremental /data/backup2 --incremental-basedir=/data/backup1/(....)

バックアップを復元します

–apply-log バックアップを復元するオプションを準備します
–use-memory=8G データの復元準備時に使用するメモリを設定します。改善できる点 準備に費やした時間

$ innobackupex --apply-log --use-memory=8G /data/backup
#还原如下
$ innobackupex  --defaults-file=/etc/my.cnf --user= --password= --copy-back /data/backup
#或
$ xtrabackup --user=zhengda --password=goyun.org --copy-back --target-dir=/data/backup

論理バックアップに Mysqldump を使用する

重要な MySQL バックアップ ツールとして、mysqldump は非常に強力です。バックアップパラメータとリカバリ戦略は慎重に検討する必要があります。

データベースのバックアップ:

単一データベースまたは単一データベース内の指定されたテーブルのバックアップ:

mysqldump [OPTIONS] database [tb1] [tb2]…

複数のデータベースのバックアップ:

mysqldump [OPTIONS] –databases [オプション] DB1 [DB2 DB3…]

すべてのデータベースをバックアップします:

mysqldump [オプション] –all-databases [オプション]

バックアップ時にテーブルをロックしないようにするには、このオプションを追加します

--single-transaction

ケース: すべてのライブラリをバックアップするローカル

mysqldump -u root -p密码 --all-databases > ./all.sql

ケース: ローカル すべてのライブラリを復元します

mysql -u root -p密码  < ./all.sql

ケース: ローカル db1 および db2 ライブラリをバックアップします

mysqldump -u root -p密码 --databases db1 db2 > ./db1_2.sql

ケース: ローカル db1 および db2 ライブラリを復元します

mysql -u root -p密码 db1 db2 < ./db1_2.sql

ケース: B ホストで実行して yun ライブラリをバックアップしますA ホストから B ホストへの接続では、ホスト B に yun ライブラリを作成する必要があります

-C は、ホスト間のデータ転送でデータ圧縮が使用されることを意味します

mysqldump --host=192.168.6.108(A) -u root -p密码 --opt yun | mysql --host=localhost(B) -u root -p密码 -C yun

ケース: ホスト B で実行して、ホスト A 上のすべてのデータベースをローカルにバックアップします

mysqldump --host=192.168.6.108(A) -u root -p密码 --all-databases > all.sql(B)

ケース: B で復元 ホストで実行

以上がxtrabackup のバックアップとリカバリ、動作原理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。