您好,主要有两种备份方式,下面我们来介绍一下: 备份计划,mysqldump以及xtranbackup的实现原理
备份计划:视库的大小来定,一般来说100G内的库,可以考虑使用mysqldump来做,因为mysqldump更加轻巧灵活,备份时间选在业务低峰期,可以每天都进行全量备份;
100G以上的库,可以考虑用xtranbackup来做,备份速度明显要比mysqldump要快,一般是选择一周一个全备,其余每天进行增量备份,备份时间为业务低峰期;
备份恢复时间:物理备份恢复快,逻辑备份恢复慢;这里跟机器,尤其是硬盘的速率有关;逻辑导入时间一般是备份时间的5倍以上;
备份恢复失败如何处理:首先在恢复之前就应该做足准备工作,避免恢复的时候出错,比如说备份之后的有效性检查、权限检查、空间检查等,如果万一报错,再根据报错的提示来进行相应的调整;
mysqldump和xtrabackup实现原理:
mysqldump属于逻辑备份,加入-single-transaction选项可以进行一致性备份;后台进程会先设置session的事务隔离级别为RR(SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ),之后显式开启一个事务(START TRANSACTION),这样就保证了该事务里读到的数据都是事务时候的快照,之后再把表的数据读取出来;如果加上-master-data=1的话,在刚开始的时候还会加一个数据库的读锁(FLUSH TABLES WITH READ LOCK),等开启事务后,再记录下数据库此时binlog的位置(show master status),马上解锁,再读取表的数据;等所有的数据都已经导完,就可以结束事务;
xtrabackup属于物理备份,直接拷贝表空间文件,同时不断扫描产生的redo日志并保存下来;最后完成innodb的备份后,会做一个flush engine logs的操作,确保所有的redo log都已经落盘(涉及到事务的两阶段提交概念,因为xtrabackup并不拷贝binlog,所以必须保证所有的redo log都落盘,否则可能会丢最后一组提交事务的数据);这个时间点就是innodb完成备份的时间点,数据文件虽然不是一致性的,但是有这段时间的redo就可以让数据文件达到一致性;然后还需要flush tables with read lock,把myisam等其他引擎的表给备份出来,备份完后解锁,这样就做到了完美的热备。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。