@ BillKarwin
после того, как я прочел другой проект: maxwell (https://github.com/zendesk/maxwell) ответ - да, mysql транзакционно записывает события вставки / обновления / удаления, где их окружают begin (тип события = Query) и COMMIT (тип события = Xid).
если читать основной двоичный журнал напрямую, может быть один угловой случай AFAIK, сбой сервера при записи каждой транзакции, тогда будут незакрытые события. так что мне просто нужно осветить это дело.
так что в основном мое решение ниже:
в самом начале, я получаю полные данные с помощью следующих действий:
flush tables tableA, tableB, tableC WITH READ LOCK;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
START TRANSACTION WITH CONSISTENT SNAPSHOT;
show master status;
//record binlog filename and position
UNLOCK TABLES;
//read complete data
commit;
с помощью вышеуказанного действия не только получить полные данные, но и записать соответствующую позицию в журнале.
каждый раз после этого я начинаю читать binlog из записи о положении в последний раз и с осторожностью получаю интересующие меня данные, чтобы позаботиться об упомянутом выше угловом случае, поскольку незакрытые события могут откатываться сервером mysql.
после чтения binlog, запишите позицию текущего чтения для следующей итерации.
@ BillKarwin, спасибо за помощь