binlog_ignore_db陷阱之備庫無法同步

myownstars發表於2015-07-02
問題描述:
新上線的主備從庫(5.5 + statement),自從備庫建立並且change master指向主庫後,就無法接受主庫新產生的資料;
備庫執行show slave status,IO和SQL thread都是running並且exec_master_postion和主庫的show master status輸出一致;
手工在主庫新建一個庫,新建表並插入然後提交,備庫可以同步;

解決思路:
檢視主庫的binlog,發現該專案上線10天左右,總共只產生一個binlog且只有不到1M的大小;
檢視binlog內容,myslqbinlog binlog >> /tmp/binlog.txt,發現記錄內容少的可憐,只有剛剛手工執行的建庫建表sql被記錄下來,再往前就是10天前搭建slave時執行的測試sql;
檢視主庫的my.cnf,發現有binlog_ignore_db=mysql,information_schema, performance_schema;
發現問題,當使用binlog_ignore_db選項時,必須採用use db; sql;的書寫方式,而類似insert into schema.table的語句則不會被記錄到binlog;
我們手工測試的時候採用了use db;sql的方式,所以備庫可以同步此資訊,而應用大部分採用schema.table的方式,故備庫無法同步主庫資料,因為主庫根本沒有記錄進binlog;

解決方法:
去除主庫的binlog_ingore_db;重新搭建備庫;
制定sql規範,禁止採用schema.table語法;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-1720066/,如需轉載,請註明出處,否則將追究法律責任。

相關文章