カジュアルに
本番データを
開発環境に入れる
MySQL Casual Talks vol.9
@oinume
自己紹介
๏ Kazuhiro Oinuma (@oinume)
๏ MySQL user since v3.23
๏ CyberAgent,Inc
๏ Ameba Ownd
๏ 簡単にオシャレなWebサイトが作れる
๏ ブログっぽいデザイン、キュレーションメディアのよ
うなデザインなどカスタマイズも可能
๏ Starbucks, VOGUE, NIGO, etc…
カジュアルに
本番データを
開発環境に入れる
動機
๏ 開発環境でちゃんとしたテストデータを作るの
つらい
๏ UGCかつデザインのバリエーションが多い
๏ 本番環境ディプロイ後に発見される不具合たち
http://techlife.cookpad.com/entry/2014/10/03/110806
本番データを開発環境
に入れちゃおう
DBサーバー構成
App
Replication
ELB
Slave
Master
調査用
RDS
流れ
๏ 1. 調査用のDBからmysqldump
๏ 2. 開発環境のDBにインポート
๏ 3. データを開発環境向けにUPDATE
๏ 上記をJenkinsのJobで毎日動かす
๏ あえてレプリケーション方式にはしなかった
๏ リアルタイム...
補足
๏ mysqldumpしたファイルのサイズは3GB弱ぐらい
๏ 小規模!!
๏ mysqldump するのに3分ぐらい
๏ dumpファイルをインポートするのに20分ぐらい
๏ MySQLのバージョンは5.6.19
๏ 5.7じゃなくてす...
第一段階
mysqldumpしてインポートするだけなら簡単
問題
๏ mysqldumpしてからインポートするため、デー
タが一度消えてしまう
๏ →開発環境独自に作ったデータが消えてしまう
๏ 対策:開発環境独自のレコードのidを+10億に
๏ AUTO_INCREMENTをずらす
流れ v2
1. 調査用のDBからmysqldump
2. 開発環境DBでid >= 10億 のレコードをバックアップ
3. 1.の本番データを開発環境DBにインポート
4. データを開発環境向けにUPDATE
5. 2.でバックアップしたデー...
id >= 10億 のレコード
のみmysqldump
$ mysqldump -h {db_host} -P {db_port} 
-u{db_user} -p{db_password} 
̶no-create-info 
̶order-by...
AUTO_INCREMENT
のずらし方
๏ INFORATION_SCHEMAから各テーブルの現在
のAUTO_INCREMENT値を取得
๏ ALTER TABLE {table}
AUTO_INCREMENT=… でずらす
INFORMATION_SCHEMA
からAUの値を取得
SELECT
t.table_name, t.auto_increment
FROM
information_schema.tables AS t
INNER JOIN
informat...
INFORMATION_SCHEMA
からAUの値を取得
+--------------------------------+----------------+
¦ table_name ¦ auto_increment ¦
+--------...
AUTO_INCREMENTずらす
ALTER TABLE {table} AUTO_INCREMENT=…
よかったこと
๏ 不具合が本番ディプロイ前に発見しやすくなった
๏ 機能追加・修正のイメージがしやすくなった
๏ ユーザーと同等の体験をして開発できる
๏ 開発時に重いクエリに気付きやすくなった
๏ ALTER TABLEする場合にどのぐらい時...
カジュアルに本番データを
開発環境に入れちゃおう
ありがとう
ございました
カジュアルに本番データを開発環境に入れる #mysqlcasual
Upcoming SlideShare
Loading in...5
×

カジュアルに本番データを開発環境に入れる #mysqlcasual

301
-1

Published on

MySQL Casual Talks vol.9の発表資料

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

  • Be the first to like this

No Downloads
Views
Total Views
301
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

