最近のMySQLバックアップ事情MySQL Casual Talks Fukuoka vol1 /2012-06-27               @matsuken
自己紹介•   twitter_id: @matsukena•   松尾健司 / Kenji Matsuo•   paperboy&co.の開発エンジニア•   http://yokoninaritai.hatenablog.jp/
アジェンダ• MySQLバックアップ & リストア• 運用まわりの話
バックアップちゃんやってますか?もちろんやってますよね。
backup tool• mysqldump• ibbackup & innobackup• xtrabackup & innobackupex• Mydumper• LVMスナップショット
mysqldump•   MySQL本体に標準インストールされてます。•   論理バックアップ(SQL分のdump)です。•   InnoDBのHotbackupが可能です。•   データ量につられてバッアップの時間が長く    なります。(リ...
mysqldump使い方                    (MyISAMの場合)# time mysqldump -uroot -p$password --lock-all-tables                    --mast...
mysqldump使い方                    (InnoDBの場合)# time mysqldump -uroot -p$password --single-transaction                   --ma...
mysqldumpのよく使い方          (ホスティングの場合)# time mysqldump -uroot -p$password --force                   --opt --quote-name      ...
mysqldumpのよく使い方          (ホスティングの場合)•   --force: テーブルダンプ中にエラーが発生しても続行する。         (view table で利用しているtableを削除するユーザがいる為)•   ...
mysqldumpで取得した                ファイルのリストア# time gzip -dc ./hoge.sql.gz |mysql -uroot -p$password          --default-characte...
リストアを高速化する為に     (InnoDBの場合)• 対処は基本的にI/Oを減らす事。
リストアを高速化する為に        (InnoDBの場合)• バイナリログリストア中はバイナリログをoffにする。
リストアを高速化する為に            (InnoDBの場合)• Double WriteInnoDBはデータベースへデータを反映させる際、2回書く。(クラッシュ時の耐性を高める為)なので--skip-innodb-doublewrit...
リストアを高速化する為に             (InnoDBの場合)• InnoDBログファイルデフォルトでは、毎回コミットするごとにログのフラッシュを行い、確実にデータがディスクへ書き込まれるようになっている。リストア時は「失敗したらもう...
リストアを高速化する為に       (InnoDBの場合)• InnoDBバッファプールリストア中はインデックスの更新が必要になる。もし他のバッファに多くメモリを割り当てていたら、いったん解除してバッファプールへ一時的に割り振る。
リストアを高速化する為に     (InnoDBの場合)• リストアが終わったら必ず、設定を戻して再起動しましょう。
ibbackup & innobackup•   InnoDBのHotbackupが可能です。•   バイナリコピーによる物理バックアップ。•   有償です。(1ヶ月試用期間がある。)•   なので使った事がないですwww
xtrabackup & innobackupex•   ibbackup & innobackupみたいなオープンソフト    ウェアです。•   InnoDBのHotbackupが可能です。•   オンラインで物理バックアップができる。• ...
install xtrabackup# yum install gpg 32bitの場合# rpm -Uhv         http://www.percona.com/downloads/percona-release/percona-re...
xtrabackup の仕組み    1, InnoDBのWALを2重に記録する。 2, その間にデータファイルをコピーする。 3, 終了後に記録しておいたWALを適応する。この辺はriywoさんの資料に詳しく書いてありました。- WALとはW...
xtrabackup 使い方バックアップ実行# time innobackupex-1.5.1 --user root --password password --slave-info                           /ba...
xtrabackup 使い方圧縮してバックアップ# time innobackupex-1.5.1 --user root --password password --stream=tar                           -...
xtrabackup 使い方リモートサーバへバックアップ# time innobackupex-1.5.1 --user root --password password                   --remote-host=user...
xtrabackup 使い方その他気になったoption    --parallel=NUMBER-OF-THREADS        This option specifies the number of threads the xtrabac...
xtrabackup 使い方リストアの実行# time /usr/bin/innobackupex --copy-back                /backup/xtrabackup/YYYY-mm-dd_HH-MM-SS# chown...
Mydumper• マルチスレッドのMySQLバックアップ toolです。(コア数の多いサーバでス レッドを増やせば性能があがる。)• mysqldumpと同じく論理バックアップで す。• 日本語のドキュメントが少ないです。
install Mydumper# yum install cmake glib2-devel zlib zlib-devel               pcre-devel gcc-c++MySQL5.5.22以前ではmakeが通りませんで...
mydumper --help# mydumper --helpUsage:mydumper [OPTION...] multi-threaded MySQL dumpingHelp Options:-?, --help            ...
mydumper の 使い方バックアップ実行# time mydumper -u root -p password -cフォルダ名: export-YYYYMMDD-HHMMSSバックアップデータ: データベース名.テーブル名.sql.gzスキ...
mydumper の 使い方リストアの実行# time mydumper -u root -p password -o                 --directory=./export-YYYYmmdd-HHMMSS
LVMスナップショット• linuxなどがもつLVMのスナップショット を利用したバックアップです。• データサイズに関係なく一瞬で終わる のでロックをかける時間はほんの一瞬 で済みます。
LVMスナップショットの                    よくある使い方#   mysql -uroot -p$password -e”FLUSH TABLES WITH READ LOCK”#   mysql -uroot -p$pas...
Innodb Hot Backの利点・欠点・特徴•   いつでもバックアップできる手軽さ。•   OSやプラットフォームに依存しない。•   バックアップの内容はコマンド完了時のデータ。
スナップショットの利点・欠点・特徴•   スナップショット用の領域を事前に準備しておく必    要がある。(ZFSの用に必要ない場合もある。)•   瞬時のスナップショットがとれる。•   バックアップの内容はスナップショット実行時の    デ...
ここからはちょっと運用まわりのお話
取得したバックアップを別のサーバにおいてますか?
例えばメンテナンス時
メンテナンス後(こんな事ってありますよね?)
こんな時でも別のサーバに退避させていれば、メンテナンス後に   メンテナンスの不具合が   発覚しても安心ですね。
バックアップの世代管理はできてますか?
間違ってtableを更新した後にcronでバックアップの処理が走ってしまう事が    あるかもしれません。
世代管理ができていればこんな時も  安心して作業ができます。
取得したバックアップからきちんと   リストアできますか?
障害が起こった際に、その時の最新の  バックアップから戻しますよね。実際リストアしたら、エラーがでたり件数が違ってたりする事あるかもしれません。
バックアップしたデータはリストアしてみましょう。
まとめ• バックアップしたデータは別のサーバ においておく。• 世代管理をきちんとしておく。• リストアのテストはやっておく。
バックアップはいざという時自分を    助けてくれます。 なので手間を惜しまず安全なバックアップを心がけましょう。
ご清聴ありがとうございました。
Upcoming SlideShare
Loading in...5
×

Mysql casial01

5,718

Published on

mysqlcf

0 Comments
10 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,718
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
10
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Transcript of "Mysql casial01"

    1. 1. 最近のMySQLバックアップ事情MySQL Casual Talks Fukuoka vol1 /2012-06-27 @matsuken
    2. 2. 自己紹介• twitter_id: @matsukena• 松尾健司 / Kenji Matsuo• paperboy&co.の開発エンジニア• http://yokoninaritai.hatenablog.jp/
    3. 3. アジェンダ• MySQLバックアップ & リストア• 運用まわりの話
    4. 4. バックアップちゃんやってますか?もちろんやってますよね。
    5. 5. backup tool• mysqldump• ibbackup & innobackup• xtrabackup & innobackupex• Mydumper• LVMスナップショット
    6. 6. mysqldump• MySQL本体に標準インストールされてます。• 論理バックアップ(SQL分のdump)です。• InnoDBのHotbackupが可能です。• データ量につられてバッアップの時間が長く なります。(リストアも大変)
    7. 7. mysqldump使い方 (MyISAMの場合)# time mysqldump -uroot -p$password --lock-all-tables --master-data=2 hoge 2>./error.log |gzip > hoge_YYYYmmdd_HHMMSS.sql.gz • --lock-all-tables: すべてのtableをロックします。 • --master-data=2: バックアップ時点でのバイナリログの位置情報ダンプ ファイルに記録します。
    8. 8. mysqldump使い方 (InnoDBの場合)# time mysqldump -uroot -p$password --single-transaction --master-data=2 --order-by-primary hoge 2>./error.log |gzip > hoge_YYYYmmdd_HHMMSS.sql.gz • --single-transaction: biginしてからdumpを行う。 • --order-by-primary: dump時に明示的に主キーでソートしてくれるように なる。
    9. 9. mysqldumpのよく使い方 (ホスティングの場合)# time mysqldump -uroot -p$password --force --opt --quote-name --default-character-set=binary --master-data=2 --hex-blob --flush-logs hoge 2>./error.log |gzip > hoge_YYYYmmdd_HHMMSS.sql.gz
    10. 10. mysqldumpのよく使い方 (ホスティングの場合)• --force: テーブルダンプ中にエラーが発生しても続行する。      (view table で利用しているtableを削除するユーザがいる為)• --quote-name: `table` みたいな形でtable名・カラム名をクオートする。 (table名に特殊文字を利用してるユーザがいる為)• --default-character-set=binary; 使用している文字コードに関係なくdumpを 取得する。リストア時も同じオプションを利用します。• --hex-blob: 16進でデータが入ってるバイナリカラムをダンプします。
    11. 11. mysqldumpで取得した ファイルのリストア# time gzip -dc ./hoge.sql.gz |mysql -uroot -p$password  --default-character-set=binary
    12. 12. リストアを高速化する為に  (InnoDBの場合)• 対処は基本的にI/Oを減らす事。
    13. 13. リストアを高速化する為に  (InnoDBの場合)• バイナリログリストア中はバイナリログをoffにする。
    14. 14. リストアを高速化する為に  (InnoDBの場合)• Double WriteInnoDBはデータベースへデータを反映させる際、2回書く。(クラッシュ時の耐性を高める為)なので--skip-innodb-doublewriteオプションをつけてmysqlを再起動する。
    15. 15. リストアを高速化する為に  (InnoDBの場合)• InnoDBログファイルデフォルトでは、毎回コミットするごとにログのフラッシュを行い、確実にデータがディスクへ書き込まれるようになっている。リストア時は「失敗したらもう一度やり直す」事を前提に、--innodb-flush-log-at-trx-commitを0か2にする。
    16. 16. リストアを高速化する為に  (InnoDBの場合)• InnoDBバッファプールリストア中はインデックスの更新が必要になる。もし他のバッファに多くメモリを割り当てていたら、いったん解除してバッファプールへ一時的に割り振る。
    17. 17. リストアを高速化する為に  (InnoDBの場合)• リストアが終わったら必ず、設定を戻して再起動しましょう。
    18. 18. ibbackup & innobackup• InnoDBのHotbackupが可能です。• バイナリコピーによる物理バックアップ。• 有償です。(1ヶ月試用期間がある。)• なので使った事がないですwww
    19. 19. xtrabackup & innobackupex• ibbackup & innobackupみたいなオープンソフト ウェアです。• InnoDBのHotbackupが可能です。• オンラインで物理バックアップができる。• 無償で使える。(Perconna++)
    20. 20. install xtrabackup# yum install gpg 32bitの場合# rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.i386.rpm 64bitの場合# rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm# yum install xtrabackup
    21. 21. xtrabackup の仕組み    1, InnoDBのWALを2重に記録する。 2, その間にデータファイルをコピーする。 3, 終了後に記録しておいたWALを適応する。この辺はriywoさんの資料に詳しく書いてありました。- WALとはWrite Ahead Logの略で、存在する実際のデータテーブルに対して 更新を反映する前にログの更新内容を書き込もういうものです。
    22. 22. xtrabackup 使い方バックアップ実行# time innobackupex-1.5.1 --user root --password password --slave-info /backup/xtrabackup//backup/xtrabackup以下に日時ディレクトリが作成されて、バックアップファイルが設置されます。WALを適用して、バックアップ時点でのデータに更新time innobackupex-1.5.1  --user root --password password --apply-log /backup/xtrabackup/YYYY-mm-dd_HH-MM-SS/
    23. 23. xtrabackup 使い方圧縮してバックアップ# time innobackupex-1.5.1 --user root --password password --stream=tar --slave-info ./ | gzip - > backup.tar.gz バックアップファイルを展開する時は”-i”オプションをつけてください。 # tar -xizf backup.tar.gz
    24. 24. xtrabackup 使い方リモートサーバへバックアップ# time innobackupex-1.5.1 --user root --password password     --remote-host=user@host --slave-info /backup/xtrabackup/   scp の optionも変更できます。  --scpopt=SCP-OPTIONS        This option specifies the command line options to pass to scp when        the option --remost-host is specified. The option accepts a string        argument. If the option is not specified, the default options are        "-Cp -c arcfour".
    25. 25. xtrabackup 使い方その他気になったoption    --parallel=NUMBER-OF-THREADS        This option specifies the number of threads the xtrabackup child        process should use to back up files concurrently. The option accepts        an integer argument. It is passed directly to xtrabackups        --parallel option. See the xtrabackup documentation for details.    --safe-slave-backup        Stop slave SQL thread and wait to start backup until        Slave_open_temp_tables in "SHOW STATUS" is zero. If there are no        open temporary tables, the backup will take place, otherwise the SQL        thread will be started and stopped until there are no open temporary        tables. The backup will fail if Slave_open_temp_tables does not        become zero after --safe-slave-backup-timeout seconds. The slave SQL        thread will be restarted when the backup finishes.
    26. 26. xtrabackup 使い方リストアの実行# time /usr/bin/innobackupex --copy-back /backup/xtrabackup/YYYY-mm-dd_HH-MM-SS# chown -R mysql:mysql /var/lib/mysql
    27. 27. Mydumper• マルチスレッドのMySQLバックアップ toolです。(コア数の多いサーバでス レッドを増やせば性能があがる。)• mysqldumpと同じく論理バックアップで す。• 日本語のドキュメントが少ないです。
    28. 28. install Mydumper# yum install cmake glib2-devel zlib zlib-devel pcre-devel gcc-c++MySQL5.5.22以前ではmakeが通りませんでしたwww# wget http://launchpad.net/mydumper/0.2/0.2.3/+download/mydumper-0.2.3.tar.gz# tar zxfv mydumper-0.2.3.tar.gz# cd mydumper-0.2.3# cmake .# make# cp mydumper /usr/bin/# cp myloader /usr/bin/
    29. 29. mydumper --help# mydumper --helpUsage:mydumper [OPTION...] multi-threaded MySQL dumpingHelp Options:-?, --help Show help optionsApplication Options:-B, --database Database to dump-T, --tables-list Comma delimited table list to dump (does not exclude regex option)-o, --outputdir Directory to output files to, default ./export-*/-s, --statement-size Attempted size of INSERT statement in bytes, default 1000000-r, --rows Try to split tables into chunks of this many rows-c, --compress Compress output files-e, --build-empty-file Build dump files even if no data available from table-x, --regex Regular expression for db.table matching-i, --ignore-engines Comma delimited list of storage engines to ignore-m, --no-schemas Do not dump table schemas with the data-l, --long-query-guard Set long query timer in seconds, default 60-k, --kill-long-queries Kill long running queries (instead of aborting)-b, --binlogs Get the binary logs as well as dump data-d, --binlog-outdir Directory to output the binary logs to, default ./export/binlogs/-h, --host The host to connect to-u, --user Username with privileges to run the dump-p, --password User password-P, --port TCP/IP port to connect to-S, --socket UNIX domain socket file to use for connection-t, --threads Number of threads to use, default 4-C, --compress-protocol Use compression on the MySQL connection-V, --version Show the program version and exit-v, --verbose Verbosity of output, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2
    30. 30. mydumper の 使い方バックアップ実行# time mydumper -u root -p password -cフォルダ名: export-YYYYMMDD-HHMMSSバックアップデータ: データベース名.テーブル名.sql.gzスキーマ情報: データベース名.テーブル名-schema.sql.gz
    31. 31. mydumper の 使い方リストアの実行# time mydumper -u root -p password -o --directory=./export-YYYYmmdd-HHMMSS
    32. 32. LVMスナップショット• linuxなどがもつLVMのスナップショット を利用したバックアップです。• データサイズに関係なく一瞬で終わる のでロックをかける時間はほんの一瞬 で済みます。
    33. 33. LVMスナップショットの よくある使い方# mysql -uroot -p$password -e”FLUSH TABLES WITH READ LOCK”# mysql -uroot -p$password -e”SHOW SLAVE STATUS” > ./file# sync# lvcreate --snapshot -size=16G --name snap0 /var/lib/mysql# mysql -uroot -p$password -e”UNLOCK TABLES”後は、スナップショットのボリュームをmountして、データをコピーして、ボリュームを破棄すれば終わりです。
    34. 34. Innodb Hot Backの利点・欠点・特徴• いつでもバックアップできる手軽さ。• OSやプラットフォームに依存しない。• バックアップの内容はコマンド完了時のデータ。
    35. 35. スナップショットの利点・欠点・特徴• スナップショット用の領域を事前に準備しておく必 要がある。(ZFSの用に必要ない場合もある。)• 瞬時のスナップショットがとれる。• バックアップの内容はスナップショット実行時の データ。(狙った時間にバックアップが可能)
    36. 36. ここからはちょっと運用まわりのお話
    37. 37. 取得したバックアップを別のサーバにおいてますか?
    38. 38. 例えばメンテナンス時
    39. 39. メンテナンス後(こんな事ってありますよね?)
    40. 40. こんな時でも別のサーバに退避させていれば、メンテナンス後に メンテナンスの不具合が 発覚しても安心ですね。
    41. 41. バックアップの世代管理はできてますか?
    42. 42. 間違ってtableを更新した後にcronでバックアップの処理が走ってしまう事が あるかもしれません。
    43. 43. 世代管理ができていればこんな時も 安心して作業ができます。
    44. 44. 取得したバックアップからきちんと リストアできますか?
    45. 45. 障害が起こった際に、その時の最新の バックアップから戻しますよね。実際リストアしたら、エラーがでたり件数が違ってたりする事あるかもしれません。
    46. 46. バックアップしたデータはリストアしてみましょう。
    47. 47. まとめ• バックアップしたデータは別のサーバ においておく。• 世代管理をきちんとしておく。• リストアのテストはやっておく。
    48. 48. バックアップはいざという時自分を 助けてくれます。 なので手間を惜しまず安全なバックアップを心がけましょう。
    49. 49. ご清聴ありがとうございました。

    ×