Um jeito hacky seria esperar as transações terminarem:
mysql> FLUSH LOCAL TABLES;
Query OK, 0 rows affected (11.31 sec)
e depois obtendo um bloqueio de leitura:
mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (22.55 sec)
Agora, todas as consultas são bloqueadas (ou seja, esperam que o bloqueio seja liberado) até que sua sessão termine. Lembre-se - você ainda tem que esperar até que todas as transações terminem. Dependendo da sua carga de trabalho, isso pode demorar um pouco (ATUALIZANDO alguns milhões de linhas ...).
Você pode codificar isso na sua linguagem de script favorita.
Mas, falando sério, por que não usar Xtrabackup ? Ele cuida de um instantâneo consistente do mysql para você e você pode despejá-lo no sistema de arquivos, e o zfs / lvm faz um instantâneo dele.