日常生活でのPercona XtraBackupの使用

MySQLデータベースの普及率は、ノンストップの作業と最小限の復旧時間を必要とするプロジェクトを含む、さまざまなプロジェクトでの使用につながります。 mysqldumpなどの標準ツールは、数十ギガバイト単位で測定されるデータベースサイズを使用するには不便です。 残念ながら、mysqldumpはテーブルのロックを引き起こし、ダンプまたはデータベースの復旧操作には1時間以上、場合によっては5〜10時間かかることもあります。



幸いなことに、Percona XtraBackupは私たちの助けになります。



画像







InnoDBを使用すると、考慮される例のほとんどが提供されるという事実にすぐに注意を喚起したいと思います。 ダンププロセスでMyISAMを使用すると、テーブルがロックされるため、バックアップ/復元の速度のみが向上します。



多くは、レプリカを使用するなど、すぐに枕木を投げようとします。 私は絶対に同意します、レプリカサーバーは完璧なソリューションです。 ダンプとロックをそれで行うことができます-好きなだけ。 しかし:



1)レプリカの状態を常に監視して、関連するリソースを追加する必要があるようにします。



2)この例では、復旧時間の問題を検討しています。これが、レプリカを含むmysqldumpがデータベースクラッシュ時の状況を加速しない理由です。



私の目標は、XtraBackupのすべてのドキュメントを翻訳することではありませんでしたが、大規模なデータベースをすばやくバックアップ、コピー、復元する方法とその方法を示したいだけです。



考えたくない人、そして私たちが怠け者の管理者(そして怠は進歩の原動力です)の場合、2、3行をコピーして貼り付けて、それを冠に入れるだけで十分です。 私が提供した線に基づいて、さらに深く掘り下げたい人は、自分で「仕上げる」ことができます。



増分バックアップのすべての魅力を取得するには、すべてのテーブルがInnoDBタイプであり、innodb_file_per_table = 1オプションが設定されている必要があります。 物理的には、テーブルは2つのファイルを表します-テーブル定義とテーブルデータ



Feng ShuiによるMySQLのrootパスワードが/root/.mysqlにあるとします



完全バックアップを作成する

innobackupex --defaults-file=/etc/my.cnf --password=`cat /root/.mysql` --no-timestamp --rsync /var/lib/mysql-xtra 2>&1
      
      





--no-timestampタイムスタンプ付きのサブディレクトリを作成する必要はありません



--rsync rsyncを使用して、InnoDB以外のデータベースファイルをコピーし、ブロックする前に一部をコピーし、ブロック内に一部をコピーします。 ストリーミングモードでは機能しません!



--throttleは、ディスクをロードする必要がない場合に使用します。



ダンプの作成中に蓄積されたバイナリログをロールします

 innobackupex --apply-log --redo-only --defaults-file=/etc/my.cnf --password=`cat /root/.mysql` --no-timestamp --throttle=40 /var/lib/mysql-xtra 2>&1
      
      





重要な注意:



--no-timestampを使用する場合、フォルダー/ var / lib / mysql-xtraは空でなければなりません



たとえば、増分バックアップを作成したい

 innobackupex --defaults-file=/etc/my.cnf --password=`cat /root/.mysql` --no-timestamp --throttle=40 --rsync --incremental /var/lib/mysql-xtra-inc --incremental-basedir=/var/lib/mysql-xtra 2>&1
      
      





同様に、バックアップの作成中に蓄積されたバイナリログをロールします

 innobackupex --defaults-file=/etc/my.cnf --password=`cat /root/.mysql` --no-timestamp --throttle=40 --apply-log /var/lib/mysql-xtra --incremental-dir=/var/lib/mysql-xtra-inc 2>&1
      
      





この段階で、完全バックアップと増分バックアップを取得しました。



完全バックアップフォルダーは、サーバーのmysqlフォルダー内の別のサーバーにコピーでき、サーバーの完全なコピーを準備できます。



