問(wèn)題描述:
slave不能同步master的一張表,其他表都正常。
排查:
show slave status;看都正常。
mysqlbinlog 打開(kāi)中繼日志看,發(fā)現(xiàn)沒(méi)有這張表的insert語(yǔ)句,證明sql沒(méi)有從master同步過(guò)來(lái)。
去master看binlog,發(fā)現(xiàn)也沒(méi)有這張表的insert操作,手動(dòng)執(zhí)行一下alter table是能寫(xiě)進(jìn)binlog的。
去查master的my.cnf,發(fā)現(xiàn)有個(gè)這樣的配置:
replicate-ignore-db = mysql
binlog-ignore-db = mysql
意思是在mysql庫(kù)里做的操作不寫(xiě)binlog,slave也過(guò)濾掉mysql庫(kù)里的操作。
基本上確定是這個(gè)配置的問(wèn)題了,實(shí)驗(yàn)了下use mysql;后,去更新其他庫(kù)里的表,發(fā)現(xiàn)沒(méi)有寫(xiě)binlog。
注銷(xiāo)掉這兩個(gè)配置,重啟了master,重新做了slave,一切恢復(fù)正常。
看來(lái)應(yīng)用在insert的時(shí)候,不一定是在當(dāng)前庫(kù)中操作。所以為防止主從數(shù)據(jù)不一致,最好所有的庫(kù)都進(jìn)行同步。