1.FLUSH TABLES WITH READ LOCK
大多数的备份软件在备份过程中都会执行FTWRL, 这个语句会获取一个全局读锁,从而保证数据处于一致的状态。
在大多数场景下,FTWRL获取读锁、unlock tables释放读锁的时间很短,所以通常热备份的锁在备份阶段是无感知的。
然而,FTWRL获取读锁时,需要找到一个所有的事务及查询都结束的时间点,如果获取读锁时mysql实例上有长事务或长查询,该语句将会被阻塞,FTWRL被阻塞反过来会阻塞数据库中后续的所有读写操作,甚至无法登录(因为登录时需要获取数据库中的表列表信息,除非使用-A选项),这种场景如下:
所以在FTWRL方式的备份执行前,需要确保数据库中没有长查询,否则会锁库。mydumper有两个选项--long-query-guard和--kill-long-queries可以在存在长查询时kill掉
--long-query-guard Set long query timer in seconds, default 60
--kill-long-queries Kill long running queries (instead of aborting)
另外,Innodb的表在备份中实际上不需要FTWRL,但是如果需要获取binlog位点,则需要FTWRL
2.mysqldump
mysqldump备份中除了--lock-