MySQL репликации 1x мастер, 1x раб

Я только что настроил один главный и один подчиненный сервер, но он не работает..

На своем веб-сайте я подключаюсь к подчиненному серверу и вставляю несколько строк, но они не отображаются на главном и наоборот. Что не так?

Вот что я сделал:

Master:

-> /etc/mysql/my.cnf

[mysqld]
log-bin         = mysql-master-bin
server-id=1
# bind-address      = 127.0.0.1
binlog-do-db        = test_db


Slave:

-> /etc/mysql/my.cnf

[mysqld]
log-bin         = mysql-slave-bin
server-id=2
# bind-address      = 127.0.0.1
replicate-do-db     = test_db


Slave:

terminal 0 >
mysql> STOP SLAVE; // and drop tables


Master:

terminal 1 >
mysql> CREATE USER 'repl_slave'@'slave_ip' IDENTIFIED BY 'repl_pass';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl_slave'@'slave_ip';
mysql> FLUSH PRIVILEGES;
mysql> FLUSH TABLES WITH READ LOCK;
-- leave terminal open

terminal 2 >
shell> mysqldump -u root -pPASSWORD test_db --lock-all-tables > dump.sql

mysql> SHOW MASTER STATUS;


Slave:

terminal 3 >
shell> mysql -u root -pPASSWORD test_db < dump.sql

terminal 0 >
mysql> CHANGE MASTER TO
mysql> MASTER_HOST='master_ip',
mysql> MASTER_USER='repl_slave',
mysql> MASTER_PASSWORD='repl_pass',
mysql> MASTER_PORT=3306,
mysql> MASTER_LOG_FILE='mysql-master-bin.000003',   // terminal 2 > SHOW MASTER STATUS
mysql> MASTER_LOG_POS=4,                        // terminal 2 > SHOW MASTER STATUS
mysql> MASTER_CONNECT_RETRY=10;

mysql> START SLAVE;

mysql> SHOW SLAVE STATUS;

Вот рабский статус:

Array
(
    [Slave_IO_State] => Waiting for master to send event
    [Master_Host] => xx.xx.xx.xx
    [Master_User] => repl_slave
    [Master_Port] => 3306
    [Connect_Retry] => 10
    [Master_Log_File] => mysql-master-bin.000003
    [Read_Master_Log_Pos] => 106
    [Relay_Log_File] => mysqld-relay-bin.000002
    [Relay_Log_Pos] => 258
    [Relay_Master_Log_File] => mysql-master-bin.000003
    [Slave_IO_Running] => Yes
    [Slave_SQL_Running] => Yes
    [Replicate_Do_DB] => test_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] => 414
    [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] => 
)

2 ответа

Решение

В соответствии с вашим ведомым статусом, репликация запущена и работает правильно. Что может быть сломано ваши ожидания. Репликация MySQL - это односторонняя репликация от главного к подчиненному без проверки согласованности на ведомом устройстве. Строки, измененные на ведомом устройстве третьей стороной, не будут реплицированы обратно на ведущее устройство, но, очевидно, будут влиять на согласованность данных ведомого устройства.

В большинстве случаев вы не заметите измененные строки данных на ведомом устройстве, не выполнив дополнительных ручных проверок - взгляните на Percona Toolkit (ранее Maatkit) для инструментов, которые облегчают эту задачу.

Вам также следует удалить replicate_do_db из вашей конфигурации, так как эта опция фильтрации, вероятно, не делает то, что вы думаете. Помимо этого, он должен работать из коробки. Если это не так, пожалуйста, опубликуйте свои операторы SQL, используемые для проверки репликации данных.

На моем веб-сайте я подключаюсь к подчиненному серверу и вставляю несколько строк, но они не отображаются на главном...

Это произойдет только при репликации с несколькими хозяевами. В этом виде настройки оба сервера являются мастерами. Это сложно и легко делать ошибки. Вы не захотите делать мультимастер в первый раз.

Таким образом, при обычной настройке master -> slave вы не можете вставлять строки в slave. Раб только для чтения для вас. Единственный способ, которым новые данные попадают в ведомое устройство, - это репликация их с главного устройства.

... и наоборот.

Если вы вставили строки в ведущее устройство, а они не появились в ведомом устройстве, возникла проблема. Статус раба выглядит хорошо для меня, и нет никаких задержек. Я не вижу ничего, что могло бы заставить его не работать, если вы не вставили в какую-либо другую базу данных, кроме test_db,

Другие вопросы по тегам