web-dev-qa-db-ja.com

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

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)

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

8
Soyeed

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

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ファイル?
5
Shlomi Noach

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
Dagelf

私もこの問題に遭遇しました。根本的な原因は、マスターのserver_id=0。 MariaDBには 特別な動作 for server_id=0レプリケーションを機能させません。

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

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

1
Ryan Goodfellow