Подчиненный поток ввода-вывода MySQL не запущен

StackOverflow https://stackoverflow.com/questions/1724191

  •  19-09-2019
  •  | 
  •  

Вопрос

Я настроил репликацию для сервера MySQL.Я могу подключиться с подчиненного компьютера к главному серверу, используя пользователя / пароль репликации.У меня запущен подчиненный SQL-поток, но подчиненный I/O поток не запущен, и статус подчиненного ввода-вывода отображается как пустой, если флажок установлен с помощью "показать статус подчиненного".В чем может быть проблема?

Как мне решить эту проблему?Перезапуск ведомого устройства не помогает.

Это была моя ошибка:Вместо того, чтобы предоставлять привилегию "подчиненного устройства репликации" *.*, Я давал это только для того , чтобы my_db.*.

Это было полезно?

Решение

Вместо того, чтобы предоставлять привилегию 'replication slave' для ., я только предоставлял ее для my_db.*.

Подчиненное устройство репликации - это только глобальная привилегия (т. е.только для каждого пользователя), это означает, что такая команда, как

GRANT REPLICATION SLAVE on mydb.* TO 'someuser'@'%';

не имеет никакого эффекта, так как вы не можете предоставить его для каждой базы данных / столбца / таблицы.

Команда, которую вам нужно выполнить, это:

GRANT REPLICATION SLAVE on *.* TO 'someuser'@'%';

Затем сделайте START SLAVE.Возможно, вам также будет полезно заглянуть в журнал ошибок mysql.

Я бы посоветовал хорошенько почитать документация по настройке репликации, поскольку в нем все это подробно объясняется.

Другие советы

Я столкнулся с такой же проблемой и исправил ее, выполнив следующие шаги.Полная ссылка на поток - это http://www.percona.com/forums/questions-discussions/percona-xtrabackup/11842-backup-stopped-working-slave-sql-running-no

Шаги те же, что и у @Luxknight007, за исключением его шага 2.Однако эта тема содержит больше деталей, которые очень полезны.Ниже приведено решение, которое я использовал, и оно сработало.

"Первая проблема заключается в том, что вы изменили позицию репликации вместо исправления ошибки и использовали неправильный формат имени файла binlog (я бы предположил, что вы, вероятно, просто использовали тот, который указан в том сообщении, на которое вы ссылались).Чтобы вернуться к тому, с чего вы начали, вам нужно найти файл binlog и указать, на чем остановился подчиненный sql_thread.Основываясь на выводе состояния вашего подчиненного устройства, похоже, что подчиненное устройство считывает данные из нового файла binlog (вы можете видеть, что значение Read_Master_Log_Pos меньше значения Exec_Master_Log_Pos, что означает, что оно должно считывать более новый файл binlog, чем тот, на котором остановился подчиненный sql_thread), поэтому вам нужно найти файл binlog, в котором фактически произошел сбой подчиненного sql_thread.Итак, поищите в журнале ошибок что-то вроде приведенного ниже:

Код:

2013-10-08 12:48:51 37545 [ERROR] Slave SQL: Error 'Table 'testdb.test2' doesn't exist' on query. Default database: 'testdb'. Query: 'insert into test1 select * from test2', Error_code: 1146
2013-10-08 12:48:51 37545 [Warning] Slave: Table 'testdb.test2' doesn't exist Error_code: 1146
2013-10-08 12:48:51 37545 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000001' position 3427

Это образец, который я воссоздал, так что ваш будет немного отличаться.Обратите внимание, что ОШИБКА аналогична той, которую вы видите в вашем подчиненном статусе.Итак, найдите ваше конкретное сообщение об ошибке в файле журнала ошибок, а затем найдите конечную часть, где указано имя файла и позиция ("Мы остановились на позиции 3427 журнала 'mysql-bin.000001'" в моем примере).Позиция должна быть 315098143 в зависимости от вашего статуса show slave, поскольку именно в этот момент подчиненный sql_thread прекратил выполнение событий (Exec_Master_Log_Pos ), но io_thread продолжал считывать новые события (Read_Master_Log_Pos).

Как только вы найдете правильное имя и позицию файла binlog, повторно запустите инструкцию change master на подчиненном устройстве, используя информацию, которую вы нашли в журнале ошибок.Обратите внимание, что имя вашего файла должно быть что-то вроде "newcrmdb1-bin.XXXXXX", а не mysql-bin.XXXXXX (вы можете увидеть это соглашение об именовании вашего статуса show slave выше).

Код:

mysql> change master to MASTER_LOG_FILE='newcrmdb1-bin.XXXXXX', Master_Log_Pos=315098143;

change master to MASTER_LOG_FILE='mysql-bin.000082' , Master_Log_Pos=47914844;

Как только вы получите указание обратно на исходное местоположение репликации, где произошел сбой подчиненного sql_thread, вам нужно затем исправить ошибку, на которую он жаловался с самого начала.

Начальная ошибка репликации, по-видимому, сообщает вам, что таблица asteriskcdr.bpleadcf не существует на ведомом устройстве, поэтому оператор insert завершается с ошибкой при попытке выбрать данные из этой таблицы.Итак, проблема в том, что ваше ведомое устройство, похоже, уже не синхронизировано с вашим ведущим устройством.Если рассматриваемая таблица на главном сервере статична или в основном статична, вы, вероятно, могли бы решить эту проблему, экспортировав данные только из этой таблицы на главном сервере с помощью mysqldump и загрузив их в подчиненное устройство.Если это невозможно, или вам наплевать на эти данные, вы всегда можете просто пропустить инструкцию репликации с помощью sql_slave_skip_counter, но тогда подчиненное устройство будет еще больше не синхронизировано с ведущим.

И если все остальное не сработает, вы всегда можете перестроить ведомое устройство из главного в качестве последнего средства.=)"

Я столкнулся с той же проблемой, и я пытаюсь выполнить следующие шаги

Сначала добавьте этот код где-нибудь ниже [mysqld] в my.cnf или my.ini slave-skip-errors=1046 при этом будут пропущены все повторяющиеся записи, поскольку мы выполним весь двоичный файл журнала, где репликация остановится, вы можете прокомментировать этот код после успешной репликации.

1.ОСТАНОВИТЕ ВЕДОМОГО;

2. СБРОС ВЕДОМОГО УСТРОЙСТВА;

3.ИЗМЕНИТЕ MASTER НА MASTER_LOG_FILE='mysql-bin.000049';

Note: MASTER_LOG_FILE must be the last file where it stop from replicating

4.ИЗМЕНИТЕ MASTER НА MASTER_LOG_POS=98;

5.ЗАПУСТИТЕ ВЕДОМОЕ УСТРОЙСТВО;

проверьте, добились ли вы успеха

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top