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)
私は何かを逃していますか
あなたが提示した出力は非常に混乱しています。一方、マスターは次のことを示します。
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
ファイル?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文字を超えていました。ブー!
私もこの問題に遭遇しました。根本的な原因は、マスターのserver_id=0
。 MariaDBには 特別な動作 for server_id=0
レプリケーションを機能させません。
Server_idは、複製グループ内のサーバーごとに一意である必要があります。 MariaDB 10.2.1までのデフォルトである0のままにすると、スレーブはマスターに接続せず、マスターはすべてのスレーブ接続を拒否します。
1に基づいてインデックスを作成し始めたとき、すべてがうまくいきました。