Як змінити попередній підлеглий MySQL, щоб він був головним і видалив інформацію про стан підлеглого?


10

У мене є конфігурація ведучого -> підлеглого, де майстер не вдався. Я зміг скинути старого раба на хазяїна, а старого - на раба з нього. Чудово.

Що я не можу зробити, це видалити головну інформацію про старого раба, який зараз є новим господарем. Розумію:

mysql> show slave status \G
*************************** 1. row ***************************
           Slave_IO_State: 
              Master_Host: 10.1.2.101
              Master_User: replicationSlave
              Master_Port: 3306
              ...
              Slave_IO_Running: No
              Slave_SQL_Running: No

Я прочитав багато документації на MySQL, але все ще не знайшов способу очистити інформацію про підлеглого від нового-майстра. Я спробував:

  1. RESET SLAVEщо, здається, не очистило ці налаштування. [[Насправді він видаляє master.infoфайл, але не налаштування пам'яті. Дивись нижче.]]
  2. CHANGE MASTER TO MASTER_HOST='' яка просто бачить на помилку, оскільки вона була застаріла нещодавно.
  3. Перевірка, my.cnfяка не містить основної інформації, оскільки вони були додані програмно.
  4. RESET MASTERтому що деякі документи mysql рекомендували це. Це скидає лише журнали сміття.
  5. Оглянувшись у внутрішніх таблицях MySQL, щоб побачити, чи зможу я знайти поля для очищення.

Який правильний спосіб зробити це на MySQL ~ 5.5.9? Дякуємо за будь-яку допомогу.


Редагувати:

Ось і виходить, що RESET SLAVEвидаляє master.infoфайл так, як мається на увазі @RolandoMySQLDBA. Однак вам все-таки потрібно перезапустити сервер, перш ніж інформацію про підлеглий буде видалено.

Чи є спосіб видалити цю інформацію про підлеглого без перезавантаження mysqld?


Відповіді:


10

У MySQL 5.5.16 і пізніших версіях ви можете використовувати RESET SLAVE ALLвсе, що RESET SLAVEробиться, і скидати параметри з'єднання з пам'яті, таким чином, це не потребує перезавантаження mysqld.


6

Найшвидший і найбрудніший спосіб очистити інформацію про підлеглий з екземпляра MySQL

  • Додати skip-slave-startв /etc/my.cnf під[mysqld]
  • service mysql stop
  • rm -f /var/lib/mysql/master.info /var/lib/mysql/relay-*
  • service mysql start
  • Видалити skip-slave-startз /etc/my.cnf

Це має зробити це за вас !!!

Це потрібно, оскільки згідно з документацією на MySQL наRESET SLAVE :

У MySQL 5.5 (на відміну від випадку в MySQL 5.1 та новіших версіях) RESET SLAVE не змінює жодних параметрів з'єднання реплікації, таких як головний хост, головний порт, головний користувач або головний пароль, які зберігаються в пам'яті. Це означає, що START SLAVE може бути виданий, не вимагаючи змінити MASTER TO на наступному RESET SLAVE.

Таким чином, інформація про реплікацію все ще зберігається в пам'яті. Перезапуск mysql - єдиний шлях.


Дякую @Rolando +1 Я бачив це, але не намагався. Я намагаюся не перезапускати mysqld, щоб виправити це.
Сірий - ТАК перестань бути злим

Також я не бачу жодного master.infoфайлу. Це завжди є на "господаря" чи "раба"?
Сірий - ТАК перестань бути злим

master.info завжди знаходиться на підлеглому сервері.
Абдул Манаф

5

RESET SLAVEпісля чого перезапуск не очищає інформацію про підлеглого, що стосується phpmyadmin. Вам також потрібно встановити CHANGE MASTER TO MASTER_HOST=''.


3

Я рекомендую підтримувати команду skip-slave-start у своєму конфігураційному файлі ('in /etc/my.cnf') під вашим 'mysqld', щоб уникнути переосмислення даних головних ведених. Щоб навести приклад: під час роботи у хмарному середовищі скажімо, що старий майстер виходить з ладу, а потім успішно перезавантажується, коли ваш постачальник вирішує будь-яку проблему - старий підлеглий (тепер новий магістр) буде реплікувати зі старого майстра, переосмисливши дані DBA має шанс усвідомити це.

До речі, це також актуально в нехмарних умовах. Якщо, скажімо, інший адміністратор виховує старого майстра без узгодження. Крім того, ще одне питання, чому корисно підтримувати команду "пропустити-підлеглий-початок", навіть якщо це підлеглий - немає автоматичної реплікації, тобто ви маєте більше контролю над запобіганням непередбачуваних результатів. :)


Дякую за відповідь @Lena. Це хороша ідея. Я розберуся в це.
Сірий - Так перестань бути злим
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.