如何用mysqldump进行全量和时间点备份
mysqldump在mysql中用于逻辑备份,虽然速度不快,但非常灵活,有很多功能,灵活使用的化绝对是利器。
首先思考一个问题,mysql为什么要备份,主要还是数据安全性,比如主库挂了,数据不小心被删除了,所以全量备份非常重要。
是从主库还是副库进行全量备份呢?
1:从主库
主库比较重要,但其实备份的时候并不会影响数据库
mysqldump--host=--user=--password=--single-transaction--master-data=1--flush-logs--databases>~/db.log
—single-transaction参数能够报纸一致性读,不会锁表,也就是备份的时候不影响数据更新。
itdumpstheconsistentstateofthedatabaseatthetimewhenSTARTTRANSACTIONwasissuedwithoutblockinganyapplications.
因为一致性读,能够保证coordinates点的位置,即使备份时间很久,也能得出正确的同步位置点。
Whilea—single-transactiondumpisinprocess,toensureavaliddumpfile(correcttablecontentsandbinarylogcoordinates)
—master-data参数也很重要,导出的语句会包含CHANGEMASTERTO语句,包括备份语句同步到的二进制文件和位置点。
Usethisoptiontodumpamasterreplicationservertoproduceadumpfilethatcanbeusedtosetupanotherserverasaslaveofthemaster.ItcausesthedumpoutputtoincludeaCHANGEMASTERTOstatementthatindicatesthebinarylogcoordinates(filenameandposition)ofthedumpedserver.Thesearethemasterservercoordinatesfromwhichtheslaveshouldstartreplicatingafteryouloadthedumpfileintotheslave.
—flush-logs会强制重新生成一个新的二进制文件,这样恢复的时候会比较方便。
2:从副库
感觉上从副库备份更安全。
mysqldump--host=--user=--password=--dump-slave=1--flush-logs--apply-slave-statements--include-master-host-port--databases>~/db.log;
—dump-slave和—master-data参数很类似:
Thisoptionissimilarto—master-dataexceptthatitisusedtodumpareplicationslaveservertoproduceadumpfilethatcanbeusedtosetupanotherserverasaslavethathasthesamemasterasthedumpedserver.ItcausesthedumpoutputtoincludeaCHANGEMASTERTOstatementthatindicatesthebinarylogcoordinates(filenameandposition)ofthedumpedslave'smaster.Thesearethemasterservercoordinatesfromwhichtheslaveshouldstartreplicating.
记住一点它获取的是主库的binlogcoordinates(不是备份库的)
—dump-slavecausesthecoordinatesfromthemastertobeusedratherthanthoseofthedumpedserver
dump出来的语句会包含—Positiontostartreplicationorpoint-in-timerecoveryfrom。
—apply-slave-statements会让dump语句中自动包含start和stopslave语句。—include-master-host-port包含主库的连接信息。
必须记住一点,即使有—single-transaction语句,—dump-slave也会暂停mysql同步,也就是备份库的数据是落后于主库的,所以一般自动化脚本在备份的时候会先摘除备份库。
ThisoptioncausesmysqldumptostoptheslaveSQLthreadbeforethedumpandrestartitagainafter.
3:如何进行时间点恢复
没有实战过,首先基于最近的一次全量备份进行恢复,然后将后续的binlog文件导入(如果这些文件还在的话),所以副库最好也备份binlog语句。
如果数据被误删除了,将备份点(—flush-logs发挥作用了)到今天凌晨的binlog语句导入进来,或者找到安全的binlog位置点进行恢复。至于如何跳过“危险语句”是比较难控制的。
以上就是如何用mysqldump进行全量和时间点备份的详细内容,更多关于mysqldump进行全量和时间点备份的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。