2018年9月10日月曜日

xtrabackupをつかったダンプリストア

xtrabackupをつかったダンプリストア

** バックアップ方針

以下のファイルのダンプレストアを実施すると過程します
 DBUser:root
 DBPass:なし
 DBHost:localhost
 フルダンプ:/home/taterole/fulldump/2018-01-01-1
 差分ダンプ:/home/taterole/increment/2018-01-02-1
 差分ダンプ:/home/taterole/increment/2018-01-03-1
 差分ダンプ:/home/taterole/increment/2018-01-04-1
 差分ダンプ:/home/taterole/increment/2018-01-05-1
 差分ダンプ:/home/taterole/increment/2018-01-06-1
** 事前に確認
- openfilesの確認をしておく
 # ulimit -n
 ======================================================
 1024
 ======================================================
 ■DB数がすると、デフォの1024では"too many open files"が出るかも
- /etc/security/limits.confに追記
-- バックアップ
 # cp -pi /etc/security/limits.conf{,.`date +%Y%m%d`}
-- 2行追記
 # sed -i \
 -e '/student        -       maxlogins/a  *\t\tsoft\tnofile\t\t8192' \
 -e '/student        -       maxlogins/a  *\t\thard\tnofile\t\t8192' \
 limits.conf
 ======================================================
 #ftp             hard    nproc           0
 #@student        -       maxlogins       4    ←  この行の下に
 *               soft    nofile          8192  ←  ソフトリミット8192
 *               hard    nofile          8192  ←  ハードリミット8192
 ======================================================
-- 差分
 # diff /etc/security/limits.conf{.`date +%Y%m%d`,}
 ======================================================
 --- /etc/security/limits.conf.YYYYMMDD  YYYY-MM-DD XX:XX:XX.000000000 +0900
 +++ /etc/security/limits.conf   YYYY-MM-DD XX:XX:XX.000000000 +0900
 @@ -57,5 +57,7 @@
  #@faculty        hard    nproc           50
  #ftp             hard    nproc           0
  #@student        -       maxlogins       4
 +*              soft    nofile          8192
 +*              hard    nofile          8192

  # End of file
 ======================================================
 ■こんな感じで2行追記されてるはず
** バックアップ方法
- フルダンプ
 # xtrabackup --user=root --backup --galera-info --target-dir=/home/taterole/fulldump/2018-01-01-1 --no-lock
- 差分バックアップ(初回)
 # xtrabackup --user=root --backup --galera-info --target-dir=/home/taterole/increment/2018-01-02-1 --incremental-basedir=/home/taterole/fulldump/2018-01-01-1 --no-lock
 ■初回差分バックアップは、--incremental-basedirにフルダンプの取得先を指定
- 差分バックアップ(二回目以降)
 # xtrabackup --user=root --backup --galera-info \
--target-dir=/home/taterole/increment/2018-01-03-1 \
--incremental-basedir=/home/taterole/increment/2018-01-02-1 --no-lock
 # xtrabackup --user=root --backup --galera-info \
--target-dir=/home/taterole/increment/2018-01-04-1 \
--incremental-basedir=/home/taterole/increment/2018-01-03-1 --no-lock
 # xtrabackup --user=root --backup --galera-info \
--target-dir=/home/taterole/increment/2018-01-05-1 \
--incremental-basedir=/home/taterole/increment/2018-01-04-1 --no-lock
 # xtrabackup --user=root --backup --galera-info \
--target-dir=/home/taterole/increment/2018-01-06-1 \
--incremental-basedir=/home/taterole/increment/2018-01-05-1 --no-lock
 ■二回目移行の差分バックアップは、--incremental-basedirに前回の差分バックアップの取得先を指定する
** 復旧データの結合作業
- ベースダンプファイルのプリペア
 # xtrabackup --user=root --prepare --apply-log-only --target-dir=/home/taterole/fulldump/2018-01-01-1
- ベースダンプファイルに差分ダンプを結合しプリペア(ベースにどんどん古い順から結合を行っていきます)
 # xtrabackup --user=root --prepare --apply-log-only \
 --target-dir=/home/taterole/fulldump/2018-01-01-1 \
 --incremental-dir=/home/taterole/increment/2018-01-02-1
 # xtrabackup --user=root --prepare --apply-log-only \
 --target-dir=/home/taterole/fulldump/2018-01-01-1 \
 --incremental-dir=/home/taterole/increment/2018-01-03-1
 # xtrabackup --user=root --prepare --apply-log-only \
 --target-dir=/home/taterole/fulldump/2018-01-01-1 \
 --incremental-dir=/home/taterole/increment/2018-01-04-1
 # xtrabackup --user=root --prepare --apply-log-only \
 --target-dir=/home/taterole/fulldump/2018-01-01-1 \
 --incremental-dir=/home/taterole/increment/2018-01-05-1
 # xtrabackup --user=root --prepare --apply-log-only \
 --target-dir=/home/taterole/fulldump/2018-01-01-1 \
 --incremental-dir=/home/taterole/increment/2018-01-06-1
 ■差分ファイルが複数ある場合は、古い順に結合を実施
** 全体リストア(MySQLの停止が必要)
- MySQLの停止
 # service mysql stop
- MySQLディレクトリをリネーム
 # mv /var/lib/mysql{,_bkup}
- 結合済みのディレクトリをMySQLディレクトリに戻す
 # xtrabackup --copy-back --target-dir=/home/taterole/fulldump/2018-01-01-1
- 所有者の変更
 # chown -R mysql:mysql /var/lib/mysql
- MySQLの起動
 # service mysql start

** データベース個別リストア(データベースへの書き込みがないことを確認した後に作業を行う) [#w56ddd8d]
- MySQLの停止(絶対にアクセスが無い自信があればオンラインで可能でした)
 # service mysql stop
- 既存のデータベースファイル格納ディレクトリを移動
 # mv /var/lib/mysql/cool_ranko_db /tmp/cool_ranko_db
- 結合済みのバックアップファイルから対象のデータベースディレクトリを、mysqlのディレクリに移動
 # rsync -av /home/taterole/fulldump/2018-01-01-1/cool_ranko_db /var/lib/mysql/
- 権限及びパーミッションの変更を行う
 # chown -R mysql:mysql /var/lib/mysql/cool_ranko_db && chmod 700 cool_ranko_db
- MySQLの起動
 # service mysql start

** 補足
- フルと差分どっちがいいのか
 大量のデータベースをダンプする場合、
 時間:差分ダンプ>フルダンプ
 容量:フルダンプ>差分ダンプ
 となります。

 リストアする場合は、結合等の手間を含めると当然
 時間:フルダンプ>差分ダンプ
 となりますので、容量が許すのであればフルダンプで都度取得しておくのがいいかもしれません。
- なぜinnobackupexを使わずxtrabackupを使うのか
 バージョンアップした際にラッピングされたコマンドは、変更点がわかりにくいという欠点があるためです
 それとどこかのアメリカ語のコミュニティで未来のバージョンでinnodbbackupexはなくなるよ。的な
 発言を見た気がするからです(ソース失念…夢かも)
** おわり

2 件のコメント:

  1. innobackupexは2.1くらいからxtrabackupへのシンボリックリンクに変わっていて、どっちを使っても同じ動作になっていますが、非推奨(xtrabackupの方を使ってね)になっています。

    https://www.percona.com/doc/percona-xtrabackup/LATEST/innobackupex/innobackupex_script.html

    返信削除
    返信
    1. ありがとうございます。
      URLまでありがとうございます。確認させていただきました。

      削除