Mysql复制数据库更新不起作用

Mysql复制数据库更新不起作用

我一直在尝试在 MySQL 数据库中启动复制。我按照 MySQL 手册中的所有步骤来设置和配置复制。

http://dev.mysql.com/doc/refman/5.1/en/replication-howto.html

我可以毫无困难地开始复制。新插入的数据已正确复制。但过了一会儿,我发现虽然 INSERT 正在工作,但 UPDATE 却没有复制。因此,我复制的数据库包含的数据与第一次插入时一样。

我的主数据库位于装有 MySQL-5.1.56 的 UNIX 服务器上。从数据库在 Windows 中使用,使用装有 MySQL 5.5.8 的 WAMP 包。我也尝试过使用装有 WAMP5 的较低版本 MySQL 的从数据库,效果相同。

请分享您的想法和经验。谢谢。

答案1

在从属服务器上,您应该运行命令SHOW SLAVE STATUS

它将提供失败原因的信息;

mysql> show slave status\G


*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: master.db.sever
                Master_User: repl
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: mysql-bin.000154
        Read_Master_Log_Pos: 209998
             Relay_Log_File: mysqld-relay-bin.000480
              Relay_Log_Pos: 105395
      Relay_Master_Log_File: mysql-bin.000154
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes
            Replicate_Do_DB: 
        Replicate_Ignore_DB: mysql
         Replicate_Do_Table: 
     Replicate_Ignore_Table: 
    Replicate_Wild_Do_Table: 
Replicate_Wild_Ignore_Table: 
                 Last_Errno: 0         <-----here this value
                 Last_Error:              <-----here this value
               Skip_Counter: 0
        Exec_Master_Log_Pos: 209998
            Relay_Log_Space: 105395
            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
1 row in set (0.00 sec)

您对 感兴趣Last Errno,看看它确实是 0,即最后的错误消息内容。

假设你还可以检查你的复制用户是否对要复制到的表具有“INSERT”和“UPDATE”权限。此信息位于 mysql 数据库中,可以使用 SHOW GRANTS 语句进行检查;

mysql> show grants for root@'someserver.com';
+---------------------------------------------------------------------------------------+
| Grants for root@someserver                                       |
+---------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'oomeserver  ' WITH GRANT OPTION | 
+---------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

答案2

几个月前我解决了这个问题。问题是,我尝试只复制一个数据库,并在 master 中设置 binlog_do_dbbinlog-ignore-db选项以仅选择该数据库。但是,这遗漏了任何未使用 USE database 选择数据库而执行的语句。在从属中使用replicate-ignore-dbreplicate-do-db选项也会产生同样的效果。所以我最终通过使用从属replicate-wild-do-table中的选项解决了这个问题,参考这里.在从服务器的配置中添加以下内容。

replicate-wild-do-table=mydb.%

相关内容