回復手順は非常に簡単です。

 #  mysql service mysql stop #    mv /var/lib/mysql /var/lib/mysql.old mkdir /var/lib/mysql #   innobackupex --defaults-file=/etc/my.cnf --copy-back /var/lib/mysql-xtra #      chown -R mysql.mysql /var/lib/mysql #  mysql service mysql start innobackupex --defaults-file=/etc/my.cnf --copy-back /var/lib/mysql-xtra
      
      







増分バックアップを復元する場合は、最初にフルバックアップを実行します。

 innobackupex --apply-log --redo-only /var/lib/mysql-xtra --incremental-dir=/var/lib/mysql-xtra-inc
      
      







現在、完全バックアップには増分バックアップからの変更が含まれており、完全バックアップの回復スキームに従ってバックアップを復元できます。



たとえば、サーバー全体をバックアップするのではなく、データベースのみをバックアップします。 これは次の方法で実行できます。

 #   c   ,  test innobackupex --defaults-file=/etc/my.cnf --password=`cat /root/.mysql` --no-timestamp --databases "test" --rsync /var/lib/mysql-xtra 2>&1 #          innobackupex --apply-log --redo-only --defaults-file=/etc/my.cnf --password=`cat /root/.mysql` --no-timestamp --throttle=40 /var/lib/mysql-xtra 2>&1 #  mysql service mysql stop #    mkdir -p /var/lib/mysql.old/test mv /var/lib/mysql/test /var/lib/mysql.old/test #   mkdir /var/lib/mysql/test innobackupex --copy-back /var/lib/mysql-xtra/ #   chown -R mysql.mysql /var/lib/mysql #  mysql service mysql start
      
      







便利なオプション:

--parallel = 4並列コピー、innodb_file_per_table = 1でのみ意味があります

--no-lockはプレートをブロックしませんが、! バックアップの作成中に、ALTER TABLE、MyISAMテーブルのINSERT / UPDATE / DELETEが実行されないことを確認してください。

--compressはバージョン2.0で圧縮できるため、ディスクがゴムでない場合に使用します。



Innobackupexでは、プレート、パーティションを個別にコピーすることもできますが、この記事では非常にまれな使用のため、考慮しません。



InnoDBタグの場合、xtrabackupを使用できます。これは非常に使いやすいです。 なぜなら 多くの場合、テーブルからミックスしますが、使用しません。 ただし、データベースを作成/復元するのに十分なコマンドをいくつか説明します。



バックアッププロセスを開始するには:

 xtrabackup --defaults-file=/etc/mysql/my.cnf --datadir=/var/lib/mysql --target-dir=/var/lib/mysql-xtra --backup
      
      







復元するには、オプション「--prepare」を指定してコマンドを実行する必要があります。

 xtrabackup --prepare --target-dir=/var/lib/mysql-xtra/ --datadir=/var/lib/mysql
      
      







データリカバリコマンドを2回実行する必要があります。その後、MySQLのログファイルが作成されます。 その後、ログファイルとデータファイルをMySQLフォルダー(デフォルトでは-/ var / lib / mysql)にコピーする必要があります。



増分バックアップ



大容量のフルバックアップを実行すると、リソースを大量に消費することは明らかです。したがって、XtraBackupには、増分バックアップと回復の機能があります。 これを行うには、最初に完全バックアップを作成してから、別のフォルダ(いわゆる)に保存する必要があります。 差分バックアップ:

 xtrabackup --defaults-file=/etc/mysql/my.cnf --target-dir=/var/lib/mysql-xtra-inc --incremental-basedir=/var/lib/mysql-xtra --backup
      
      







復元するには、次のコマンドを実行します。

 xtrabackup --target-dir=/var/lib/mysql-xtra-inc --incremental-basedir=/var/lib/mysql-xtra --prepare
      
      





今のところすべてです。



centos-admin.ru上級システム管理者、Igor Medynskyが投稿



All Articles