カジュアルに本番データを開発環境に入れる #mysqlcasual

  1. 1. カジュアルに 本番データを 開発環境に入れる MySQL Casual Talks vol.9 @oinume
  2. 2. 自己紹介 ๏ Kazuhiro Oinuma (@oinume) ๏ MySQL user since v3.23 ๏ CyberAgent,Inc ๏ Ameba Ownd
  3. 3. ๏ 簡単にオシャレなWebサイトが作れる ๏ ブログっぽいデザイン、キュレーションメディアのよ うなデザインなどカスタマイズも可能 ๏ Starbucks, VOGUE, NIGO, etc…
  4. 4. カジュアルに 本番データを 開発環境に入れる
  5. 5. 動機 ๏ 開発環境でちゃんとしたテストデータを作るの つらい ๏ UGCかつデザインのバリエーションが多い ๏ 本番環境ディプロイ後に発見される不具合たち
  6. 6. http://techlife.cookpad.com/entry/2014/10/03/110806
  7. 7. 本番データを開発環境 に入れちゃおう
  8. 8. DBサーバー構成 App Replication ELB Slave Master 調査用 RDS
  9. 9. 流れ ๏ 1. 調査用のDBからmysqldump ๏ 2. 開発環境のDBにインポート ๏ 3. データを開発環境向けにUPDATE ๏ 上記をJenkinsのJobで毎日動かす ๏ あえてレプリケーション方式にはしなかった ๏ リアルタイム性は不要 ๏ レプリが止まった時の対応が面倒そう
  10. 10. 補足 ๏ mysqldumpしたファイルのサイズは3GB弱ぐらい ๏ 小規模!! ๏ mysqldump するのに3分ぐらい ๏ dumpファイルをインポートするのに20分ぐらい ๏ MySQLのバージョンは5.6.19 ๏ 5.7じゃなくてすいません(́・ω・`)
  11. 11. 第一段階 mysqldumpしてインポートするだけなら簡単
  12. 12. 問題 ๏ mysqldumpしてからインポートするため、デー タが一度消えてしまう ๏ →開発環境独自に作ったデータが消えてしまう ๏ 対策:開発環境独自のレコードのidを+10億に ๏ AUTO_INCREMENTをずらす
  13. 13. 流れ v2 1. 調査用のDBからmysqldump 2. 開発環境DBでid >= 10億 のレコードをバックアップ 3. 1.の本番データを開発環境DBにインポート 4. データを開発環境向けにUPDATE 5. 2.でバックアップしたデータをリストア 6. 各テーブルのAUTO_INCREMENT値をずらす
  14. 14. id >= 10億 のレコード のみmysqldump $ mysqldump -h {db_host} -P {db_port} -u{db_user} -p{db_password} ̶no-create-info ̶order-by-primary ̶default-character-set=utf8mb4 ̶insert-ignore ̶where id >= 10億 {db_name} {table}
  15. 15. AUTO_INCREMENT のずらし方 ๏ INFORATION_SCHEMAから各テーブルの現在 のAUTO_INCREMENT値を取得 ๏ ALTER TABLE {table} AUTO_INCREMENT=… でずらす
  16. 16. INFORMATION_SCHEMA からAUの値を取得 SELECT t.table_name, t.auto_increment FROM information_schema.tables AS t INNER JOIN information_schema.columns AS c ON t.table_name = c.table_name WHERE t.table_schema = '{db_name}' AND c.table_schema = {db_name}' AND t.auto_increment IS NOT NULL AND c.column_key = 'PRI' /* 主キーのみ対象 */ ORDER BY t.table_name;
  17. 17. INFORMATION_SCHEMA からAUの値を取得 +--------------------------------+----------------+ ¦ table_name ¦ auto_increment ¦ +--------------------------------+-----------------+ ¦ blog_posts ¦ 900000 ¦ ¦ blog_post_categories ¦ 250000 ¦ ¦ pages ¦ 590000 ¦ … ※数字はフィクションです
  18. 18. AUTO_INCREMENTずらす ALTER TABLE {table} AUTO_INCREMENT=…
  19. 19. よかったこと ๏ 不具合が本番ディプロイ前に発見しやすくなった ๏ 機能追加・修正のイメージがしやすくなった ๏ ユーザーと同等の体験をして開発できる ๏ 開発時に重いクエリに気付きやすくなった ๏ ALTER TABLEする場合にどのぐらい時間がかか るか簡単に試せる
  20. 20. カジュアルに本番データを 開発環境に入れちゃおう
  21. 21. ありがとう ございました
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×