Encontrei vários sites falando sobre fazer exatamente isso, mas estou perdendo alguns detalhes importantes. Os passos gerais são
- Corre
FLUSH TABLES WITH READ LOCK
- Tire o instantâneo do ZFS
- Corre
UNLOCK TABLES
Várias fontes relatam que o InnoDB, que estou usando, na verdade não honra a FLUSH
. O manual do usuário do MySQL observa que existe uma FLUSH TABLES...FOR EXPORT
variante para uso com o InnoDB, mas isso requer a especificação de cada tabela individualmente, em vez de fazer backup de todo o banco de dados. Eu preferiria evitar especificar cada tabela individualmente, porque há uma chance decente de que a lista de tabelas fique fora de sincronia com as tabelas que realmente existem.
O outro problema que tenho é que planejei fazer algo assim mysql -h"$HOST" -u"$USERNAME" -p"$PASSWORD" --execute="FLUSH TABLES WITH READ LOCK"
. No entanto, isso interrompe o bloqueio imediatamente após a saída da sessão. Isso faz sentido, mas também é bastante irritante, pois preciso segurar o bloqueio de leitura quando tiro minha captura instantânea.
Minha outra idéia é fazer um backup quente usando uma ferramenta como Percona XtraBackup e tirar instantâneos do backup, mas eu prefiro não pagar o custo de gravar todos os meus dados em um segundo local apenas para capturá-los.