开发者社区> 问答> 正文

MySQL备份谁能教教我哇!

已解决

哈哈

展开
收起
可乐大侠 2021-10-01 16:50:53 756 0
1 条回答
写回答
取消 提交回答
  • 网络规划设计师、敏捷专家、CISP、ITSS服务经理、ACA全科目、ACP4项、ACE、CBP、CDSP、CZTP等。拥有 PRINCE2 Foundation/Practitioner、CCSK、ITIL、ISO27001、PMP等多项国际认证。 专利5+、期刊10+、知识产权师。核心期刊审稿人。
    采纳回答

    您好,主要有两种备份方式,下面我们来介绍一下: 备份计划,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等其他引擎的表给备份出来,备份完后解锁,这样就做到了完美的热备。
    
    2021-10-01 16:51:51
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像