Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
MySQLを4.0から5.0を
経由して5.6へバージョ
ンアップした話
@mapyo
自己紹介
● カラーミーショップのソフトウェアエンジニア
● 入社2年4ヶ月くらい
● みんなからは「ぼいらー」と呼ばれています
● ぺちぱー(PHPer)です
今日話すこと
1. 規模感・メンバー
2. 一度5.0を経由した理由
3. 5.0にするまでにやったこと
4. 本番を5.0、5.6にしていった時の流れ
5. 注意すべき事
6. まとめ
※ぺちぱーとして話すのでmysqlのチューニングとかダン...
規模感
● slaveの台数10台くらい
● mysqlの容量600G
● DBを見ているロールの数7個以上
● 素のSQLが散りばめられている
● 同じチームのソフトウェアエンジニア5〜6人くら
い
● 全部終わったのが1年弱くらい
メンバー
● ぺちぱー(僕)
● インフラ周りめっちゃすごい人(途中でシニアエ
ンジニアに。)
アドバイザー的なポジション
● @hsbt(チーフエンジニア)
● ボブさん
今日話すこと
1. 規模感・メンバー
2. 一度5.0を経由した理由
3. 5.0にするまでにやったこと
4. 本番を5.0、5.6にしていった時の流れ
5. 注意すべき事
6. まとめ
※ぺちぱーとして話すのでmysqlのチューニングとかダン...
一度5.0を経由した理由
● 4.0から一気に5.6に移行するとなにか起きた時
の影響が大きそう。
● mysql4.0→mysql5.6へ直接レプリケーションが
出来ませんでした。
master
4.0
この辺、どういう流れでバージョンアップ...
今日話すこと
1. 規模感・メンバー
2. 一度5.0を経由した理由
3. 5.0にするまでにやったこと
4. 本番を5.0、5.6にしていった時の流れ
5. 注意すべき事
6. まとめ
※ぺちぱーとして話すのでmysqlのチューニングとかダン...
5.0にするまでにやった事
● 5.6の開発環境を作る
● 開発環境の4.0のデータを5.6に突っ込む
● 開発環境で4.0(今までのDBと)5.6を簡単に切
り替えられる仕組み作り
● その他開発環境の整備
● 5.6で開発してもらうように布...
開発環境の4.0データを5.6に突っ込む
● sedスクリプトをかます
cat dump.sql 
| sed -e 's/timestamp(14)/timestamp/' 
| sed -e 's/TYPE=/ENGINE=/' 
> du...
5.6で開発してもらうように布教
メリット
● 4.0では動くが、5.6では動かないクエリがこれ以
上増えない
● 現状、5.6で動かないクエリがあったら教えても
らえる。(^^♪
テスト
● デキるテスターの人にお願い☆
その間僕は。。
● 修正が必要なsqlを調べる
● ググる
● 分かった修正箇所の横展開
修正する
1. 直さなきゃいけない部分がみつかる
2. 直す(4.0でも5.6でも動くように)
3. 他の開発メンバーにこういうパターン注意してく
ださいリストを作ってお知らせ
全部で5パターンくらい
不要なレコードの削除
● とあるテーブルの容量が200Gくらい!!
● ダンプ、リストアの時間大。
古いレコードが消せそうだったので消した。
150Gくらい減った。。。
今日話すこと
1. 規模感・メンバー
2. 一度5.0を経由した理由
3. 5.0にするまでにやったこと
4. 本番を5.0、5.6にしていった時の流れ
5. 注意すべき事
6. まとめ
※ぺちぱーとして話すのでmysqlのチューニングとかダン...
本番を5.0化していった時の流れ1
Step1
mysql5.0をmasterからのレプリケーションに設定
※appサーバからは見ない。
INSERT,UPDATEが
5.0でエラーにならないかをチェッ
ク可能
slave
4.0
master...
本番を5.0化していった時の流れ2
Step2
mysql5.0をslaveに設定
※appサーバから見るようにする!
slave
4.0
master
4.0
slave
4.0
slave
5.0
SELECTが5.0でエラーに
ならないか...
※僕が作業したのは 1と4だけです(*´‫)●`ڡ‬
※slaveを見ているロールは 5つくらい
※1マラソン終わるのに2〜3日くらい
本番を5.0化していった時の流れ3
Step3
slave全台を5.0にしていく
slave
5.0
mas...
本番を5.0化していった時の流れ3
Step4
メンテを入れてslave1台をmasterに昇格!
slave
5.0
master
4.0
slave
5.0
slave
5.0
メンテ終わった後は何事もなかった
かのように動いてたぜ!
※m...
本番を5.6化していった時の流れ
そして、5.6に!
今までの作業をもう1週やる。。。
1. 5.6をレプリケーションにつなげる
2. appサーバから見るようにして様子見
3. slave全台を5.6にする。
4. メンテを入れてslaveを...
今日話すこと
1. 規模感・メンバー
2. 一度5.0を経由した理由
3. 5.0にするまでにやったこと
4. 本番を5.0、5.6にしていった時の流れ
5. 注意すべき事
6. まとめ
※ぺちぱーとして話すのでmysqlのチューニングとかダン...
注意すべき事!
移行途中にmasterに直接SQLを流す時は、
最新バージョンでかならず検証する!
slave
4.0
master
4.0
slave
5.0
slave
5.0
4.0→OK, 5.0→エラーのSQL
1. masterでは...
まとめ 〜5.6にするまでにやった事〜
1. 開発環境を用意して、テストする
2. 開発メンバーに周知する
3. Slaveから5.0にしていって、Masterを昇格させ
る
4. 上の作業を、5.6にする為にもう1回やる
5. 終わり!
所感1
● 期間が長かった
○ 修正パターンが見つかる→全ロールでgrepして、後は
目視確認して修正箇所を見つける
○ slaveの1台バージョンアップするのに数日。
● インフラ周りめっちゃすごい人はすごかった。
○ 本番データのダンプ、リ...
所感2
● デキるテスターの人がいた
○ 安心感
○ バグが出そうな部分を熟知
● やれる事はやった。後はバグが出たら全力で直
すという心意気が大事。
○ ホントに大丈夫なのか?という不安
○ メンテ終了後、大規模な障害が起きたら怖い!
○ 気...
最後に
どういうsqlを修正したか?は
僕のブログをご覧下さい。
http://goo.gl/YXeozS
以上です!!
Upcoming SlideShare
Loading in …5
×

Mysqlを4.0から5.0を経由して5.6へバージョンアップした話

8,026 views

Published on

第1回ペパボテックカンファレンスでの発表資料です
http://pepabo.connpass.com/event/13208/

Published in: Technology

Mysqlを4.0から5.0を経由して5.6へバージョンアップした話

  1. 1. MySQLを4.0から5.0を 経由して5.6へバージョ ンアップした話 @mapyo
  2. 2. 自己紹介 ● カラーミーショップのソフトウェアエンジニア ● 入社2年4ヶ月くらい ● みんなからは「ぼいらー」と呼ばれています ● ぺちぱー(PHPer)です
  3. 3. 今日話すこと 1. 規模感・メンバー 2. 一度5.0を経由した理由 3. 5.0にするまでにやったこと 4. 本番を5.0、5.6にしていった時の流れ 5. 注意すべき事 6. まとめ ※ぺちぱーとして話すのでmysqlのチューニングとかダンプ、リ ストアする時のテクニック的な話は出て来ません!
  4. 4. 規模感 ● slaveの台数10台くらい ● mysqlの容量600G ● DBを見ているロールの数7個以上 ● 素のSQLが散りばめられている ● 同じチームのソフトウェアエンジニア5〜6人くら い ● 全部終わったのが1年弱くらい
  5. 5. メンバー ● ぺちぱー(僕) ● インフラ周りめっちゃすごい人(途中でシニアエ ンジニアに。) アドバイザー的なポジション ● @hsbt(チーフエンジニア) ● ボブさん
  6. 6. 今日話すこと 1. 規模感・メンバー 2. 一度5.0を経由した理由 3. 5.0にするまでにやったこと 4. 本番を5.0、5.6にしていった時の流れ 5. 注意すべき事 6. まとめ ※ぺちぱーとして話すのでmysqlのチューニングとかダンプ、リ ストアする時のテクニック的な話は出て来ません!
  7. 7. 一度5.0を経由した理由 ● 4.0から一気に5.6に移行するとなにか起きた時 の影響が大きそう。 ● mysql4.0→mysql5.6へ直接レプリケーションが 出来ませんでした。 master 4.0 この辺、どういう流れでバージョンアップしていくかは後で詳しく説明 します。 slave 5.6 master 4.0 slave 5.0 slave 5.6
  8. 8. 今日話すこと 1. 規模感・メンバー 2. 一度5.0を経由した理由 3. 5.0にするまでにやったこと 4. 本番を5.0、5.6にしていった時の流れ 5. 注意すべき事 6. まとめ ※ぺちぱーとして話すのでmysqlのチューニングとかダンプ、リ ストアする時のテクニック的な話は出て来ません!
  9. 9. 5.0にするまでにやった事 ● 5.6の開発環境を作る ● 開発環境の4.0のデータを5.6に突っ込む ● 開発環境で4.0(今までのDBと)5.6を簡単に切 り替えられる仕組み作り ● その他開発環境の整備 ● 5.6で開発してもらうように布教する ● テスト、修正 ● 不要レコードの削除
  10. 10. 開発環境の4.0データを5.6に突っ込む ● sedスクリプトをかます cat dump.sql | sed -e 's/timestamp(14)/timestamp/' | sed -e 's/TYPE=/ENGINE=/' > dump5.sql
  11. 11. 5.6で開発してもらうように布教 メリット ● 4.0では動くが、5.6では動かないクエリがこれ以 上増えない ● 現状、5.6で動かないクエリがあったら教えても らえる。(^^♪
  12. 12. テスト ● デキるテスターの人にお願い☆ その間僕は。。 ● 修正が必要なsqlを調べる ● ググる ● 分かった修正箇所の横展開
  13. 13. 修正する 1. 直さなきゃいけない部分がみつかる 2. 直す(4.0でも5.6でも動くように) 3. 他の開発メンバーにこういうパターン注意してく ださいリストを作ってお知らせ 全部で5パターンくらい
  14. 14. 不要なレコードの削除 ● とあるテーブルの容量が200Gくらい!! ● ダンプ、リストアの時間大。 古いレコードが消せそうだったので消した。 150Gくらい減った。。。
  15. 15. 今日話すこと 1. 規模感・メンバー 2. 一度5.0を経由した理由 3. 5.0にするまでにやったこと 4. 本番を5.0、5.6にしていった時の流れ 5. 注意すべき事 6. まとめ ※ぺちぱーとして話すのでmysqlのチューニングとかダンプ、リ ストアする時のテクニック的な話は出て来ません!
  16. 16. 本番を5.0化していった時の流れ1 Step1 mysql5.0をmasterからのレプリケーションに設定 ※appサーバからは見ない。 INSERT,UPDATEが 5.0でエラーにならないかをチェッ ク可能 slave 4.0 master 4.0 slave 4.0 slave 5.0 app
  17. 17. 本番を5.0化していった時の流れ2 Step2 mysql5.0をslaveに設定 ※appサーバから見るようにする! slave 4.0 master 4.0 slave 4.0 slave 5.0 SELECTが5.0でエラーに ならないか? NewRelicが活躍! app
  18. 18. ※僕が作業したのは 1と4だけです(*´‫)●`ڡ‬ ※slaveを見ているロールは 5つくらい ※1マラソン終わるのに2〜3日くらい 本番を5.0化していった時の流れ3 Step3 slave全台を5.0にしていく slave 5.0 master 4.0 slave 5.0 slave 5.0 以下のマラソン×10回くらい。。 1. slave1台をappサーバから外す 2. 5.0にリストア 3. masterからレプリケーション 4. appサーバから見るように app
  19. 19. 本番を5.0化していった時の流れ3 Step4 メンテを入れてslave1台をmasterに昇格! slave 5.0 master 4.0 slave 5.0 slave 5.0 メンテ終わった後は何事もなかった かのように動いてたぜ! ※masterしか見ていないロールもあるので、多 少不安はあった。 ここまでで約半年くらい。。 slave 5.0 master 5.0 slave 5.0 master 4.0
  20. 20. 本番を5.6化していった時の流れ そして、5.6に! 今までの作業をもう1週やる。。。 1. 5.6をレプリケーションにつなげる 2. appサーバから見るようにして様子見 3. slave全台を5.6にする。 4. メンテを入れてslaveをmasterに昇格 ※性能のいいサーバを購入したので slaveの台数を減らせた! ※僕のやった作業は appサーバの接続先切り替えとメンテの作業くらい。。
  21. 21. 今日話すこと 1. 規模感・メンバー 2. 一度5.0を経由した理由 3. 5.0にするまでにやったこと 4. 本番を5.0、5.6にしていった時の流れ 5. 注意すべき事 6. まとめ ※ぺちぱーとして話すのでmysqlのチューニングとかダンプ、リ ストアする時のテクニック的な話は出て来ません!
  22. 22. 注意すべき事! 移行途中にmasterに直接SQLを流す時は、 最新バージョンでかならず検証する! slave 4.0 master 4.0 slave 5.0 slave 5.0 4.0→OK, 5.0→エラーのSQL 1. masterでは成功 2. slaveでエラー発生! 3. レプリケーションが止まる! 4. ヤバイ!!
  23. 23. まとめ 〜5.6にするまでにやった事〜 1. 開発環境を用意して、テストする 2. 開発メンバーに周知する 3. Slaveから5.0にしていって、Masterを昇格させ る 4. 上の作業を、5.6にする為にもう1回やる 5. 終わり!
  24. 24. 所感1 ● 期間が長かった ○ 修正パターンが見つかる→全ロールでgrepして、後は 目視確認して修正箇所を見つける ○ slaveの1台バージョンアップするのに数日。 ● インフラ周りめっちゃすごい人はすごかった。 ○ 本番データのダンプ、リストアの検証(※600G) ○ 5.0、5.6サーバを構築しまくっていた(slave10台) ○ 細かい設定値まわりとかいろいろ
  25. 25. 所感2 ● デキるテスターの人がいた ○ 安心感 ○ バグが出そうな部分を熟知 ● やれる事はやった。後はバグが出たら全力で直 すという心意気が大事。 ○ ホントに大丈夫なのか?という不安 ○ メンテ終了後、大規模な障害が起きたら怖い! ○ 気持ちを切り替えて、前を向く!
  26. 26. 最後に どういうsqlを修正したか?は 僕のブログをご覧下さい。 http://goo.gl/YXeozS
  27. 27. 以上です!!

×