我发现许多网站都在谈论这样做,但我错过了一些重要的细节。一般步骤是
- 跑
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 之类的工具进行热备份并拍摄备份快照,但我不想支付将所有数据写入第二个位置的成本,只是为了对其进行快照。