61. mysqldump 和 xtrabackup 实现原理?
1)mysqldump
mysqldump 是最简单的逻辑备份方式。
- 在备份 MyISAM 表的时候,如果要得到一致的数据,就需要锁表,简单而粗暴。
- 在备份 InnoDB 表的时候,加上
–master-data=1 –single-transaction
选项,在事务开始时刻,记录下 binlog pos 点,然后利用 MVCC 来获取一致的数据,由于是一个长事务,在写入和更新量很大的数据库上,将产生非常多的 undo ,显著影响性能,所以要慎用。 - 优点:简单,可针对单表备份,在全量导出表结构的时候尤其有用。
- 缺点:简单粗暴,单线程,备份慢而且恢复慢,跨 IDC 有可能遇到时区问题
2)xtrabackup
xtrabackup 实际上是物理备份+逻辑备份的组合。
- 在备份 InnoDB 表的时候,它拷贝 ibd 文件,并一刻不停的监视 redo log 的变化,append 到自己的事务日志文件。在拷贝 ibd 文件过程中,ibd文件本身可能被写”花”,这都不是问题,因为在拷贝完成后的第一个 prepare 阶段,xtrabackup 采用类似于 Innodb 崩溃恢复的方法,把数据文件恢复到与日志文件一致的状态,并把未提交的事务回滚。
- 如果同时需要备份 MyISAM 表以及 InnoDB 表结构等文件,那么就需要用
flush tables with lock
来获得全局锁,开始拷贝这些不再变化的文件,同时获得 binlog 位置,拷贝结束后释放锁,也停止对 redo log 的监视。