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日志点到备份文件中;