mysql 复制 1x 主,1x 从

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] => 
)

答案1

根据您的从属状态,复制已启动并正常运行。可能被破坏的是您的期望。MySQL 复制是从主服务器到从属服务器的单向复制,无需在从属服务器上验证一致性。第三方在从属服务器上更改的行将不是复制回主服务器,但显然会影响从服务器数据的一致性。

在大多数情况下,如果不执行额外的手动检查,你不会注意到从服务器上的数据行发生了变化 - 请查看Percona 工具包(以前称为 Maatkit)的工具确实有助于完成这项任务。

您还应该从配置中删除 replicate_do_db,因为这个过滤选项可能没有达到你想象的效果除此之外,它应该可以立即使用。如果不行,请发布用于验证数据复制的 SQL 语句。

答案2

在我的网站上,我连接到从属服务器并插入了一些行,但它们没有出现在主服务器上......

这只会在多主复制中发生。在这种设置中,两个都服务器是主服务器。这很复杂,而且很容易出错。您不会想在第一次使用多主服务器。

因此,在正常的主服务器 -> 从服务器设置下,您无法将行插入到从服务器中。从服务器对您来说是只读的。新数据进入从服务器的唯一方法是通过从主服务器复制数据。

...反之亦然。

如果您在主服务器上插入行,而这些行没有出现在从服务器上,则存在问题。在我看来,从服务器状态很好,并且没有延迟。我看不出有什么原因会导致它无法工作,除非您插入了除 之外的其他数据库test_db

相关内容