我发现许多网站都在谈论完全做到这一点,但是我缺少一些重要的细节。一般步骤是
- 跑
FLUSH TABLES WITH READ LOCK
- 拍摄ZFS快照
- 跑
UNLOCK TABLES
各种来源都报告说,我正在使用的InnoDB实际上并不兑现FLUSH
。MySQL用户手册指出FLUSH TABLES...FOR EXPORT
,InnoDB 有一个变体,但需要单独指定每个表,而不是备份整个数据库。我宁愿避免单独指定每个表,因为表的列表很可能与实际存在的表不同步。
我遇到的另一个问题是我打算做类似的事情mysql -h"$HOST" -u"$USERNAME" -p"$PASSWORD" --execute="FLUSH TABLES WITH READ LOCK"
。但是,这将在会话退出后立即释放锁。这是有道理的,但也很烦人,因为在拍摄快照时我需要保持读取锁定。
我的另一个想法是使用Percona XtraBackup之类的工具进行热备份并拍摄备份快照,但是我不希望为将所有数据写入第二个位置而进行快照的费用。