binlog-do-db和replicate-do-db有什么区别?

时间:2017-06-08 09:34:51

标签: mysql mariadb master-slave

我是MySQL Master-Slave的初学者。

我已经阅读了两个教程。

  1. How to Setup MariaDB (Master-Slave) Replication

  2. Setup MariaDB Master-Slave Replication

  3. 在第一篇教程中。这让我觉得

    [mysqld] Master section
    
    log-bin
    
    server_id=1
    
    replicate-do-db=employees
    
    bind-address=192.168.0.18
    
    
    [mysqld] SLAVE Section
    
    server_id=2
    replicate-do-db=employees
    

    但在第二个教程中,它告诉我

    [mysqld] Master
    server_id=1
    log-basename=master
    log-bin
    binlog-format=row
    binlog-do-db=unixmen
    
    [mysqld] Slave
    server-id = 2
    replicate-do-db=unixmen
    

    为什么我应该LOCK TABLES和mysqldump sql,然后导入它?

    FLUSH TABLES WITH READ LOCK;
    

1 个答案:

答案 0 :(得分:14)

免责声明:为了让事情变得简单和不混乱,我谈到了一个简单的1 Master-1 Slave设置。没有锁链,没有主人,无论什么......

你的第一个教程是错误的,它应该是binlog-do-db。

复制就像这样。

主服务器将所有事务写入其二进制日志 从站从主站二进制日志中读取事务并将它们写入其中继日志 只有在那之后,从服务器才会执行其中继日志中的语句。

binlog-do-db使指定DB的主写只语句进入其二进制日志。

replicate-do-db使得slave只读取中继日志中的语句,这些语句适用于指定的数据库。

replicate-do-db对主服务器没有影响,因为没有要读取的中继日志。

LOCK TABLES部分存在,因此数据是一致的。它可以防止在备份数据仍在进行过程中修改主服务器上的数据。

您可以从奴隶上的此备份恢复数据库,因为当您设置奴隶时,您并不总是从新的开始。因此,它只是在两台服务器上提供相同的数据基础,然后告诉从站主站的事务坐标是什么,瞧,你可以开始复制。您也可以在转储数据后解锁主服务器。只需确保在二进制日志中的语句因日志轮换而丢失之前及时启动从属服务器。