Ошибка репликации MySQL: код ошибки: 1032
Я установил реплику чтения MySQL, которая доступна только для чтения. И master, и slave работают под управлением MySQL 5.6. Раб никогда не записывается напрямую, но я не могу синхронизировать его больше часа или двух. Немного побежав, я постоянно сталкиваюсь с таким типом ошибки:
Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log
Затем мне нужно пройти через процесс воссоздания ведомого из дампа MySQL, но независимо от того, что я делаю, я получаю эту ошибку снова. Кто-нибудь знает, почему это может происходить?
1 ответ
В зависимости от того, какой движок (ы) вы используете, используете ли вы несколько схем, и какие опции вы используете в mysqldump, вы можете не получить согласованный дамп.
Если у вас есть две схемы, скажем, одна с именем development, а другая с именем production, mysqldump блокирует таблицы отдельно для каждой схемы. Это означает, что во время резервного копирования схемы разработки производственная схема все еще доступна для записи и обновляется.
Теперь, когда у вас есть дамп двух схем и запускается репликация, эти две схемы фактически находятся в разных позициях binlog. Это означает, что когда вы получаете Error_code 1032, у вас действительно нет этого ключа.
Если все таблицы, которые вам нужны для резервного копирования, являются InnoDB, вам следует изучить --single-transaction
вариант для mysqldump. Если у вас есть смесь InnoDB и MyISAM, то только таблицы InnoDB гарантированно будут согласованными. Таблицы MyISAM все еще будут записаны с использованием этой опции.
Если у вас есть смесь InnoDB и MyISAM или вы используете только MyISAM, лучшим вариантом (с использованием mysqldump) является использование --lock-all-tables
, Это именно так и звучит, ничего не будет записано, пока дамп не будет завершен. Это имеет главный недостаток, заключающийся в том, что ваше приложение или веб-сайт, который зависит от базы данных, также заблокированы (поскольку он не может писать).
Лучший вариант IMO - переместить все в InnoDB, если это еще не сделано, и использовать Percona Xtrabackup. Он по-прежнему будет отлично работать и с таблицами MyISAM, но с помощью инструмента, отличного от таблиц InnoDB (cp
или же rsync
). При копировании таблиц MyISAM по-прежнему необходимо блокировать таблицы, но он делает все возможное, чтобы минимизировать это время. Если вы используете rsync
Затем метод сначала скопирует все таблицы MyISAM, затем заблокирует таблицы, а затем скопирует все таблицы, которые были обновлены с момента первой копии. Блокировку нужно удерживать только во время второго rsync.