VPとSPIDERを使ったMySQL運用

10,930 views

Published on

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

No Downloads
Views
Total views
10,930
On SlideShare
0
From Embeds
0
Number of Embeds
40
Actions
Shares
0
Downloads
55
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

VPとSPIDERを使ったMySQL運用

  1. 1. VPとSPIDERを使った MySQL運用 2010/12/20 kamipo pixiv Inc.
  2. 2. みなさんMySQL使ってますか?
  3. 3. SPIDERって知ってますか?
  4. 4. 今日の話ShardingだけじゃないVP & SPIDER(Not Only Sharding)VP & SPIDERを運用ツールとして使う(ホスト間テーブル移動)
  5. 5. 自己紹介
  6. 6. 自己紹介上薗 竜太 (kamipo) MySQL / PerlIRC #mysql-casual@freenode #perl-casual@freenodeAdvent Calendar 2010 MySQL Casual Advent Calendar 2010 casual - JPerl Advent Calendar 2010
  7. 7.  About VP & SPIDERMySQLのストレージエンジンプラグイン VPはカラムごとにテーブルを垂直分割SPIDERはテーブルを複数ホストに水平分割斯波さんが作ってるwild-growth-ja.blogspot.comlaunchpad.net/spiderformysqllaunchpad.net/vpformysql
  8. 8. 今日の話ShardingだけじゃないVP & SPIDER(Not Only Sharding)VP & SPIDERを運用ツールとして使う(ホスト間テーブル移動)
  9. 9.  VPのデータコピー用UDF vp_copy_tables()
  10. 10.  VPのデータコピー用UDFCREATE TABLE t1 (a int(10) unsigned NOT NULL PRIMARY KEY,b int(10) unsigned NOT NULL) ENGINE=MyISAM;SELECT * FROM t1;+---+----+|a|b|+---+----+| 1 | 10 || 2 | 20 || 3 | 30 || 4 | 40 |+---+----+
  11. 11.  VPのデータコピー用UDFCREATE TABLE t2 (a int(10) unsigned NOT NULL PRIMARY KEY,b int(10) unsigned NOT NULL) ENGINE=InnoDB;CREATE TABLE t_vp (a int(10) unsigned NOT NULL PRIMARY KEY,b int(10) unsigned NOT NULL) ENGINE=VP CONNECTION zru "1", tnl "t1 t2";SELECT vp_copy_tables(t_vp, t1, t2);
  12. 12.  SPIDERテーブルを作るCREATE TABLE t_spd (a int(10) unsigned NOT NULL PRIMARY KEY,b int(10) unsigned NOT NULL) ENGINE=SPIDERCONNECTION host "db002", user "spider", tbl "t1";
  13. 13.  VPとSPIDERを組み合わせるCREATE TABLE t_vp (a int(10) unsigned NOT NULL PRIMARY KEY,b int(10) unsigned NOT NULL) ENGINE=VP CONNECTION zru "1", tnl "t1 t_spd";SELECT vp_copy_tables(t_vp, t1, t_spd);
  14. 14.  ホスト間テーブル移動ができるVPとSPIDERを使って任意のテーブルを別ホストに移行するhttp://d.hatena.ne.jp/kamipo/20100909/1284052005さっきの手順をスクリプトにしました
  15. 15.  スクリプト実行例$ mygrate_to --host new-db-host -u kamipo -d new_db table1CREATE TABLE `table1_new` LIKE `table1`;ALTER TABLE `table1_new` ENGINE SPIDERCONNECTION host "new-db-host", user "kamipo", database "ne"table1";CREATE TABLE `table1_dummy` LIKE `table1`;CREATE TABLE `table1_vp` LIKE `table1`;ALTER TABLE `table1_vp` ENGINE VPCONNECTION zru "1", tnl "table1_dummy table1_new";RENAME TABLE`table1_dummy` TO `table1_useless`,`table1` TO `table1_dummy`,`table1_vp` TO `table1`;SELECT vp_copy_tables(table1, table1_dummy, table1_new);RENAME TABLE`table1` TO `table1_vp`,
  16. 16. やってること移行先を参照するSPIDERテーブルを作るVPで移行元テーブルとSPIDERを束ねるvp_copy_tables()でデータコピーSPIDERテーブルを残してVPと移行元テーブルを削除
  17. 17. イメージ図
  18. 18. イメージ図
  19. 19. イメージ図
  20. 20. イメージ図
  21. 21.  とても簡単ですね
  22. 22. これを応用すると
  23. 23. イメージ図
  24. 24.  とても簡単ですね
  25. 25.  VPで気をつけたいことPRIMARY KEYがないとvp_copy_tables()は使えないCOMMENTは60文字までしか書けないのでCONNECTIONを併用する(MySQL 5.5では気にしなくて大丈夫)
  26. 26.  SPIDERで気をつけたいことXAトランザクションサポートをOFFに(spider_support_xa=0)データノードにはできるだけ最新のMySQL(5.1 >=)を使おう
  27. 27.  MySQL 5.0を使っていると…いろんなクエリがエラー(になったりする)REPLACE ~INSERT ~ ON DUPLICATE KEY UPDATE ~UPDATE ~ WHERE id = ?(MySQL 5.5対応版で修正される予定)
  28. 28. まとめShardingだけじゃないVP & SPIDER(Not Only Sharding)VP & SPIDERを運用ツールとして使う(ホスト間テーブル移動)とても簡単ですね
  29. 29. Enjoy !! ご清聴 ありがとうございました      

×