読者です 読者をやめる 読者になる 読者になる

恥知らずのウェブエンジニア -web engineer, shameless

これは一歩を踏み出すことができない者たちのブログ

もう一度向き合うmysql(2)〜レプリケーションとか〜

前回の続き。
もう一度向き合うmysql(1) - 恥知らずのウェブエンジニア


引き続き、これをもとに自分用めもを。

MySQL徹底入門 第3版 ?5.5新機能対応?

MySQL徹底入門 第3版 ?5.5新機能対応?

レプリケーション

レプリケーションの流れ

  1. マスター側、更新情報があったらバイナリログを出力
  2. スレイブ側、マスターに接続して更新あったら、それをリレーログに保存。
  3. スレーブ側、リレーログに出力した情報をデータベースに保存

※スレーブはどの情報まで複製したかをmaster.infoに保存。
 スレーブ再起動後はこのファイルの情報をもとに再開する。

バイナリログの形式
  • STATMENT

└更新系のSQL文をそのまま保存

  • ROW

└更新された後のレコードデータを保存
 ログファイル大きくなりがち、STATMENTより実行が速い

  • MIXED

└通常はSTATMENTで、STATMENTでは正確に記録できないクエリの場合はROWで保存


レプリケーションの設定方法

  • マスター側:my.cnfに
server-id=数値
log-bin=ファイル名
  • スレーブ側:my.cnfに
server-id=数値

※言わずもがなserver-idは重複しないようにん

  • データ同期

直接data_dirのデータをコピーするか、
mysqldumpでデータをダンプしてコピー
この時、show master status;でログポジションをメモっておく

  • スレーブでマスターを指定する
mysql>CHANGE MASTER TO
       ->MASTER_HOST='マスターのホスト名、IP'
       ->MASTER_USER='マスターに接続するユーザ'
       ->MASTER_PASSWORD='パスワード'
       ->MASTER_LOG_FILE='バイナリログファイル名'
       ->MASTER_LOG_POS='レプリケーション開始するポジション'

※mysqldumpを使うときに、
master-dataオプションを指定するとログファイル、ポジションをdumpに含めるので指定する必要はなし
※--master-data=1 //change master文あり。ポジション付き。
 --master-data=2 //change master文、ポジションをコメントアウト。デフォルトはこちら

  • スレーブ開始、確認
mysql>START SLAVE;
mysql>SHOW SLAVE STATUS¥G;
※SLAVE_IO_Running,SLAVE_SQL_RunningがYESになってること確認

※SLAVE_IO_RunningがNOの場合は、マスターからバイナリログを取得できてない状態
※SLAVE_SQL_RunningがNOの場合は、リレーログからのデータ反映に失敗している状態
※スレーブでSQLでエラーになった時、単純にSQLをスキップしたい時は、「SET GLOBAL sql_slave_skip_counter=1;」


準同期レプリケーション

通常レプリケーションは非同期、
準同期レプリケーションは、
マスターに更新があった際、スレーブのリレーログに書き込んでからクライアントに応答を返す。
もちろんその分遅くなる。なんか使わなそう。
設定する時は、対象のプラグインを入れる必要あり。



さらに続編へ続く。




感謝致します。
f:id:ogataka50:20140621221017j:plain