我一直在尝试在 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_db
和binlog-ignore-db
选项以仅选择该数据库。但是,这遗漏了任何未使用 USE database 选择数据库而执行的语句。在从属中使用replicate-ignore-db
和replicate-do-db
选项也会产生同样的效果。所以我最终通过使用从属replicate-wild-do-table
中的选项解决了这个问题,参考这里.在从服务器的配置中添加以下内容。
replicate-wild-do-table=mydb.%