Вопрос или проблема
Во-первых, моё понимание репликации MySQL довольно поверхностное.
У меня есть резервная копия, сделанная в мастере (с выключенной БД). Я восстановил эти файлы на сервере-реплике и исправил права на файлы, и MySQL запускается. База данных содержит все данные, и запросы работают.
Однако я не могу запустить репликацию. Я получаю ошибку относительно таблицы gtid_slave_pos. Однако это не имеет смысла для меня, так как режим gtid отключен.
Невозможно загрузить состояние репликации GTID для слейва из mysql.gtid_slave_pos: таблица 'mysql.gtid_slave_pos' не существует"
Также я получаю ошибки дубликатов первичного ключа, когда жду и снова выполняю команду show slave status.
Как вернуть репликацию?
П.С. Я не могу делать обычные логические резервные копии mysqldump – экспорт и импорт базы данных занимает больше недели.
Ответ или решение
Чтобы быстро восстановить репликацию MariaDB 10 после восстановления из резервной копии, выполните следующие шаги:
Шаг 1: Убедитесь, что репликация настроена правильно
- Проверьте конфигурацию:
Убедитесь, что файл конфигурацииmy.cnf
на слейве имеет правильные параметры для репликации:[mysqld] server-id=2 log_bin=mysql-bin relay-log=mysql-relay-bin
При этом
server-id
должен быть уникальным для каждого сервера в кластере.
Шаг 2: Восстановите данные
-
Остановите MariaDB на слейве:
Перед восстановлением данных убедитесь, что MariaDB на слейве остановлена. -
Восстановите файлы данных:
Если вы уже восстановили данные и установили правильные разрешения на файлы, пропустите этот шаг. В противном случае сделайте это теперь. -
Запустите MariaDB на слейве:
После восстановления, запустите сервер MariaDB.
Шаг 3: Настройка репликации
- Проверьте статус репликации:
Используйте команду:show slave status\G;
Это покажет текущее состояние слейва. Если вы видите ошибку, связанную с
gtid_slave_pos
, это может быть связано с отсутствием этой таблицы.
Шаг 4: Уст消 гтогособережениеще
- Создайте таблицу
gtid_slave_pos
:
Если вы не используете GTID, вы можете просто игнорировать эту ошибку. Если таблица отсутствует и репликация не работает, выполните следующие действия:CREATE TABLE mysql.gtid_slave_pos (slave_uuid CHAR(36) NOT NULL, gtid VARCHAR(64), PRIMARY KEY(slave_uuid));
На данный момент это будет иметь смысл, если вы хотите использовать GTID, иначе просто убедитесь, что он отключен.
Шаг 5: Поправьте проблемы с дублирующимися ключами
Если вы получаете ошибки дублирования первичных ключей:
-
Остановите репликацию:
Выполните:STOP SLAVE;
-
Сбросьте репликацию:
Убедитесь, что на слейве нет записей, которые могут вызывать конфликты. Вам, возможно, придется очистить некоторые записи, если они дублируются. -
Запустите репликацию снова:
Если вы уверены в целостности данных, выполните:START SLAVE;
Шаг 6: Подключение к мастеру
-
Настройте параметры для подключения к мастеру:
Убедитесь, что вы указали правильный логин и пароль на мастере:CHANGE MASTER TO MASTER_HOST='IP_МАСТЕРА', MASTER_USER='репликационный_пользователь', MASTER_PASSWORD='пароль', MASTER_LOG_FILE='имя_лога_мастера.000001', MASTER_LOG_POS=число;
-
Проверьте, что все указано корректно.
Шаг 7: Запустите репликацию
-
Запустите репликацию снова:
START SLAVE;
-
Проверьте статус:
Выполните командуshow slave status\G;
, чтобы удостовериться, что репликация работает без ошибок.
Заключение
Если все сделано правильно, ваша репликация должна быть восстановлена. Обязательно следите за статусом слейва и проверяйте наличие ошибок. Если возникнут дополнительные проблемы, их нужно решать по мере появления.