11

变化莫测的mysqldump

 3 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzAwOTU4NzM5Ng%3D%3D&%3Bmid=2455771556&%3Bidx=1&%3Bsn=b778149109731888903bd01dead2dd2b
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

mysqldump是mysql官方机型逻辑备份的工具,作用非常多,可以进行全量备份,结合binlog还以做增量备份,也是做从库的利器,正确理解它非常有用。

今天列举我目前比较关心的几个点。

1:是否要锁表

默认的情况下它是锁表的,相当于调用—add-locks参数,在每个表备份前后增加LOCK TABLES和UNLOCK TABLES语句,这样数据库表就只读了。

去年我做副库的时候,以防万一,喜欢调用FLUSH TABLES WITH READ LOCK语句,让全库只读,实际上增加—lock-all-tables即可。

难道mysqldump备份的时候,数据库就不能DDL了?锁表是为了避免数据一致性的问题,尤其影响事务,比如东西卖出去了,钱没收到。

其实对于InnoDB来说,完全可以使用—single-transaction参数,这样能够进行一致性读,这样整个库就不会阻塞读写了。

2:做从库

结合—single-transaction,完全可以在主库上进行备份,备份后如何记录pos点呢?总不能手动记录,其实可以使用—master-data选项。

这样导出的sql语句中,会记录CHANGE MASTER TO语句,这样副库导入数据的时候就非常方便了。

3:基于从库备份

主库比较重要,尽量少的影响它,可以基于从库备份,—dump-slave类似于—master-data,也可以记录副库的pos点。

再结合—apply-slave-statements选项,这样连 STOP SLAVE 和START SLAVE 语句也记录到sql文件中了。

4:如何做增量备份

全量备份和增量备份很重要,在做完备份后,如果能够重新刷新二进制文件,这样将来出问题后,先全量恢复,然后基于新的二进制文件进行增量备份,为了达到这个目的,可以使用—flush-logs刷新二进制文件。

当然现实中没有那么完美,避免影响线上服务,以及避免导致数据完整性和一致性很重要。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK