Перезавантажте my.cnf без перезавантаження служби MySQL


26

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

Я змінив my.cnf для активації бінарних журналів, але тепер для того, щоб перезавантажити конфігурацію, я повинен перезавантажити службу /etc/init.d/mysqld restart. Проблема полягає в тому, що сервер отримує кілька запитів в секунду, і я не хочу втрачати всі дані, які можуть надходити тим часом.

Чи є спосіб перезавантажити файл конфігурації my.cnf без перезапуску служби?


3
/etc/init.d/restartперезапустив би весь хост. Ви, напевно, думаєте про/etc/init.d/mysqld restart
Кевін М

Так, я перезавантажую MySQL. Відредаговано. Дякую!
Девід Еспарт

Відповіді:


28

Конкретно для MySQL:
Параметри в my.cnf є системними змінними . Ці змінні або динамічні (можуть бути змінені під час виконання), або не динамічні. Ті, які є динамічними, можуть бути змінені під час виконання за допомогою синтаксису змінної SET. Ви можете бачити змінні за допомогою SHOW VARIABLES;. Але відповідно до цього посилання в посібнику , параметр бінарного журналу не є динамічним. Так виглядає, що вам доведеться перезапустити. Ви можете зачекати, коли хтось, хто знає mysql трохи краще, ніж я, підтвердить це.

Демони взагалі:
в Linux /etc/init.d/ зберігає скрипти, які запускають і зупиняють демон (сервіси). Оскільки це сценарії, ви можете їх переглядати за допомогою текстового редактора. Багато з цих сценаріїв приймуть аргумент перезавантаження. Дивлячись на мій скрипт mysql, перезавантажити як аргумент використовується команда mysqladmin. Отже, керівництво для mysqladmin під перезавантаженням говорить:

перезавантажити

Reload the grant tables.

Так виглядає загалом, це не для зміни конфігурації, а для зміни привілеїв (можливо, еквівалентна команда привілеїв флеш?).


2
Гей, дуже хороше пояснення. Здається, що немає можливості зробити це без перезавантаження, хоча. Якщо ніхто не відповість на рішення чи рішення, я прийму ваше запитання. Дякую.
Девід Еспарт

За вашим посиланням, це виглядає як SET GLOBAL binlog_format = 'STATEMENT'; зробив би трюк?
Кайл Сміт

Інший Кайл: Виглядає так, але я думаю, що бінарний журнал вже повинен був би бути включений для того, щоб зробити що-небудь (а може бути встановлено). Ця змінна була введена пізніше моєї поточної версії mysql 5.0.x, тому я не можу перевірити.
Кайл Брандт

Мені довелося шукати синтаксис команди SET - ось посилання на випадок, якщо комусь це потрібно: dev.mysql.com/doc/refman/5.1/en/set-option.html
Марк Макдональд

4
Також варто згадати, які змінні є динамічними змінами, коли ви шансуєте на версії MySQL. Наприклад, в 5.x ви можете ввімкнути повільний журнал запитів на ходу, але в 4.x ви не можете (як я виявив вчора!).
Купи

1

Я шукав рішення для цього, але не був задоволений обмеженою допомогою, яку я знайшов. Один хлопець запропонував убити -HUP .. не працював для мене ..

що я зробив, щоб призупинити екземпляри apache .. а потім продовжити їх пізніше .. працював як шарм на сервері, де у мене в середньому 25 активних запитів в секунду.

з sudo (очевидно) pkill -STOP httpd && /etc/init.d/mysqld перезапуск && pkill -CONT httpd

Звичайно, назва вашого процесу apache та / або сценарії перезавантаження mysql можуть відрізнятися від моїх, але ви зрозумієте, що ідея потрібна!

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