序章

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

mysqldumpなどのユーティリティが生成する論理バックアップとは対照的に、XtraBackupはデータベースファイルの物理バックアップを作成します。データファイルのコピーを作成します。 次に、トランザクションログ(別名 物理バックアップへのREDOログ)。バックアップの作成中に終了しなかったアクティブなトランザクションを埋め戻し、実行中のデータベースの一貫したバックアップを実現します。 結果として得られるデータベースバックアップは、 rsync Bacula 、または DigitalOceanバックアップなどのバックアップシステムを使用して、リモートの場所にバックアップできます。

このチュートリアルでは、Ubuntu14.04でPerconaXtraBackupを使用してMySQLまたはMariaDBデータベースの完全ホットバックアップを実行する方法を示します。 バックアップからデータベースを復元するプロセスについても説明します。 このガイドのCentOS7バージョンは、ここにあります。

前提条件

このチュートリアルに従うには、次のものが必要です。

  • Ubuntu14.04システムでのスーパーユーザー権限
  • 実行中のMySQLまたはMariaDBデータベース
  • データベースの管理者ユーザー(root)へのアクセス

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

ストレージエンジンを確認してください

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

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

  1. mysql -u root -p

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

MySQLプロンプトで、チェックするデータベースを選択します。 ここでは、必ず独自のデータベース名に置き換えてください。

  1. USE database_name;

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

  1. SHOW TABLE STATUS\G;

エンジンは、データベースの各行に示されている必要があります。

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

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

  1. exit

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

PerconaXtraBackupをインストールします

Percona XtraBackupをインストールする最も簡単な方法は、apt-getを使用することです。

次のコマンドでPerconaリポジトリキーを追加します。

  1. sudo apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A

次に、Perconaリポジトリをaptソースに追加します。

  1. sudo sh -c "echo 'deb http://repo.percona.com/apt trusty main' > /etc/apt/sources.list.d/percona.list"
  2. sudo sh -c "echo 'deb-src http://repo.percona.com/apt trusty main' >> /etc/apt/sources.list.d/percona.list"

次のコマンドを実行して、aptソースを更新します。

  1. sudo apt-get update

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

  1. sudo apt-get install percona-xtrabackup

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

初めての準備

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

システムユーザー

システムrootユーザーを使用する予定がない限り、XtraBackupを正しく実行できるように、いくつかの基本的な準備を実行する必要があります。 XtraBackupを実行するユーザーとしてログインしており、スーパーユーザー権限を持っていることを前提としています。

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

  1. sudo gpasswd -a username mysql

その間に、XtraBackupが作成するバックアップを保存するために使用されるディレクトリを作成しましょう。

  1. sudo mkdir -p /data/backups
  2. sudo chown -R username: /data

chownコマンドは、ユーザーがバックアップディレクトリに書き込めるようにします。

MySQLユーザー

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

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

  1. mysql -u root -p

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

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

  1. CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 'bkppassword';

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

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

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

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

  1. exit

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

フルホットバックアップを実行する

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

Datadirのアクセス許可を更新する

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

  1. sudo chown -R mysql: /var/lib/mysql
  2. sudo find /var/lib/mysql -type d -exec chmod 770 "{}" \;

これらのコマンドは、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ユーザーのログインと一致するようにユーザーとパスワードを更新した後、次のコマンドを実行します。

  1. innobackupex --user=bkpuser --password=bkppassword --no-timestamp /data/backups/new_backup

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

innobackupex output
innobackupex: 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に現在のタイムスタンプに基づいてバックアップディレクトリを作成させることができます。

  1. innobackupex --user=bkpuser --password=bkppassword /data/backups

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

innobackupex output — no timestamp
innobackupex: Backup created in directory '/data/backups/2015-04-20_13-50-07' 150420 13:50:10 innobackupex: Connection to database server closed 150420 13:50:10 innobackupex: completed OK!

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

バックアップの準備

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

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

  1. innobackupex --apply-log /data/backups/new_backup

繰り返しになりますが、「innobackupex:完了しました!」と表示されます。 出力の最後の行として。

データベースのバックアップが作成され、データベースの復元に使用できるようになりました。 また、 Bacula などのファイルバックアップシステムを使用している場合は、このデータベースバックアップをバックアップ選択の一部として含める必要があります。

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

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

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

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

  1. sudo service mysql stop

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

  1. mkdir /tmp/mysql
  2. mv /var/lib/mysql/* /tmp/mysql/

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

  1. innobackupex --copy-back /data/backups/new_backup

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

datadirに復元されたファイルは、復元プロセスを実行したユーザーのものである可能性があります。 所有権をmysqlに戻し、MySQLがファイルの読み取りと書き込みを行えるようにします。

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

これで、MySQLを起動する準備が整いました。

  1. sudo service mysql start

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

結論

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

まず、スケジュールに従ってバックアップを作成できるように、プロセスを自動化することをお勧めします。 次に、データベースサーバーに問題が発生した場合に備えて、 rsync Bacula DigitalOceanなどのネットワークファイルバックアップシステムを使用して、バックアップのリモートコピーを作成する必要があります。バックアップ。 その後、バックアップのローテーション(スケジュールに従って古いバックアップを削除)と増分バックアップの作成(XtraBackupを使用)を調べて、ディスク領域を節約する必要があります。

幸運を!