前書き

アクティブなデータベースシステムを操作するときに発生する非常に一般的な課題は、ホットバックアップの実行です。つまり、データベースサービスを停止したり、読み取り専用にしたりせずにバックアップを作成します。 アクティブなデータベースのデータファイルを単純にコピーすると、多くの場合、内部的に一貫性のないデータベースのコピーが作成されます。 使用できないか、コピー中に発生したトランザクションが欠落しています。 一方、スケジュールされたバックアップのためにデータベースを停止すると、アプリケーションのデータベース依存部分が使用できなくなります。 Percona XtraBackupは、この問題を回避し、実行中のMySQL、MariaDB、およびPercona Serverデータベースの一貫した完全または増分バックアップ(ホットバックアップとも呼ばれる)を作成するために使用できるオープンソースユーティリティです。

mysqldumpなどのユーティリティが生成する_論理バックアップ_とは対照的に、XtraBackupはデータベースファイルの_物理バックアップ_を作成します。データファイルのコピーを作成します。 次に、トランザクションログ(別名 (REDOログ)を物理バックアップに追加し、バックアップの作成中に終了しなかったアクティブなトランザクションをバックフィルし、実行中のデータベースの一貫したバックアップを作成します。 作成されたデータベースバックアップは、https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local-and-remote-directories-on-を使用してリモートロケーションにバックアップできます。 a-vps [rsync]、https://www.digitalocean.com/community/tutorials/how-to-install-bacula-server-on-centos-7 [Bacula]、またはhttps:// wwwなどのバックアップシステム.digitalocean.com / community / tutorials / understanding-digitalocean-droplet-backups [DigitalOceanバックアップ]。

このチュートリアルでは、CentOS 7でPercona XtraBackupを使用して、MySQLまたはMariaDBデータベースの完全なホットバックアップを実行する方法を示します。 バックアップからデータベースを復元するプロセスについても説明します。 このガイドのUbuntuバージョンは、https://www.digitalocean.com/community/tutorials/how-to-create-hot-backups-of-mysql-databases-with-percona-xtrabackup-on-ubuntu-14にあります。 -04 [こちら]。

前提条件

このチュートリアルを実行するには、次のものが必要です。

  • CentOS 7システムでのスーパーユーザー特権

  • 実行中のMySQLまたはMariaDBデータベース

  • データベースの管理ユーザー(ルート)へのアクセス

また、データベースのホットバックアップを実行するには、データベースシステムが* InnoDB *ストレージエンジンを使用している必要があります。 これは、XtraBackupがInnoDBが保持するトランザクションログに依存しているためです。 データベースがMyISAMストレージエンジンを使用している場合でもXtraBackupを使用できますが、データベースはバックアップの終わりに向かって短時間ロックされます。

ストレージエンジンの確認

データベースがどのストレージエンジンを使用しているかわからない場合は、さまざまな方法で検索できます。 1つの方法は、MySQLコンソールを使用して問題のデータベースを選択し、各テーブルのステータスを出力することです。

まず、MySQLコンソールに入ります。

mysql -u root -p

次に、MySQLルートパスワードを入力します。

MySQLプロンプトで、確認するデータベースを選択します。 ここで独自のデータベース名に置き換えてください:

USE ;

次に、そのテーブルステータスを出力します。

SHOW TABLE STATUS\G;

データベースの各行に対してエンジンを指定する必要があります。

Example Output:...
*************************** 11. row ***************************
          Name: wp_users
        Engine:
...

完了したら、コンソールを終了します。

exit

Percona XtraBackupをインストールしましょう。

Percona XtraBackupをインストールする

PerconaのリポジトリはRPMを提供するため、Percona XtraBackupをインストールする最も簡単な方法はyumを使用することです。

sudo yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

次に、このコマンドを実行してXtraBackupをインストールできます。

sudo yum install percona-xtrabackup

確認プロンプトを受け入れて、インストールを完了します。

XtraBackupは、主にXtraBackupプログラムと、データベースバックアップの作成に使用する + innobackupex + Perlスクリプトで構成されています。

初めての準備

XtraBackupを初めて使用する前に、XtraBackupが使用するシステムとMySQLユーザーを準備する必要があります。 このセクションでは、最初の準備について説明します。

システムユーザー

システムルートユーザーの使用を計画していない限り、XtraBackupを適切に実行できるようにいくつかの基本的な準備を行う必要があります。 XtraBackupを実行するユーザーとしてログインし、スーパーユーザー特権を持っていると仮定します。

システムユーザーを「mysql」グループに追加します(実際のユーザー名に置き換えます)。

sudo gpasswd -a  mysql

ここで、XtraBackupが作成するバックアップを保存するために使用するディレクトリを作成します。

sudo mkdir -p /data/backups
sudo chown -R : /data

`+ chown +`コマンドは、ユーザーがbackupsディレクトリに書き込みできることを保証します。

MySQLユーザー

XtraBackupには、バックアップの作成時に使用するMySQLユーザーが必要です。 今すぐ作成しましょう。

次のコマンドでMySQLコンソールに入ります:

mysql -u root -p

MySQLルートパスワードを指定します。

MySQLプロンプトで、新しいMySQLユーザーを作成し、それにパスワードを割り当てます。 この例では、ユーザーは「bkpuser」と呼ばれ、パスワードは「bkppassword」です。 これらの両方を安全なものに変更します。

CREATE USER ''@'localhost' IDENTIFIED BY '';

次に、新しいMySQLユーザーに、すべてのデータベースにリロード、ロック、およびレプリケーションの権限を付与します。

GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ''@'localhost';
FLUSH PRIVILEGES;

これらは、XtraBackupがデータベースの完全バックアップを作成するために必要な最小限の特権です。

終了したら、MySQLコンソールを終了します。

exit

これで、データベースの完全バックアップを作成する準備が整いました。

完全ホットバックアップを実行する

このセクションでは、XtraBackupを使用してMySQLデータベースの完全なホットバックアップを作成するために必要な手順について説明します。 データベースファイルのアクセス許可が正しいことを確認した後、XtraBackupを使用してバックアップを*作成*し、それから*準備*します。

データディレクトリのアクセス許可を更新する

CentOS 7では、MySQLデータファイルは `+ / var / lib / mysql`に保存されます。これは* datadir *と呼ばれることもあります。 デフォルトでは、datadirへのアクセスは `+ mysql`ユーザーに制限されています。 XtraBackupはバックアップを作成するためにこのディレクトリにアクセスする必要があるため、mysqlグループのメンバーとして以前に設定したシステムユーザーが適切な権限を持っていることを確認するためにいくつかのコマンドを実行しましょう。

sudo chown -R mysql: /var/lib/mysql
sudo find /var/lib/mysql -type d -exec chmod 775 "{}" \;

これらのコマンドは、datadir内のすべてのディレクトリがmysqlグループからアクセス可能であり、各バックアップの前に実行されることを保証します。

If you added your user to the mysql group in the same session, you will need to login again for the group membership changes to take effect.

バックアップを作成する

これで、バックアップを作成する準備が整いました。 MySQLデータベースが実行されている状態で、 `+ innobackupex +`ユーティリティを使用します。 MySQLユーザーのログインに一致するようにユーザーとパスワードを更新した後、次のコマンドを実行します。

innobackupex --user=  --password= --no-timestamp /data/backups/new_backup

これにより、指定された場所、「+ / data / backups / new_backup +」にデータベースのバックアップが作成されます。

innobackupex outputinnobackupex: Backup created in directory '/data/backups/new_backup'
150420 13:50:10  innobackupex: Connection to database server closed
150420 13:50:10  innobackupex: completed OK!

あるいは、 `+-no-timestamp +`を省略して、XtraBackupが現在のタイムスタンプに基づいてバックアップディレクトリを作成するようにすることができます。

innobackupex --user=  --password= /data/backups

これにより、次のように自動生成されたサブディレクトリにデータベースのバックアップが作成されます。

innobackupex output - no timestampinnobackupex: Backup created in directory '/data/backups/'
150420 13:50:10  innobackupex: Connection to database server closed
150420 13:50:10  innobackupex: completed OK!

どちらの方法でも、出力の最後の行に「innobackupex:completed OK!」を出力する必要があります。 バックアップが成功すると、データベースdatadirのコピーが作成されます。これを使用するには、*準備*する必要があります。

バックアップを準備する

XtraBackupを使用してホットバックアップを作成する最後の手順は、*準備*です。 これには、トランザクションログを「再生」して、コミットされていないトランザクションをバックアップに適用することが含まれます。 バックアップを準備すると、データの一貫性が保たれ、復元に使用できるようになります。

この例に従って、 `+ / data / backups / new_backup +`に作成されたバックアップを準備します。 これを実際のバックアップへのパスで置き換えます。

innobackupex --apply-log /data/backups/

繰り返しますが、出力の最後の行として「innobackupex:completed OK!」が表示されます。

データベースのバックアップが作成され、データベースの復元に使用する準備が整いました。 また、https://www.digitalocean.com/community/tutorial_series/how-to-use-bacula-on-ubuntu-14-04 [Bacula]などのファイルバックアップシステムがある場合、このデータベースバックアップはバックアップ選択の一部として含まれています。

次のセクションでは、作成したばかりのバックアップからデータベースを復元する方法について説明します。

バックアップの復元を実行する

XtraBackupを使用してデータベースを復元するには、データベースを停止し、そのデータディレクトリが空である必要があります。

次のコマンドでMySQLサービスを停止します。

sudo systemctl stop mariadb

次に、datadir( + / var / lib / mysql)の内容を移動または削除します。 この例では、一時的な場所に移動します。

mkdir /tmp/mysql
mv /var/lib/mysql/* /tmp/mysql/

これで、バックアップからデータベースを復元できます。「新しいバックアップ」:

innobackupex --copy-back /data/backups/

成功した場合、出力の最後の行に「innobackupex:completed OK!」と表示されます。

datadir内の復元されたファイルは、おそらく復元プロセスを実行したユーザーのものです。 MySQLがファイルを読み書きできるように、所有権をmysqlに戻します。

sudo chown -R mysql: /var/lib/mysql

これでMySQLを開始する準備ができました。

sudo systemctl start mariadb

それでおしまい! 復元されたMySQLデータベースが稼働しているはずです。

結論

Percona XtraBackupを使用してMySQLデータベースのホットバックアップを作成できるようになったので、セットアップを検討する必要のあることがいくつかあります。

まず、プロセスを自動化して、スケジュールに従ってバックアップを作成することをお勧めします。 次に、https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-localのようなものを使用して、データベースサーバーに問題がある場合にバックアップのリモートコピーを作成する必要があります。 -および-remote-directories-on-a-vps [rsync]、https://www.digitalocean.com/community/tutorials/how-to-install-bacula-server-on-centos-のようなネットワークファイルバックアップシステム7 [Bacula]、またはhttps://www.digitalocean.com/community/tutorials/understanding-digitalocean-droplet-backups[DigitalOcean backups]。 その後、バックアップを*ローテーション*し(スケジュールに従って古いバックアップを削除)、ディスクスペースを節約するために(XtraBackupを使用して)増分バックアップを作成します。

がんばろう!