CasualにMySQLリプレイス
この記事はMySQL Casual Advent Calendar 2014の8日目の記事です。
MySQL系のブログや投稿は初めてなので、軽く自己紹介。
Oracleで育ってMySQLやPostgreSQLもいじっている節操の無いDBAです。
現在はMySQLばっかりです。
10月にMySQLサーバーをリプレイス&5.5から5.6へのバージョンアップしたのでつらつらと書いてみます。
MySQL5.6が出てだいぶ立ち、参考になるようなブログや資料はたくさんあったので苦労はしませんでした。
ありがたやーありがたやー。
・Casualにmy.cnf
Casualだし、有名な方々の資料がググればいっぱいあるのでパラメータの意味までは書きません。
注意してたのはこのへんくらい。
sql_mode=''
explicit_defaults_for_timestamp=true innodb_online_alter_log_max_size = 1024M
sql_modeはデフォルト通りにしたかったけど、結局開発側の調整ができず断念。
innodb_online_alter_log_max_sizeは見積もりがちょっとわかんないけど、
コンシューマ向けサービスにデフォルトの128Mbyteは小さいかと思い
1Gbyteにしてみました。
後はこのへん。
binlog_format=ROW
binlog_rows_query_log_events = on
以前の設定がROWになっていたものの、オペミスなどの調査ができないしという事でmixedにする予定でした。
でも、binlog_rows_query_log_eventsが5.6から追加された事を知って
お、ROWでもいけるじゃーんとこちらにしてしまいました。
弊社、負の遺産triggerの管理やらいろいろとあって
definerを意識しなくて良いROWフォーマットにできたのはラッキーでした。
他にもいけてない設定修正やパフォチューなどはやったものの、
リプレイスに影響しそうなパラメータはこのくらいでした。
・CasualにMroonga
リプレイスする理由の一つは全文検索でした。
って事でMroonga入れちゃおうという事に決めました。
でもでも、旧サーバーはMySQL Enterprise契約していて、
新サーバーどうするか決めきれてなかったわけです。
んで困ったのがMySQL Enterpriseはsource公開していないというorz。
まあでも、MySQLのEnterpriseとCommunityってコアな部分はほとんど差が無いみたいだし
MySQLはbinary版若しくはRPMを使い、Mroongaのインストール時に指定するsourceは
対応するバージョンのCommunity版sourceを使えばできるんじゃないかなーと思って実施してみました。
インストールはbinary版。
Mroongaインストールのために同バージョンのMySQL sourceを用意する。
そしてMroogaインストール時にはそのsourceを指定する。
./configure PKG_CONFIG_PATH=/usr/local/lib/pkgconfig --with-mysql-source=/usr/local/src/mysql-5.6.20 --with-mysql-config=/usr/local/mysql/bin/mysql_config
結果は問題無し。
一応、Mroongaのマニュアルの2.7.13にはパッケージを使う事はできませんと書いていますが
この方法だと現状は使えるようです。
MySQL Enterpriseでも使えましたので自己責任の範疇で使用すれば良いかと思います。
ちなみに、Mroongaを入れたからと言って、
MySQLの機能に関してはMySQL Enterpriseの保障外にはならないそうです。
・Casualに実行
旧サーバー(5.5)から新サーバー(5.6)へ事前にレプリケーションを張っておいて
当日はSlaveはLVSの振分け、Masterはkeepaivedの設定で完了です。
5.6のMasterとなるサーバーについてはmysqldumpで作りました。
このタイミングじゃないとできない巨大テーブルの圧縮などが必要であったため
mysql_upgradeだと要件満たせなかったという理由があります。
はい、Casualにリプレイスとバージョンアップ完了です。
実際にはbackup環境の調整とかバージョン違いの比較テストとか
Casualじゃなくて面倒な作業や泥臭い作業もありましたけどね。
Calendar書いているような人が試した事無いかもしれないのはCasualにMroongaくらいですかね。
これからリプレイスなどが必要な人にお役に立てれば嬉しいです。
明日は・・・。あれ、明日書く人が決まってない。誰かよろしくお願いいたします。