mysqlのレプリケーションは成功したが、スレーブがレプリケーションしていない


8

mysqlのマスター/スレーブ構成を作成しましたが、問題はありません。「マスターステータスの表示」スレーブではエラーは表示されません。これは出力です

 Slave_IO_State: Waiting for master to send event
                  Master_Host: 109.123.100.58
                  Master_User: replica
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 106
               Relay_Log_File: relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          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: 106
              Relay_Log_Space: 106
              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
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 

ただし、マスターの変更時にスレーブでのレプリケーションが発生していないようです

マスターに。マスターステータスを表示

+------------------+----------+--------------+-------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB        |
+------------------+----------+--------------+-------------------------+
| mysql-bin.000001 |   639495 |              | mysql,informationschema |
+------------------+----------+--------------+-------------------------+

スレーブのSHOW PROCESSLISTの利回り

+-----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------+------------------+
| Id  | User        | Host      | db   | Command | Time  | State                                                                 | Info             |
+-----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------+------------------+
| 174 | system user |           | NULL | Connect | 25777 | Waiting for master to send event                                      | NULL             |
| 175 | system user |           | NULL | Connect | 25777 | Has read all relay log; waiting for the slave I/O thread to update it | NULL             |
| 199 | root        | localhost | NULL | Query   |     0 | NULL                                                                  | show processlist |
+-----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------+------------------+
3 rows in set (0.00 sec)

私は何かを逃していますか


2つの質問。マスターとスレーブで同じバージョンのMySQLを実行していますか?マスター/スレーブの構成に別のサーバーIDが設定されていますか?編集:私たちもいっぱいを見ることができSHOW MASTER STATUSます、トップビットが欠落していると思います。

申し訳ありませんが、間違いはトップビットがSHOW SLAVE STATUS \ Gの出力でした。スレーブイールドのマスターステータスを表示+ ------------------ + ---------- + ------------- -+ ------------------------- + | ファイル| 位置| Binlog_Do_DB | Binlog_Ignore_DB | + ------------------ + ---------- + -------------- + ---- --------------------- + | mysql-bin.000004 | 106 | | mysql、情報スキーマ| + ------------------ + ---------- + -------------- + ---- --------------------- +
Soyeed

見てはいけないSHOW MASTER STATUS奴隷。この情報は、スレーブがさらに下流にある他のスレーブのマスターとしても機能している場合を除き、関係ありません。
マイケル-sqlbot 2013年

あなたの場合はSHOW PROCESSLIST、マスタ上の、あなたは、スレーブからの着信接続を見ていますか?あなたがすべき。また、私がしようとするだろうSTOP SLAVE IO_THREAD;、その後START SLAVE IO_THREAD;、スレーブ上の出力方法を見てSHOW SLAVE STATUS、すべての場合(スレーブ上で)、変更されます。
マイケル-sqlbot 2013年

回答:


5

あなたが提示した出力は非常に混乱しています。一方、マスターは次のことを示します。

mysql-bin.000001   639495 

スレーブPROCESSLISTは、レプリケーションが機能していることを示します(IOスレッドはマスターに接続され、SQLスレッドは待機しています)。

奴隷SHOW SLAVE STATUSは再びすべてが順調だと主張していますが、主人の立場は106です。

これらすべての出力はほぼ同時に発行されますか?そうでない場合、それらは価値がありません。

次のことを確認します。

  • 明白です:109.123.100.58本当にあなたのマスターですか?
  • SHOW PROCESSLISTマスターリストに接続が下の奴隷によって作られreplicaたユーザ?
  • server-idマスターとスレーブに異なる設定がありますか?
  • ファイルに何かreplicate-do-*またはreplicate-ignore-*設定がありmysql.cnfますか?

ええ、同時に出力されます。1.はい、109.123.100.58がマスターです。2.いいえ3.はい4.いいえ マスターショーにプロセスリストを表示する '+-------+------+-----------+------+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +-------+------+-----------+------+---------+------+-------+------------------+ | 23243 | root | localhost | NULL | Query | 0 | NULL | SHOW PROCESSLIST | +-------+------+-----------+------+---------+------+-------+------------------+
Soyeed

3
2-いいえ?分ごとに奇妙な。私はあなたのスレーブが実際に正しいマスターに接続されているかどうか非常にわかりません。
Shlomi Noach 2013年

1
先端をありがとう!私の場合、M-> S1-> S2レプリケーションがあり、S2サーバーIDがMサーバーIDと一致しました。
アーロンR.

1

binlog-ignore-dbを使用するよりも、スレーブ側のフィルタリングを使用する方が優れています。私は同様の状況で行き詰まりました、はい、それを理解するのに丸一日かかりました:

大きなものを逃した!!!

の違い

--replicate-do-db=
--replicate-do-table=

スレーブ側。そして

--replicate-do-table='mydb.%'

-do-tableでは、私にはうまくいきませんでした。私は使用しなければなりませんでした

--replicate-do-db='mydb'

これはワイルドカードでうまくいったと思います

--replicate-wild-do-table='mydb.%'

...次に、複数のマスターから同じテーブルを複製する方法を理解します。わかりました。MySQLはネイティブではサポートしていません。MariaDB 10にはあります。

また、最初に別の問題が発生しました。パスワードが32文字を超えていました。ブー!


1

私もこの問題に遭遇しました。根本的な原因は、マスターのことserver_id=0でした。MariaDBには、レプリケーションが機能しない特別な動作server_id=0あります。

server_idは、複製グループ内のサーバーごとに一意である必要があります。MariaDB 10.2.1までのデフォルトである0のままにすると、スレーブはマスターに接続せず、マスターはすべてのスレーブ接続を拒否します。

1に基づいてインデックスを作成し始めたとき、すべてがうまくいきました。


-2

どのDBを複製するかをスレーブに指示しませんでした。変数Replicate_Do_DBは空です。

行を追加してみてください

replicate-do-db = name_of_db( "name_of_db"は複製するデータベースの名前)

my.cnf(スレーブ上)で、スレーブサーバーを再起動します。

編集:私は私の答えが正しい解決策だとは思わない、その間;-)

おそらく代わりにこのページを見てください:http : //dev.mysql.com/doc/refman/5.1/en/replication-problems.html


私はそれが正しいとは思いません。639495バイトがマスターのbinlogに記録されていることがわかります

問題は、レプリケーションが機能しない理由です-何かがバイナリログに書き込まれた場合ではありません。通常、コマンドSHOW MASTER STATUSには詳細情報は表示されません。

申し訳ありませんが、..マスターステータスのイールドを表示+------------------+----------+--------------+-------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+-------------------------+ | mysql-bin.000004 | 106 | | mysql,informationschema | +------------------+----------+--------------+-------------------------+
Soyeed

また、replicate-do-dbを指定しないと、すべてのデータベースが複製されると言われました。代わりに私が持っていましたentry binlog_ignore_db = mysql binlog_ignore_db = informationschema
Soyeed

1
複製するスキーマをデータベースに指示する必要がないため(このデフォルトはすべてのスキーマです)、この回答のアドバイスには従わないでください。これにより、複製が壊れる可能性が高くなります。(99.999%)ですべてのスキーマを複製します。
Shlomi Noach 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.