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
Варианты конфигурации. Если вам нужна фильтрация, сделайте это на слэйве (ах).