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

刺身タンポポ職人なう

文系女子大生がエンジニアとして就職してその後

MySQLのレプリケーションメモ

MySQLレプリケーション

レプリケーション

  • データをリアルタイムに他の場所へ複製すること

シングルマスター、マルチスレーブ

  • マスタ(Master)とは
    • クライアントからの更新と参照の両方の種類のクエリを受け付けるサーバー
  • スレーブ(Slave)とは
    • クライアントからの更新は受けつけず、データの更新はマスタとの連携のみで行う役割のサーバー

レプリケーションされるデータの内容

  • 1つのUPDATE文があるとして、それが1件更新するUPDATE文でも、100万件更新するUPDATE文でも、マスタからスレーブへ渡されるのは1つのUPDATE文
  • メリット
    • マスタとスレーブ間でのやり取りが少なくて住む
  • デメリット
    • 実行時まで結果がわからないくクエリをレプリケートすると、マスタとバックアップとで保持するデータが異なってしまう可能性がある
    • ORDER BY句を伴わないLIMIT句の場合、異なってしまう場合がある
      • UNIWQUEなどの制約に引っかからない場合エラーがでない
    • 5.1.5以降は行単位でレプリケーションが行われている
    • 5.1.8以降ではSQL単位でのレプリケーションをするが、場合に応じて行単位で行ってくれる

レプリケーション開始時に必要なデータ

  • スナップショット(フルダンプ+ポジション情報)
    • mysqldを停止してから、MyISAMInnoDBのデータファイルがあるMySQLのデータディレクトリをまるごとtarなどでコピー
      • --excludeoptionで不要なファイル(バイナリログ)等をコピー対象から除外しておく
    • LVM(Logical Volume Manager)を使っているなら、そのスナップショットを使う
    • mysqldを停止した場合、そのときのマスタのバイナリログ化言うの名前をメモしておく
      • ファイル名が「mysql-bin.00002」の場合は、mysqld起動時にバイナリログは次の番号のもの(「mysql-bin.00003」)に切り替えられる

下記本のメモです