ホームページ > データベース > mysql チュートリアル > Xtrabackup を使用して mysql の増分バックアップを行う方法

Xtrabackup を使用して mysql の増分バックアップを行う方法

WBOY
リリース: 2023-05-30 14:50:06
転載
1359 人が閲覧しました

mysql 増分バックアップに Xtrabackup を使用する

xtrabackup バージョンは 8.0 にアップグレードされましたが、サポートされるのは mysql8.0 のみです。引き続き 2.4## を使用します。 # ですが、2.4 は以前の 2.1 と比べて比較的大きな変更があります: innobackupex 関数はすべて xtrabackup に統合されています。 onebinary であり、互換性上の理由から、innobackupexxtrabackup のソフト リンクです。つまり、xtrabackup は非 Innodb テーブルをサポートするようになりました。また、Innobackupex は次のバージョンで削除される予定です (8.0 ではすでに削除されています)。innobackupexxtrabackup に置き換えることをお勧めします。他にもいくつかの新機能があります。詳細については、xtrabackup の新しいバージョンを参照してください。

インストール

インストールに依存関係が必要な場合は、依存関係をインストールします

wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb
sudo apt-get update
sudo apt-get install percona-xtrabackup-24
ログイン後にコピー

バックアップ アカウントのデータベースをセットアップします

mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY '123456';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost';
mysql> FLUSH PRIVILEGES;
ログイン後にコピー

フル バックアップ

xtrabackup --user=bkpuser --password=123456 --backup --target-dir=/data/backups/mysql
# 会看到输出
200603 09:55:37 Executing UNLOCK TABLES
200603 09:55:37 All tables unlocked
200603 09:55:37 [00] Copying ib_buffer_pool to /data/backups/mysql/ib_buffer_pool
200603 09:55:37 [00]        ...done
200603 09:55:37 Backup created in directory '/data/backups/mysql/'
200603 09:55:37 [00] Writing /data/backups/mysql/backup-my.cnf
200603 09:55:37 [00]        ...done
200603 09:55:37 [00] Writing /data/backups/mysql/xtrabackup_info
200603 09:55:37 [00]        ...done
xtrabackup: Transaction log of lsn (837940114) to (837940123) was copied.
200603 09:55:37 completed OK!
ログイン後にコピー

  • バックアップを準備します

  • xtrabackup --prepare --target-dir=/data/backups/mysql
    ログイン後にコピー
  • バックアップをコピーします

完全バックアップ。直接実行します。ブログ

mysql が保存されているデータ ディレクトリを移動します。

mv /var/lib/mysql /var/lib/mysql_bak
mkdir /var/lib/mysql
xtrabackup --copy-back --target-dir=/data/backups/mysql  # 这样会保留原始备份 他会将当时读到my.cnf的datadir设置为恢复路径
200603 10:47:42 [01]        ...done
200603 10:47:42 [01] Copying ./performance_schema/mutex_instances.frm to /var/lib/mysql/performance_schema/mutex_instances.frm
200603 10:47:42 [01]        ...done
200603 10:47:42 [01] Copying ./performance_schema/events_transactions_history_long.frm to /var/lib/mysql/performance_schema/events_transactions_history_long.frm
200603 10:47:42 [01]        ...done
200603 10:47:42 [01] Copying ./xtrabackup_info to /var/lib/mysql/xtrabackup_info
200603 10:47:42 [01]        ...done
200603 10:47:42 [01] Copying ./ibtmp1 to /var/lib/mysql/ibtmp1
200603 10:47:42 [01]        ...done
200603 10:47:42 completed OK!
ログイン後にコピー

  • バックアップは成功し、その後ブログに通常どおりアクセスできます。再起動しますははははははははははははははははははははははははははは

    #
    # 将恢复目录的属主更改一下
    chown -R mysql:mysql mysql
    /etc/init.d/mysql start
    ログイン後にコピー
  • リカバリ中にデータをバックアップしたくない場合は、
xtrabackup --move-back

コマンド # を使用できます。 ##増分バックアップ

増分バックアップは既存のデータに基づいていますはい、問題ありません。最初に完全バックアップを作成してから、その時点の記録ポイントを記録する必要があります。

バックアップの作成
  • xtrabackup --user=bkpuser --password=123456 --backup --target-dir=/data/backups/base
    # 基于全量备份进行增量
    xtrabackup --user=bkpuser --password=123456 --backup --target-dir=/data/backups/inc1 --incremental-basedir=/data/backups/base
    ログイン後にコピー

バックアップの種類をチェックして、増分バックアップであることを確認します。
    from_lsn
  • はバックアップの開始

    LSN

    です。増分バックアップの場合、
  • to_lsn
は前の

