Your SlideShare is downloading. ×
MySQL のオンラインバックアップ & リカバリ
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

MySQL のオンラインバックアップ & リカバリ

2,670

Published on

MySQL のバックアップとリカバリについて軽くまとめました。

MySQL のバックアップとリカバリについて軽くまとめました。

Published in: Engineering
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,670
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
20
Comments
0
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. MySQL のオンラインバックアップ & リカバリ 2014/05/24 teru @TKS #3
  • 2. アジェンダ • バックアップ • mysqldump コマンド • 推奨オプション • 便利なオプション ! • リカバリ • ダンプのリストア方法 • mysqlbinlog コマンド • バイナリログの適用 (ポイントインタイムリカバリ) 2
  • 3. バックアップ編 3
  • 4. mysqldump • MySQL に付属している論理バックアップツール ! • SQL 文が羅列されたものが出力される 4 DROP TABLE IF EXISTS `sometable`; CREATE TABLE `sometable` ( ... INSERT INTO `sometable` VALUES ( ... INSERT INTO `sometable` VALUES ( ... INSERT INTO `sometable` VALUES ( ... INSERT INTO `sometable` VALUES ( ...
  • 5. 対象テーブルの指定 • mysqldump somedb • somedb 内のテーブルすべてダンプ ! • mysqldump somedb sometable1 sometable2 • somedb.sometable1, somedb.sometable2 のみバッ クアップ ! • mysqldump --ignore-table=somedb.gomitable1 somedb • somedb.gomitable1 は無視する • オプションを繰り返すことで複数指定可 5
  • 6. デフォルト有効のオプション • mysqldump は、デフォルトで "--opt" が有効になっている。 • "--skip-opt" で無効にできる。 ! • "--opt" は下記と同義 • --add-drop-table • --add-locks • --create-options • --disable-keys • --extended-insert • --lock-tables • --quick 6
  • 7. デフォルト有効のオプション • --extended-insert • INSERT 一文に、複数のレコードが入る • メリット: リストア速度が早い ! ! ! ! • --skip-extended-insert • 1 レコード 1 INSERT になる。 • メリット: ダンプファイルをいじりやすい 7 INSERT INTO `sometable` VALUES (1,1980,'piyopiyo','','2014-05-24 13:44:51'),(2,1981,'hogehoge','','2014-05-24 13:45:05'), (3,1982,'hugahuga','','2014-05-24 14:44:27');
  • 8. デフォルト有効のオプション • --lock-tables • テーブルのダンプ前、ロックを掛ける • ダンプ中はそのテーブルの更新ができない ! • --skip-lock-tables • ロックしない • サーバ移行時の事前テストなど、カジュアルにダンプ ができる 8
  • 9. 推奨オプション • --single-transaction • ダンプが単一トランザクションになる • ダンプ開始時点の断面がダンプできる • かつ、ダンプ中更新可能 • ※ トランザクション対応 DB でのみ可能 (InnoDB など) ! • --master-data=2 • ダンプファイル内に、バイナリログのポジションがコメントで入る • ポイントインタイムリカバリに使える 9 -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=1457;
  • 10. 推奨オプション • --order-by-primary • ダンプを主キーでソートして出力する • InnoDB のリストアが爆速になる ! ! ! ! ! ! • 444MBのダンプファイルのリスト時 • 引用: http://d.hatena.ne.jp/sh2/20120122 10 innodb_buffer_pool_size
  • 11. おまけ: クラスタインデックス 11
  • 12. 僕がいつも使うオプション ! • mysqldump --default-character-set=binary --opt -c somedb • MyISAM の場合 ! • mysqldump --default-character-set=binary --opt -c --single-transaction --master-data=2 --order-by- primary somedb • InnoDB の場合 • binlog 出しとく 12
  • 13. その他知っとくと便利なオプション • --where="deleted_at >= '2013-10-01 00:00:00'" • ダンプ時に where 句指定で吐ける • 「"」「'」 に注意 ! • --no-data • テーブルの定義のみダンプ • CREATE TABLE, CREATE INDEX などのみ ! • --no-create-info • データのみダンプ • INSERT のみ 13
  • 14. リストア編 14
  • 15. ダンプファイルのリストア方法 ! • cat somedb.sql | mysql somedb • 普通の方法 ! • cat somedb.sql | throttle -M 1 | mysql somedb • throttle コマンドで 1MB/s に制限 • 負荷を掛けたくない時に有用 15
  • 16. mysqlbinlog コマンド ! • バイナリログから SQL 構文を作るコマンド ! • 出力されたファイルは、ダンプファイルと同じようにリ ストアに使用できる。 ! • 文法 • mysqlbinlog [OPTIONS] mysql-bin.000001 ... 16
  • 17. mysqlbinlog オプション • --start-position=4 • --stop-position=123456 • バイナリログの読み込み開始・終了のポイントを、ポ ジションで指定 ! • --start-datetime="2013-01-01 12:34:56" • --stop-datetime="2013-01-01 12:34:56" • バイナリログの読み込み開始・終了のポイントを、時 刻で指定 ! • --database=somedb • バイナリログの中で、対象のデータベースを指定 17
  • 18. (再掲) 推奨オプション • --single-transaction • ダンプが単一トランザクションになる • ダンプ開始時点の断面がダンプできる • かつ、ダンプ中更新可能 • ※ トランザクション対応 DB でのみ可能 (InnoDB など) ! • --master-data=2 • ダンプファイル内に、バイナリログのポジションがコメントで入る • ポイントインタイムリカバリに使える ! ! ! 18 -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=1457;
  • 19. mysqlbinlog 使用例 ! ! ! ! ! • 状況の例 • --master-data=2 で取得したバックアップがある ! • 15:00:00 にバルス (DROP TABLES) してしまった ! • バックアップと tmp.sql でバルス直前の状態まで戻せ る 19 $ mysqlbinlog --start-position=1457 --stop-datetime="2014-05-24 14:59:00" mysql-bin.000001 > tmp.sql -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=1457;
  • 20. 以上 20

×