mysqlレプリケーションが機能しない

mysqlレプリケーションが機能しない

2 つのサーバー A と BI が固定データベース DBA と DBB の 2 つのサーバー間でレプリケーションを確立しようとしていますが、機能しません。構成テーブルは更新されません。なぜですか?

Master:(/etc/my.cnf)
server-id=4233865
log-bin=mysqld-bin
log-error=mysql-bin.err
relay-log=mysqld-relay-bin

Slave:(/etc/my.cnf)
symbolic-links=0
server-id=1359390567
relay-log-index = slave-relay-bin.index
relay-log   = slave-relay-bin
replicate-do-db=DBA,DBB

スレーブ状態表示

Slave_IO_State  Waiting for master to send event
Master_Host     10.0.0.163
Master_User     repl
Master_Port     3306
Connect_Retry   60
Master_Log_File     mysqld-bin.000007
Read_Master_Log_Pos     770800
Relay_Log_File  slave-relay-bin.000017
Relay_Log_Pos   770947
Relay_Master_Log_File   mysqld-bin.000007
Slave_IO_Running    Yes
Slave_SQL_Running   Yes
Replicate_Do_DB     DBA,DBB
Replicate_Ignore_DB     
Replicate_Do_Table  
Replicate_Ignore_Table  
Replicate_Wild_Do_Table     
Replicate_Wild_Ignore_Table     
Last_Errno  0
Last_Error  
Skip_Counter    0
Exec_Master_Log_Pos     770800
Relay_Log_Space     1134838
Until_Condition     None
Until_Log_File  
Until_Log_Pos   0
Master_SSL_Allowed  No
Master_SSL_CA_File  
Master_SSL_CA_Path  
Master_SSL_Cert     
Master_SSL_Cipher   
Master_SSL_Key  
Seconds_Behind_Master   0

マスターステータス

mysql> show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysqld-bin.000007 |   608837 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

マスターによって作成されたレプリケーションユーザーを使用して、スレーブからログインできます。私が与えたユーザーのためにREPLICATION_SLAVE on % PERMISSIONS

私は何を逃したことがありませんか?No Error in Logs

修正する

プロセスIDユーザーホストデータベースコマンド時間ステータスSQLクエリ

(キル) (2) (システムユーザー) (なし) (接続) (149410) (ホストがイベントを送信するのを待っている) (---)

Kill 1 System User None Connect -38185 スレーブがすべてのリレーログを読み取り、スレーブ I/O スレッドが更新されるのを待っています。 ---

ご覧のとおり、SQLクエリは常に---なぜですか?

ベストアンサー1

デバッグ目的でスレーブに対するフルアクセス権を持つユーザーを使用します。コピーが成功したら、コピーユーザー権限をリセットしようとしています。

私が見る主な問題は、スレーブがマスターになると予想するログの場所ですが、770800マスターの実際の場所はです608837。奴隷はしなければならないいいえ所有者より先に。

スレーブを停止し、マスターをロックし、マスターをダンプし、スレーブからマスターを復元し、両方でレプリケーションを設定し、スレーブをロック解除してレプリケーション構成プロセスを「再開」する必要があります。私はこれをしなければなりません。毎回複製が中断されました。 :(

アップデート1:

以下は、私がしばらく前にMySQLレプリケーションについて書いたいくつかのメモです。

複製を有効にする:

残念ながら、SLAVEを起動するバイナリログの静的場所を取得するためにMASTERデータベースを完全にロックしないと、MySQLレプリケーション設定を完了できません。

この構成の練習の範囲は、/etc/my.cnfファイルを正しく構成し、MASTERおよびSLAVEサーバーで適切なアカウントを設定した後にMASTERおよびSLAVEを構成することです。

MySQLレプリケーションを設定するには、MASTERで2つのターミナルセッションとSLAVEで1つを開く必要があります。ターミナル1と2は、MASTERで開かれる2つのセッションを意味します。ターミナル 3 は SLAVE セッションを参照します。

  1. 第1ターミナル:

    • MySQLへの接続所有者コマンドラインクライアントを使用してください。
    • クエリの実行FLUSH TABLES WITH READ LOCK;
    • これにより完全にロックされます。所有者
    • MYSQL クライアントを終了しないでください。
  2. 第2ターミナル:

    • mysqldumpコピーするデータベースでaを実行します。
    • データベースダンプが共有ストレージにあるか、スレーブサーバーにコピーされていることを確認してください。
    • MySQLへの接続所有者コマンドラインクライアントを使用してください。
    • クエリの実行SHOW MASTER STATUS;
    • 書いて降りる文書そして場所リスト。
  3. 第3ターミナル:

    • MASTERから取得したデータベースダンプを復元します。
    • MySQLへの接続奴隷コマンドラインクライアントを使用してください。
    • クエリの実行CHANGE MASTER TO MASTER_HOST='<master host>', MASTER_USER='<replication user>', MASTER_PASSWORD='<replication password>', MASTER_LOG_FILE='<Filename obtained from Terminal 2>', MASTER_LOG_POS=<Position obtained from Terminal 2>;​
    • これでレプリケーションを有効にする必要がありますが、ログの場所は増やすべきではありません。
    • 複製が正しく開始されない場合は、必ずmysqldログファイルを確認してください。
    • 実装するSHOW SLAVE STATUS;
    • 列が一致するMaster_Log_Fileことを確認Read_Master_Log_Pos文書そして場所第2ターミナルへの列です。
  4. 第1ターミナル:

    • クエリが入ったら、クエリを実行してSHOW MASTER STATUS;メモします。文書そして場所リスト。
  5. 第3ターミナル:

    • HOW MASTER STATUS;ターミナル1で実行直後に合計列をSHOW SLAVE STATUS;比較します。Master_Log_FileRead_Master_Log_Pos文書そして場所それぞれ第1ターミナルに位置しています。

手順4と5を何度も繰り返します。ファイルと場所がうまく一致すると、レプリケーションは正常に有効になります。おめでとうございます。

レプリケーションを無効にする: レプリケーションの無効化所有者/etc/my.cnf、その行を編集してコメントする必要があります(該当する行の詳細については、参考資料を参照)。

SLAVEでレプリケーションを無効にするには、クエリを実行する必要がありますSTOP SLAVE;

スレーブレプリケーションを再度有効にするには、クエリを実行する必要がありますSTART SLAVE;

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

複製が中断される場合があります。これは通常、UPDATEクエリの急増によって引き起こされます。複製が中断されると、マスターサーバーとスレーブサーバーのバイナリログが指数関数的に増加し始めます。クエリの急増の根本原因をすぐに特定して削除しないと、通常MySQLサーバーのディスク容量は10時間以内に完全に使い果たされます。

ストレージが枯渇しないようにする最速の方法は、MASTERでMySQLレプリケーションを完全に無効にし、SLAVEでMySQLを終了することです。

ストレージがいっぱいになったら、マスターとスレーブでレプリケーションを無効にしてから、マスターとスレーブからすべてのmysql-binファイルとmysqld-relay-binファイルを削除します。 RPMベースのMySQLディストリビューションを使用する場合、これらのファイルは通常/var/lib/mysqlにあります。バイナリログファイルの名前はグローバルmy.cnfで設定可能であるため、ファイルが存在しない場合は設定ファイルを確認してください。

破損が発生してレプリケーションが無効になった後にレプリケーションを再度有効にするには、この資料の前半のすべての詳細を完了する必要があります。

引用:

おすすめ記事