MySQL репликация не работает - без ошибок
Я установил и хозяина и раба за книгой. Я запустил начальный LOAD DATA FROM MASTER; на раба, который работал просто отлично. Но когда я вставляю данные в мастер, они вообще не копируются в ведомый. Я уже пытался перезапустить как главный, так и подчиненный процессы mysqld, а также "подчиненный останов / запуск подчиненного" на ведомом устройстве. В чем дело?
Мастер
Config:
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog_do_db = pchelp
binlog_ignore_db = mysql
binlog_ignore_db = test
mysql> select * from pchelp.test_table;
+----+---------+
| id | sometxt |
+----+---------+
| 1 | x |
| 2 | x |
| 3 | y |
| 4 | z |
| 5 | p |
| 6 | i |
+----+---------+
6 rows in set (0.00 sec)
mysql> показать мастер статус \G
*************************** 1. row ***************************
File: mysql-bin.000009
Position: 106
Binlog_Do_DB: pchelp
Binlog_Ignore_DB: mysql,test
1 row in set (0.00 sec)
рабыня
Config:
server-id = 2
master-host = hidden.x.xx
master-user = replication
master-password = hidden
master-port = 3308
replicate_do_db = pchelp
mysql> select * from pchelp.test_table;
+----+---------+
| id | sometxt |
+----+---------+
| 1 | x |
| 2 | x |
| 3 | y |
| 4 | z |
| 5 | p |
| 6 | i |
+----+---------+
6 rows in set (0.00 sec)
mysql> показать статус раба \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: hidden.x.xx
Master_User: replication
Master_Port: 3308
Connect_Retry: 60
Master_Log_File: mysql-bin.000009
Read_Master_Log_Pos: 106
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000009
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: pchelp
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: 407
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:
1 row in set (0.01 sec)
Мастер
вставить в pchelp.test_table (id,sometxt) значения (7, 'q');
Query OK, 1 row affected (0.00 sec)
mysql> select * from pchelp.test_table;
+----+---------+
| id | sometxt |
+----+---------+
| 1 | x |
| 2 | x |
| 3 | y |
| 4 | z |
| 5 | p |
| 6 | i |
| 7 | q |
+----+---------+
7 rows in set (0.01 sec)
mysql> показать мастер статус \G
*************************** 1. row ***************************
File: mysql-bin.000009
Position: 106
Binlog_Do_DB: pchelp
Binlog_Ignore_DB: mysql,test
1 row in set (0.00 sec)
Раб (после вставки на мастера)
mysql> select * from pchelp.test_table;
+----+---------+
| id | sometxt |
+----+---------+
| 1 | x |
| 2 | x |
| 3 | y |
| 4 | z |
| 5 | p |
| 6 | i |
+----+---------+
6 rows in set (0.01 sec)
mysql> показать статус раба \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: hidden.x.xx
Master_User: replication
Master_Port: 3308
Connect_Retry: 60
Master_Log_File: mysql-bin.000009
Read_Master_Log_Pos: 106
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000009
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: pchelp
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: 407
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:
1 row in set (0.00 sec)
У кого-нибудь есть яркие идеи о том, что может пойти не так? Пользователь 'replication' имеет полные права (запускал это как на главном, так и на ведомом устройствах);
grant replication slave on *.* to replication@'%' identified by 'hidden';
GRANT ALL PRIVILEGES ON pchelp.* TO replication;
И снова LOAD DATA FROM MASTER; Команда сработала очень хорошо.. Я не понимаю.
1 ответ
Или binlog_do_db или же binlog_ignore_db вероятно, не работает так, как вы думаете, они делают. Вот барон Шварц, объясняющий почему. Я думаю, что прежде чем вы написали эту команду, вы либо написали USE mysql или же USE test, Поскольку эти две базы данных игнорируются, любые операторы, которые вы выполняете во время использования этой базы данных, даже если они записывают в другую базу данных, игнорируются.
Один намек на то, что мастер даже не написал, что INSERT заявление в двоичном журнале находится в выводе из вашего SHOW MASTER STATUS\G команда. Как до, так и после INSERT заявление:
Position: 106
Раб также имеет ту же позицию, которая объясняет, почему он считает, что работает нормально:
Read_Master_Log_Pos: 106
Предложение: удалить binlog_do_db а также binlog_ignore_db Варианты конфигурации. Если вам нужна фильтрация, сделайте это на слэйве (ах).