MySQL Bugs: #72682: Replication MBR halts - stored procedure from unreplicated schema

MySQL Bugs: #59135: replicate-wild-do-table: cross-database updates and create SPs break replication

如果从库只使用了replicate-wild-do-table,那么当主库创建存储过程时,从库会不同步,报错信息如下:

150104 15:15:46 [ERROR] Slave SQL: Error 'Unknown database 'fdd_statistics'' on query. Default database: 'fdd_statistics'. Query: 'CREATE DEFINER=`esf_frame`@`%` PROCEDURE `YUNYING_BASIC_DATA_SECOND_BOSS`(IN startDate date)

BEGIN

set @datetime = startDate; 

insert into fdd_report_data_second_boss


如果使用replicate-do-db则可以解决该问题,但是这个选项无法处理跨库处理数据库的问题.

还有一种做法是使用row level的日志格式来解决(一般情况下使用的时mixed混合模式),但是row level的日志对二进制文件的并发压力非常大,一般不推荐,除非你的MySQL压力比较小.

解决方案有几种.

1.如果你的业务里没有跨库操作,则可以在从库使用replicate-do-db选项指定需要同步的数据库.

2.在从库新建和主库一样名字的database,可以是空库.这样你会发现存储过程会被同步过来.可以使用show procedure status;进行查看.