mysql物理備份用的比較多的是innobackupex命令,備份常用,但對於里面的兩個參數slave-info、safe-slave-backup一直搞的不太明白,今兒親測了一下。
先解釋一下參數意義
--slave-info :在從庫進行備份時,該參數會在備份目錄下生成xtrabackup_slave_info文件,文件記錄主庫的binlog日志位置點。在進行數據庫恢復,搭建多從庫時都需要這個文件。
如果在主庫進行備份(在主庫備份的情況很少,把主庫惹怒了只能跑路了),該參數就不起作用了,主庫的備份目錄下始終會生成文件xtrabackup_binlog_info 記錄binlog日志位置點。
--safe-slave-backup:官方說備份時檢測從庫是否有打開的臨時表,如果沒有就stop SQL thread開始備份,備份完后start SQL thread;
如果有打開的臨時表就等,直到--safe-slave-backup-timeout超時。--safe-slave-backup-timeout默認300s,每3s進行一次重試檢查,共重試100次。
這個參數和--slave-info經常一起使用,為了保證數據的一致性。
測試結果
1. 在備份過程中從庫也會同步主庫的DML\DDL等操作,而且這些操作也會在從庫一並備份,可見並不是一開始就stop SQL thread的;
2. 在innodb文件拷貝完成后,會刷新所有的表,這個時候從庫會stop SQL thread,阻止主庫上的一切操作,並且記錄這個時候的binlog日志點到備份文件中,整個備份完成后,start SQL thread;
3. 對於不加--safe-slave-backup參數的備份,在innodb文件拷貝完成后,會刷新所有的表,並且記錄這個時候的binlog日志點到備份文件中;