web-dev-qa-db-ja.com

MySQLサービスを再起動せずにmy.cnfをリロードします

レプリケーションマスターとして機能するようにMySQLサーバーを構成する必要があります。

バイナリログをアクティブにするようにmy.cnfを変更しましたが、構成を再読み込みするには、/etc/init.d/mysqld restartを使用してサービスを再読み込みする必要があります。問題は、サーバーが1秒間にいくつかのクエリを受信し、その間に到着する可能性があるすべてのデータを失いたくないということです。

サービスを再起動せずに構成ファイルmy.cnfをリロードする方法はありますか?

26
David Espart

MySQL固有:
my.cnfのオプションは システム変数 です。これらの変数は動的(実行時に変更可能)または動的ではありません。動的なものは、SET変数構文を使用して実行時に変更できます。変数はSHOW VARIABLES;で確認できます。しかし マニュアルのこのリンク によると、バイナリログオプションは動的ではありません。したがって、再起動する必要があるようです。ただし、mysqlを私より少し知っている人がこれを確認するのを待つこともできます。

デーモン全般:
Linuxでは、/ etc/init.d /はデーモン(サービス)を開始および停止するスクリプトを保持します。これらはスクリプトなので、テキストエディタで表示できます。これらのスクリプトの多くは、reload引数を取ります。私のmysqlスクリプトを見て、引数としてリロードするとmysqladminコマンドが使用されます。したがって、リロード時のmysqladminのマニュアルには次のように記載されています。

リロード

Reload the grant tables.

したがって、これは一般的に見えますが、これは構成の変更ではなく、特権の変更です(おそらく同等のフラッシュ特権コマンドですか?)。

28
Kyle Brandt

私はこれの解決策を探していましたが、見つけた限られたヘルプに満足していませんでした。 1つのchapがkill -HUPを提供しました..うまくいきませんでした..

私がしたことは、Apacheインスタンスを一時停止して、後で続行することでした。サーバー上で1秒あたり平均25のアクティブな要求がある場合、サーバーの魅力のように動作しました。

sudo(明らかに)pkill -STOP httpd && /etc/init.d/mysqld restart && pkill -CONT httpd

もちろん、Apacheプロセス名やmysql再起動スクリプトは私のものとは異なる場合がありますが、あなたは正しい考えを持っています!

1