mysqlbinarylog - уникальность table_id в TABLE_MAP_EVENT
Я пытаюсь вручную декодировать двоичный формат mysql ROW. Каждому событию обновления / вставки / удаления предшествует TABLE_MAP_EVENT.
Это событие содержит table_id
, Я использую этот идентификатор для создания кэша для определения столбца этой таблицы.
Время от времени у меня возникают ошибки в указанном кэше, потому что несоответствие информации столбца. В настоящее время я не могу воспроизвести эти проблемы в недолговечных соединениях, только в соединениях журнала, где происходит ротация двоичного файла журнала.
Я подозреваю, что table_id
является уникальным только для одного двоичного файла журнала. Кто-нибудь знает, верно ли это предположение? Кто-нибудь знает, где найти документацию, которая заявляет, что я могу ожидать от table_id
?
Заранее спасибо Бьёрн
2 ответа
Поскольку я не вижу вашей реальной реализации, это всего лишь слепое предположение, но взгляните на приведенную ниже ошибку, возможно, которая вызывает вашу головную боль: http://bugs.mysql.com/bug.php?id=67352
Идентификаторы таблицы, используемые в репликации, были определены как тип ulong на хозяин и уинт на раба. Кроме того, максимальное значение для Идентификаторы таблицы в двоичном журнале событий - 6 байтов (281474976710655). это Сочетание факторов привело к следующим проблемам: Данные могут быть потеряны на ведомом устройстве, когда таблице был назначен ID больше, чем Uint. * Идентификаторы таблицы, превышающие 281474976710655, были записаны в двоичный журнал как 281474976710655.* (...)
Нет, нет никаких таблиц поиска для двоичных значений идентификатора таблицы журнала.
Вы должны обработать события binlog WRITE/UPDATE/DELETE относительно их предыдущих событий TABLE_MAP.
На самом деле есть столбец TABLE_ID внутри INFORMATION_SCHEMA.INNODB_SYS_TABLES
но эти числа отличаются от идентификаторов таблиц, которые встречаются в двоичных событиях журнала TABLE_MAP.