Повторяющиеся ошибки первичного ключа при применении binlog после восстановления mydumper/myloaderMySql

Форум по Mysql
Ответить
Anonymous
 Повторяющиеся ошибки первичного ключа при применении binlog после восстановления mydumper/myloader

Сообщение Anonymous »

Я реализую рабочий процесс полного + инкрементального восстановления с использованием mydumper / myloader и двоичных журналов MySQL.

Шаг резервного копирования
Я создаю резервную копию, согласованную со снимками, с помощью mydumper:
mydumper \
-u Admin \
-h 127.0.0.1 \
-a \
--database=db1 \
--threads=4 \
--trx-tables \
--events \
--routines \
--triggers \
--compress \
--outputdir=/backup/17122025 \
--verbose=3

После завершения дампа я считываю координаты binlog из сгенерированного файла метаданных:
BINLOG_FILE=$(awk -F= '/SOURCE_LOG_FILE/ {gsub(/[ "#]/,"",$2); print $2}' metadata)
BINLOG_POS=$(awk -F= '/SOURCE_LOG_POS/ {gsub(/[ #]/,"",$2); print $2}' metadata)

Пример из метаданных:
SOURCE_LOG_FILE = "binlog.000524"
SOURCE_LOG_POS = 337111


Шаг восстановления
Я восстанавливаю полную резервную копию в новую базу данных с помощью myloader:
myloader \
-u Admin \
-h 127.0.0.1 \
-a \
--directory=/backup/17122025 \
--database=db1_restore \
--threads=4 \
--overwrite-tables \
--verbose=3

На этом этапе восстановленная база данных выглядит правильно.
Например, таблица имеет 400 строк с первичными ключами 1–400.

Инкрементное воспроизведение (binlog)
После создания резервной копии я вставляю дополнительные строки в исходную базу данных.
Чтобы применить эти значения, изменения в восстановленной базе данных, я запускаю:
mysqlbinlog /Data/mysql/binlog.000524 \
--start-position=337111 \
--database=db1 \
| sed 's/`db1`/`db1_restore`/g' \
| mysql \
--show-warnings \
-u Admin \
-h 127.0.0.1 \
-p \
db1_restore


Проблема
При применении бинлога MySQL завершается с ошибкой с повторяющимися ошибками первичного ключа, например:
ERROR 1062 (23000) at line 56: Duplicate entry '401' for key 'tablename.PRIMARY'

Это происходит, даже если:
  • В восстановленной таблице есть строки 1–400
  • На изображении строки бинлога показана вставка для PK 401
  • Значение AUTO_INCREMENT таблицы уже превышает 401
binlog явно содержит события на основе строк, такие как:
### INSERT INTO `db1_restore`.`tablename`
### SET
### @1=401


Вопрос
Как правильно применить бинлоги MySQL после восстановления mydumper/myloader без возникновения повторяющихся ошибок первичного ключа?

Среда
  • MySQL 8.4.x
  • Binlog формат: ROW
  • Инструмент резервного копирования: mydumper 0.21.x
  • Инструмент восстановления: myloader 0.21.x
  • Ядро: InnoDB


Подробнее здесь: https://stackoverflow.com/questions/798 ... der-restor
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»