データベースサーバーには、企業の最も価値のある情報の一部が保存されています。事故やハードウェア障害が発生した場合にデータが失われるのを防ぐために、信頼性の高いデータベースバックアップを保証することは、重要なチェックボックスです。
24時間年中無休の高負荷サーバーでもトランザクション量の少ない環境でも、運用環境でサーバーのパフォーマンスを低下させることなく、バックアップをシームレスな手順にする必要があります。
このブログでは、このタスクを実行するために最もよく使用される2つのツール、つまりPerconaXtraBackupとMariabackupを確認します。 2つの類似点と相違点、およびそれらの使用方法を確認します。
Percona XtraBackupとは何ですか?
Percona XtraBackupは、MariaDB、MySQL、およびPerconaServerデータベースのバックアップを実行するためのオープンソースツールです。オンラインのノンブロッキング(サポートされているエンジンの場合)を実行し、トランザクションシステムで厳密に圧縮された安全な完全バックアップを実行するため、バックアップウィンドウの期間中はアプリケーションを完全に利用できます。
このツールを使用すると、次のことができます。
- データベースを一時停止したりサーバーに負荷をかけたりすることなく、迅速かつ確実に完了するホットInnoDBバックアップを作成します
- 増分バックアップを作成する
- MySQLサーバー間でテーブルをオンラインで移動する
- 新しいMySQLレプリケーションスレーブを簡単に作成する
- 圧縮されたMySQLバックアップを別のサーバーにストリーミングする
- ディスクスペースとネットワーク帯域幅を節約
Mariabackupとは何ですか?
Mariabackupは、物理的なオンラインバックアップを実行するためにMariaDBが提供するオープンソースツールです。これは、暗号化および圧縮されたテーブルで動作するように設計されたPercona XtraBackupのフォークであり、MariaDBデータベースに推奨されるバックアップ方法です。
MariaDB Server 10.1ではMariaDB圧縮と保存データ暗号化が導入されましたが、既存のバックアップソリューションはこれらの機能の完全バックアップ機能をサポートしていませんでした。そのため、MariaDBはXtraBackup(バージョン2.3.8)を拡張することを決定し、このソリューションにMariabackupという名前を付けました。
PerconaXtraBackupとMariabackupの違い
前述したように、MariabackupはMariaDBの推奨バックアップツールであり、XtraBackupとの主な違いは、暗号化および圧縮されたテーブルで機能することです。
とにかく、特別な理由でMariaDBデータベースにXtraBackupを使用する場合は、使用しているMariaDBサーバーのバージョンに応じて考慮すべき点がいくつかあります。
- MariaDB 10.1:圧縮および暗号化されていないMariaDBデータを使用すると、XtraBackupを使用できます。暗号化または圧縮が使用されている場合、またはinnodb_page_sizeが16K以外の値に設定されている場合、機能しません。
- MariaDB 10.2:XtraBackupを使用することもできますが、MariaDB10.2.2で修正されたMySQL5.7のログ形式の取り消しの非互換性のバグが原因で問題が発生する可能性があることに注意してください。このバグが原因で、XtraBackupを使用して作成されたバックアップは、一部のトランザクションの回復に失敗する場合があります。 innodb_undo_logs =1の設定でサーバーを実行する場合にのみ、これは問題になりません。
- MariaDB 10.3以降:このケースはより単純です。 XtraBackupには互換性がありません。
また、Mariabackupを使用する際に考慮すべきいくつかの制限があります:
- MyRocks:MariaDB10.2.16およびMariaDB10.3.8以降、MariabackupはMyRocksStorageEngineデータをバックアップします。 MyRocksデータの部分バックアップは現在サポートされていません。増分バックアップでは、MyRocksデータの完全コピーが保存されます。
- ファイルのエクスポート機能:MariaDB 10.2.9より前は、Mariabackupは--export機能をサポートしていませんでした(データベースからデータをエクスポートするためのエクスポートファイルを作成します)。この制限を回避するには、通常どおり(--exportフラグなしで)バックアップを準備してから、サーバーを起動してFLUSH TABLESFOREXPORTを実行します。
- ログファイル:10.2.8までのMariabackupバージョンは、空のログファイルを作成せず、ユーザーによって実行される--copy-backアクションに依存します(古いinnodbログファイルがある場合は削除します)。ユーザーが--copy-backを使用しない場合、または復元する前にデータディレクトリが空であることを確認した場合、これらのバージョンで作成されたバックアップは、(残りのInnoDBログが存在するために)一貫性がない/破損する可能性があります。 >
- Gcrypt:バックアップツールベースの暗号化(gcrypt)はMariabackupではサポートされていません。
- Innobackupexオプション:innobackupexへのシンボリックリンクはありません(代わりに--innobackupexパラメーターを使用してください)。 innobackupexツールはパッチを適用し、InnoDBおよびMyISAMテーブルをバックアップするためのinnobackupツールに追加機能を提供します。
- コンパクトオプション:-compactオプションはサポートされていません。
- インデックスの再構築オプション:-rebuild_indexesオプションはサポートされていません。
- バックアップファイルのtar:Mariabackup10.1.24で--stream=tarのサポートが削除されました(--streamsオプションはバックアップファイルをstdoutにストリーミングします)。
最後になりましたが、MariabackupはWindowsにインストールできます。
バックアッププロセス 復元プロセス方法-PerconaXtraBackupとMariabackup
インストールして使用する方法を見てみましょう。
インストール
XtraBackupとMariabackupの両方をインストールする方法は異なります。リポジトリからのインストールを試してみましょう。
XtraBackupのインストール
Debian/Ubuntuについて
$ wget https://repo.percona.com/apt/percona-release_0.1-6.$(lsb_release -sc)_all.deb
$ sudo dpkg -i percona-release_0.1-6.$(lsb_release -sc)_all.deb
$ sudo apt-get update
$ sudo apt-get install percona-xtrabackup-24
RedHat/CentOSについて
$ sudo yum install http://www.percona.com/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm
$ sudo yum install percona-xtrabackup-24
Mariabackupのインストール
Debian/Ubuntuの場合
Mariabackupは、MariaDB10.1.23以降のMariaDBサーバーの一部です。
$ sudo apt-get install software-properties-common
$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
$ sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://nyc2.mirrors.digitalocean.com/mariadb/repo/10.1/ubuntu bionic main'
$ sudo apt-get update
$ sudo apt-get install mariadb-server-10.1
CentOS / RedHat
$ sudo vi /etc/yum.repos.d/MariaDB.repo
[mariadb]
name=MariaDB
baseurl=http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
$ sudo yum install MariaDB-backup
構成
XtrabackupとMariabackupはどちらも、MySQL構成ファイルの[mysqld]セクションと[xtrabackup]セクションをこの順序で読み取ります。このようにして、datadirやInnoDBパラメーターなどのMySQLパラメーターを読み取ることができます。
[mysqld]セクションに含まれるパラメーターは、[xtrabackup]の値を変更することで変更できます。前述のように、パラメーターは順番に読み取られるため、[xtrabackup]の最後のものが優先されます。
[mysqld]
datadir=/data/datadir
[xtrabackup]
target_dir=/backups/
フルバックアップに必要な最小限の権限を持つユーザーは、RELOAD、LOCK TABLES、PROCESS、およびREPLICATION CLIENT:
mysql> CREATE USER 'backupuser'@'localhost' IDENTIFIED BY 'Password';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'backupuser'@'localhost';
次に、このユーザーをMySQL構成ファイルに追加できます。
[xtrabackup]
user=backupuser
password=Password
また、PerconaXtraDBクラスターまたはMariaDBGaleraクラスターを使用している場合は、XtrabackupまたはMariabackupを使用して状態スナップショット転送を実行できます。構成ファイルでwsrep_sst_method変数とwsrep_sst_auth変数を設定する必要があります。
[mysqld]
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=backupuser:Password
または
[mysqld]
wsrep_sst_method=mariabackup
wsrep_sst_auth=backupuser:Password
使用法
MariabackupはXtraBackupに基づいているため、同様に使用できます。
次に、両方の方法を使用して完全バックアップを作成、準備、および復元する例を見てみましょう。
バックアップの作成
XtraBackupまたはMariabackupを使用して新しいバックアップを作成するには、コマンドラインに--backupおよび--target-dirオプションを追加する必要があります。
$ xtrabackup --backup --target-dir=/backups/
または
$ mariabackup --backup --target-dir=/backups/
バックアップが保存されるターゲットディレクトリは、MySQL構成ファイルで指定できます。バックアッププロセスは既存のファイルを上書きしません。ファイルが存在する場合、バックアップは失敗します。
Transaction log of lsn (9755450) to (9755467) was copied.
181122 23:02:44 completed OK!
すべてがうまくいけば、最後に表示される行は「OK!」になっているはずです。データベースのコンテンツは変更されないため、いつでもバックアップをキャンセルできます。
[[email protected] ~]# ls -l /backups/
total 102448
-rw-r----- 1 root root 488 Nov 22 23:02 backup-my.cnf
-rw-r----- 1 root root 482 Nov 22 23:02 ib_buffer_pool
-rw-r----- 1 root root 104857600 Nov 22 23:02 ibdata1
drwxr-x--- 2 root root 4096 Nov 22 23:02 mysql
drwxr-x--- 2 root root 4096 Nov 22 23:02 performance_schema
drwxr-x--- 2 root root 4096 Nov 22 23:02 sakila
drwxr-x--- 2 root root 12288 Nov 22 23:02 sys
-rw-r----- 1 root root 64 Nov 22 23:02 xtrabackup_binlog_info
-rw-r----- 1 root root 113 Nov 22 23:02 xtrabackup_checkpoints
-rw-r----- 1 root root 533 Nov 22 23:02 xtrabackup_info
-rw-r----- 1 root root 2560 Nov 22 23:02 xtrabackup_logfile
これは、バックアップの内容である必要があります。データベースによっては変わる可能性があります。
バックアップの準備
XtraBackupまたはMariabackupを使用してバックアップを作成する場合は、復元する準備をする必要があります。データファイルは、バックアップ期間中のさまざまな時点でコピーされたため、準備が完了するまで一貫性がありません。それを復元してデータベースを起動しようとすると、破損が検出されてクラッシュし、一貫性のないデータで実行されないようにします。
バックアップを準備するには、-prepareオプションを指定してコマンドxtrabackupまたはmariabackupを実行し、バックアップが保存されているターゲットディレクトリを指定する必要があります。
$ xtrabackup --prepare --target-dir=/backups/
または
$ mariabackup --prepare --target-dir=/backups/
InnoDB: Shutdown completed; log sequence number 9757224
181122 23:05:29 completed OK!
表示される最後の行は、「シャットダウンが完了しました。ログシーケンス番号xxxxxxx」および「完了しましたOK!」である必要があります。すべてがうまくいった場合。データファイルが破損し、バックアップが使用できなくなる可能性があるため、準備プロセスをキャンセルすることはお勧めしません。
このバックアップを後で増分バックアップで使用する場合は、準備時に--apply-log-onlyオプションを使用する必要があります。そうしないと、実行できなくなります。
バックアップの復元
バックアップを準備した後、パラメータ--copy-backまたは--move-backを指定して復元オプションを使用し、バックアップをデータディレクトリにコピーまたは移動できます。十分なディスク容量がない場合は、おそらく移動オプションを使用する必要があります。また、バックアップが保存されるターゲットディレクトリを指定する必要があります。バックアップを復元する前に、datadirが空であり、データベースサービスがダウンしている必要があることに注意してください。
$ xtrabackup --copy-back --target-dir=/backups/
または
$ mariabackup --copy-back --target-dir=/backups/
最初にMyISAMテーブルとインデックス、次にInnoDBテーブルとインデックス、最後にログファイルをコピー/移動します。ファイルをコピーするときにファイルの属性が保持されます。バックアップを作成したユーザーがファイルを所有するため、データベースサーバーを起動する前にファイルの所有権をmysqlに変更する必要がある場合があります。
$ sudo chown -R mysql:mysql /var/lib/mysql
XtrabackupおよびMariabackupで使用するいくつかのパラメーターがあります。これらのパラメータは、XtraBackupの場合はここで、Mariabackupの場合はここで確認できます。
データベースインフラストラクチャ全体のClusterControlSingleコンソールClusterControlのその他の新機能を確認するClusterControlを無料でインストールClusterControlでのバックアップの管理
上で見たように、バックアップの実行はロケット科学ではありません。 cronでスケジュールすることもできます(ただし、サイレントエラーに注意してください!)。ただし、定期的にバックアップを作成するスクリプトは、バックアップ管理ソリューションではありません。バックアップについて報告し、障害について警告する方法が必要です。現在、ご使用の環境でバックアップを構成し、バックアップがエラーなしで機能することを確認しても、すべてが正常であるとは限りません。 Schrödingerのバックアップについて聞いたことがあるかもしれません。これは、復元が試行されるまで、バックアップの状態が不明であると述べています。起こりうる最悪の事態は災害であり、何らかの理由でバックアップが間違っていることに気付くからです。バックアップされたファイルを復元しようとしましたが、バックアップしたと思われるものが復元されないか、まったく復元されません。次に、バックアップファイルをオフサイトに移動するようなものがあります。災害復旧のために、外部クラウドストレージに。キーの暗号化と処理はセキュリティにとって重要です。ローカルバックアップと外部/アーカイブバックアップの保持も管理する必要があります。
ClusterControlがどのように役立つか見てみましょう。
ClusterControlバックアップ機能を使用する場合は、ClusterControl->[クラスター]->[バックアップ]を選択すると、現在のバックアップを確認したり、新しいバックアップを作成またはスケジュールしたりできます。
ClusterControlバックアップセクション作成またはスケジュールオプションを使用して、XtraBackupまたはMariabackupの両方の方法を選択できます。同じセクションで、バックアップを取得するサーバーを選択し、部分バックアップを有効にし、バックアップを保存する場所を選択し、バックアップをクラウド(AWS、Azure、またはGoogle Cloud)にアップロードするかどうかを選択できます。
ClusterControl Create Backup 1次に、圧縮、暗号化、保持などのバックアップパラメータを選択できます。
ClusterControl Create Backup 2そして、これらはClusterControlが実行するコマンドである必要があります:
[16:37:58]: 192.168.100.120: Launching ( LC_ALL=C /usr/bin/innobackupex --defaults-file=/etc/my.cnf --galera-info --parallel 1 --stream=xbstream --no-timestamp . | gzip -6 - > /root/backups/BACKUP-13/backup-full-2018-11-14_193757.xbstream.gz ) 2>&1.
または
[16:29:57]: 192.168.100.131: Launching ( LC_ALL=C /usr/bin/mariabackup --defaults-file=/etc/my.cnf --backup --galera-info --parallel 1 --stream=xbstream --no-timestamp | gzip -6 - > /root/backups/BACKUP-11/backup-full-2018-11-14_192957.xbstream.gz ) 2>&1.
このコマンドは、選択したパラメーターによって異なる場合があります。
ご覧のとおり、XtraBackupまたはMariabackupを使用する場合は、ClusterControlが適しています。 ClusterControl UIからオプションを選択することで、複雑なバックアップコマンドを簡単に実行できます。
ClusterControlは完全バックアップと増分バックアップの両方をサポートしているため、使いやすいUIからすべてのバックアップ戦略を構成できます。
結論
MariaDBサーバーをバックアップするときは、Mariabackupツールを使用することをお勧めします。ただし、何らかの理由でXtraBackupを使用したい場合でも、使用できます。ただし、このブログで説明したように、適用される制限に留意する必要があります。最後に、データベースをバックアップするスクリプトがバックアップ管理ソリューションと同じではないことを説明し、ClusterControlについて簡単に説明しました。
XtraBackupとMariaBackupの違いを見逃した場合はお知らせください。
非ブロッキングバックアップは、InnoDB、XtraDB、およびHailDBストレージエンジンでサポートされています。次のストレージエンジンは、バックアップの最後に書き込みを一時停止することでバックアップできます:MyISAM、Merge、Archive(パーティション化されたテーブル、トリガー、データベースオプションを含む)。