無料PHPプログラム

MySQL 5.1 リファレンスマニュアル :: 5 レプリケーション :: 5.4 レプリケーション ノートとヒント :: 5.4.5 レプリケーションのトラブルシューティング
« 5.4.4 レプリケーション FAQ

5.4.6 レプリケーション バグまたは問題を報告する方法 »
Section Navigation      [Toggle]
  • 5.4 レプリケーション ノートとヒント
  • 5.4.1 レプリケーション機能と既知問題
  • 5.4.2 MySQL バージョン間のレプリケーション互換性
  • 5.4.3 レプリケーション セットアップのアップグレード
  • 5.4.4 レプリケーション FAQ
  • 5.4.5 レプリケーションのトラブルシューティング
  • 5.4.6 レプリケーション バグまたは問題を報告する方法

5.4.5. レプリケーションのトラブルシューティング

指示に従って設定して、レプリケーションを設定しても機能しない場合は、エラー ログのメッセージをまず調べてください。多くの問題は、ログを調べることにより解決します。

エラー ログから問題の発生源が特定できない場合は、次の事柄を確かめます。

  • マスタのバイナリ ログで記録しているかどうかを、SHOW MASTER STATUS で確認する。記録していれば、Position はゼロ以外の値。記録してない場合、マスタの --log-bin および --server-id で設定を確認する。

  • スレーブが稼動しているかどうかを確認する。SHOW SLAVE STATUS を実行し、Slave_IO_Running および Slave_SQL_Runningの値が両方とも Yes であることを確認する。Yes ではない場合、スレーブ サーバを起動するときのオプションを確認する。ヒント:--skip-slave-start は、START SLAVE クエリが出るまで、スレーブ スレッドの起動を抑制します。

  • スレーブが稼動している場合は、マスタとの接続を確認する。SHOW PROCESSLIST を実行して、I/O スレッドと SQL スレッドを見つけ、その State カラムでの表示を確認する。詳細は 項5.5.1. 「レプリケーション実装の詳細」を参照してください。I/O スレッドが Connecting to master である場合は、次のことを確認する。

    • レプリケーション ユーザのマスタでの権限を確認する。

    • マスタ ホスト名が正当であるかどうかを調べ、適切なポートでマスタと接続しているかどうかを確認する。レプリケーションに使用するポートはクライアント ネットワーク通信のものと同一。(デフォルトは3306)ホスト名に関しては、適切な IP アドレスと対応しているかどうかを確認する。

    • マスタ - スレーブ間のネットワーク接続が無効化しているかどうかを確認する。コンフィギュレーション ファイルで skip-networking オプションを調べる。ここでコメントがある、ない場合は完全に削除された可能性がある。

    • マスタにファイアウォールもしくはIP フィルタのコンフィギュレーションなどを設定している場合は、MySQL で使用しているネットワーク ポートがフィルタされているかどうかを確認する。

    • ping もしくは traceroute/tracert を使用して、マスタがホストに達しているかどうか確認する。

  • スレーブが以前は稼動していて、そして停止した場合は、マスタで実行されたステートメントがスレーブで失敗している可能性がある。ノート:これは、マスタの適切なスナップショットが行われている場合には発生しません。または、スレーブ スレッドの外側のスレーブでデータを修正しなければ発生することはありません。スレーブが不意に停止した場合、バグである可能性、または既存のレプリケーション障害である可能性がある。詳細は 項5.4.1. 「レプリケーション機能と既知問題」 を参照。ノート: 原因がバグによるものである場合は、項5.4.6. 「レプリケーション バグまたは問題を報告する方法」 を参照し、どのように報告するか指示に従ってください。

  • マスタで実行したステートメントがスデーブで実行できない場合は、次の手順に従う。それができない場合は、スレーブのデータベースを削除し、新たなスナップショットをマスタからコピーする方法で、データベースの全体的な再同期化を行う。

    1. 影響する可能性のあるスレーブのテーブルがマスタのテーブルとは異なるかどうかを判断する。これを処理することにより、なにが起こるか、なにが必要になるかを検討する。そして、マスタのテーブルと同一になるようスレーブのテーブルを作成し、START SLAVE を実行する。

    2. 前述のステップが機能しない、または適用されない場合は、必要に応じて、マニュアルでの更新を安全に実行できるかどうかを検討し、マスタから次に出されるステートメントを無視する。

    3. マスタからの次のステートメントをスキップすると決めた場合は、以下のクエリを実行する。

      mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = N;
      mysql> START SLAVE;
      

      マスタから出される次のステートメントが AUTO_INCREMENT または LAST_INSERT_ID() を使用しない場合は、N の値は 1。そうでない場合は、その値は 2。ノート: AUTO_INCREMENT または LAST_INSERT_ID() を使用するステートメントの値が 2 である必要がある理由は、マスタのバイナリ ログで 2 イベントを処理するためです。

    4. スレーブがマスタと最初から完全に同期していた、そしてスレーブのスレッドの外側のテーブルを更新していないと確証できる場合は、バグによる不具合である可能性がある。ノート: 最新バージョンの MySQL を使用している場合は、その問題を報告してください。古いバージョンを使用している場合は、最新のプロダクション リリースにアップグレードし、それでもその問題が続くかどうかを確認する。

Copyright c 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates

無料CGI PHPスクリプト | 新着情報スクリプト | 営業日カレンダー | PHPマニュアル | MySQLマニュアル | PEARマニュアル

Copyright (c) 2010 jmcodex.com All rights reserved.