Перезагрузите my.cnf без перезапуска службы MySQL

26

Я должен настроить сервер MySQL для работы в качестве мастера репликации.

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

Есть ли способ перезагрузить файл конфигурации my.cnf без перезапуска службы?

Дэвид Эспарт
источник
3
/etc/init.d/restartперезапустит весь хост. Вы, вероятно, думаете о/etc/init.d/mysqld restart
Кевин М
Да, я могу перезапустить mysqld. Ред. Спасибо!
Дэвид Эспарт

Ответы:

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 вы не можете (как я обнаружил вчера!).
Coops
1

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

то, что я сделал, было приостановить экземпляры apache .. и затем продолжить их позже .. работал как чудо на сервере, где у меня в среднем 25 активных запросов в секунду.

с помощью sudo (очевидно) pkill -STOP httpd && /etc/init.d/mysqld restart && pkill -CONT httpd

Конечно, ваше имя процесса apache и / или сценарии перезапуска mysql могут отличаться от моих, но вы правильно поняли!

Хасан Абдул Рехман
источник