Шаг резервного копирования
Я создаю резервную копию, согласованную со снимками, с помощью 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
### 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
Мобильная версия