base バックアップと同じである必要があります。 この場合、 to_lsn (最後のチェックポイント LSN) と last_lsn (最後にコピーされた LSN

) が表示されます。これは、トラフィックがあることを意味します。バックアッププロセス中にサーバー上で実行されます。

最初の増加をテストし、いくつかのデータを作成する前に増分を作成し続けることができます

root@longing:/data/backups/inc1# cat xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 837943393
to_lsn = 837943393
last_lsn = 837943402
compact = 0
recover_binlog_info = 0
flushed_lsn = 837943402
ログイン後にコピー

  • 準備復元するには

#すでに 3 つのバックアップがあります。最初に基本データを準備し、次に 2 つの増分データを準備する必要があります
    xtrabackup --user=bkpuser --password=123456 --backup --target-dir=/data/backups/inc2 --incremental-basedir=/data/backups/inc1
    ログイン後にコピー
  • xtrabackup --apply- log-only

    最後の増分を除くすべての増分をマージする場合に使用する必要があります。準備が完了すると、増分バックアップは完全バックアップと同一であり、同じ方法で復元できます。

復元

xtrabackup --user=bkpuser --password=123456 --prepare --apply-log-only --target-dir=/data/backups/base
xtrabackup --user=bkpuser --password=123456 --prepare --apply-log-only --target-dir=/data/backups/base --incremental-dir=/data/backups/inc1
xtrabackup --user=bkpuser --password=123456 --prepare --target-dir=/data/backups/base --incremental-dir=/data/backups/inc2
ログイン後にコピー

真ん中にデータが挿入されているのがわかりますね!
  • 質問のまとめ

増分バックアップの手順

  • 基本バックアップの作成

特定の条件下での増分バックアップの作成
  • すべてのバックアップを準備します。基本バックアップに基づくすべての増分は、マージ操作と同等です
  • 最後に、バックアップを直接復元できます。
  • Principle
  • InnoDB

    は内部的に REDO ログ ファイルを維持します (トランザクション ログ ファイルとも呼ぶことができます)。トランザクション ログには、テーブル データの各 InnoDB レコード変更が保存されます。 InnoDB が起動すると、InnoDB はデータ ファイルとトランザクション ログをチェックし、コミットされたトランザクション ログをデータ ファイルに適用 (ロールフォワード) し、変更されたがコミットされていないデータをロールバックするという 2 つの手順を実行します。

Xtrabackup

は起動時に

ログ シーケンス番号 (LSN) を記憶し、すべてのデータ ファイルをコピーします。コピー処理には時間がかかるため、この間にデータ ファイルが変更されると、データベースの時点が変更されます。この時点で、xtrabackup

はバックグラウンド プロセスを実行してトランザクション ログを監視し、トランザクション ログから最新の変更をコピーします。

Xtrabackup トランザクション ログはローテーションで繰り返し書き込まれ、トランザクション ログは再利用できるため、この操作は継続的に実行する必要があります。したがって、xtrabackup は起動以来、各データ ファイルの変更をトランザクション ログに継続的に記録します。以上がxtrabackupのバックアップ処理です。 最後の増分バックアップに「--apply-log-only」を使用しない理由最後の「準備」操作ではロールバック操作をスキップする必要がないため、使用されるデータ ファイルは回復用はローカルです。処理されました。サービスが開始されると、再度ロールバック フェーズにはなりません。このパラメータが最後に使用される場合、サーバーは開始後にロールバック フェーズに入ります。したがって、この --apply-log-only は、次の増分が使用できなくなることを避けるために、増分をマージするためにのみ使用されます。 「man xtrabackup」を参照

为什么备份完后要准备备份 "prepare"

一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。他的作用是使数据文件处于一致性状态,方法是回滚未提交的事务并同步已提交的事务至数据文件。

为什么选择这个做备份?

  • mysqldump 备份缺点

效率较低,备份和还原速度慢,份过程中,数据插入和更新操作会被挂起

  • MySQL 备份工具

跨平台性差,备份时间长,冗余备份,浪费存储空间

  • XtraBackup

备份过程中不锁库表,适合生产环境,由专业组织Percona提供( 改进MySQL分支 )

  • XtraBackup能对表 库进行备份吗?

当然了,只不过博主太懒了,写起来太麻烦了,不过原理都是差不多,操作也差不多,大家自己搞搞!

xtrabackup --user=bkpuser --password=123456 --backup --databases="u_test" --no-timestamp --target-dir=/data/backups/u
xtrabackup --prepare --target-dir=/data/backups/u
ログイン後にコピー

还原

  • prepare,利用--apply-log的作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态

  • copy,因为是部分备份,不能直接用--copy-back,只能手动来复制需要的库,也要复制ibdata(数据字典)

  • cp /data/backups/u/ibdata1 /var/lib/mysql/

  • cp -r u/u_test /var/lib/mysql/

以上がXtrabackup を使用して mysql の増分バックアップを行う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート