Hi kristian,

currently, a relaylog is immediately purged after it be completely replayed 
(relay_log_purge=1). and if IO thread crashes, we should delete all relay logs 
and fetch master binlog again from exec_master_log_pos/file 
(relay_log_purge=ON). I think that make a greap waste of disk IO especially to 
cloud disk. The critical problem is that there is no method to know the 
original binlog filename on master of a event in relaylog.

Actually we can know a relaylog event's original binlog offset on master, but 
we can't know the original binlog filename. so why not forcely add a rotate 
event or any other new type event which contained the original master binlog 
filename at begin of a relay log. as I know two different master binlogs' 
events wouldn't contained in one relay log, so the original binlog filename of 
a relaylog's events is only one. 

If we want to know a relaylog event's original binlog filename/position, we can 
get original filename from the begin of relaylog, and get original binlog 
offset from event's "end log pos". oppositely, if we know a event's binlog 
filename/end positon on master, wo also can quickly find it in slave's relay 
log.

That can make many benefits, firstly no need to delete all relay logs and fetch 
master binlogs again when IO thread crashed, because we can get exact last 
read_master_log_filename/position from last relay log. secondly, there is no 
need to use GTID in 1 vs n replication failover Scenario (Gtid must set 
log_slave_updates=ON in mysql 5.6, which increase disk IO load), if master 
crashes, other slaves can get lost events for the newest slave's relay log, as 
long as relay log don't be purged, then promotes the newest slave to master.

Thanks.

2014-11-26



nanyi607rao
_______________________________________________
Mailing list: https://launchpad.net/~maria-developers
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~maria-developers
More help   : https://help.launchpad.net/ListHelp

Reply via email to