Несоответствие между файлом дампа mysql и binlog - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь выполнить восстановление производственной базы данных на определенный момент времени, но при чтении двоичных журналов после восстановления дампа я получаю ERROR 1062 (23000) at line x in file: 'binlogs_file.sql': Duplicate entry 'y' for key 'PRIMARY'.Я дважды проверил, и кажется, что операторы вставки в двоичных журналах уже существуют в файле дампа и, следовательно, во вновь восстановленной тестовой базе данных.

Это мой оператор mysqldump, который выполняется каждое утро на нашем производственном сервере:

echo "SET autocommit=0;" >> backup_file.sql
echo "SET unique_checks=0;" >> backup_file.sql
echo "SET foreign_key_checks=0;" >> backup_file.sql
mysqldump --flush-logs --quick --single-transaction --master-data=2 --force --  routines  <databese_name> >> backup_file.sql`
echo "COMMIT;" >> backup_file.sql
echo "SET unique_checks=1;" >> backup_file.sql
echo "SET foreign_key_checks=1;" >> backup_file.sql

Я копирую последний дамп на тестовый сервер (который является снимком нашего рабочего сервера, только тринедель)Восстановив тестовую базу данных, я извлекаю файл для запуска binlog с помощью этой команды:

cat backup_file.sql | grep 'CHANGE MASTER TO MASTER_LOG_FILE'

и возвращается:

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.006502', MASTER_LOG_POS=154;

Я копирую файл mysql-bin.006502,а также все последующие файлы binlog с рабочего сервера и создайте из них один файл .sql (обратите внимание, что позиция избыточна, поскольку --flush-logs является частью оператора mysqldump)

mysqlbinlog mysql-bin.006502 > binlogs_file.sql
mysqlbinlog mysql-bin.006503 >> binlogs_file.sql
mysqlbinlog mysql-bin.006504 >> binlogs_file.sql 

Следующий шаг - запустить binlogs_file.sql для базы данных.

mysql -u <db_user> -p -e "source binlogs_file.sql"

Затем произойдет ошибка:

ERROR 1062 (23000) at line x in file: 'binlogs_file.sql': Duplicate entry 'y' for key 'PRIMARY'

Мы запускаем MySql 5.7.19 на рабочем сервере итестовый сервер (оба Debian 8.10).Переменные, связанные с binlog, на рабочем сервере:

binlog_format                   = mixed
binlog_group_commit_sync_delay   =   0                                                                                                                              
binlog_group_commit_sync_no_delay_count = 0 

Что я делаю не так?Почему несоответствие?

...