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


26

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

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

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


3
/etc/init.d/restartホスト全体を再起動します。あなたはおそらく考えています/etc/init.d/mysqld restart
ケビンM

はい、mysqldを再起動します。編集済み。THX!
デビッドエスパート

回答:


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コマンド構文を検索する必要がありました
マークマクドナルド

4
また、MySQLのバージョンを変更する際に、どの変数が動的な変更であるかについて言及する価値があります。たとえば、5.xではスロークエリログをオンザフライで有効にできますが、4.xではできません(昨日発見しました!)。
コープス

1

私はこれに対する解決策を探していましたが、私が見つけた限られた助けに満足していませんでした。あるチャップスがキル-HUPを提供しました..私にはうまくいきませんでした..

私がやったことは、Apacheインスタンスを一時停止し、後でそれらを継続することでした..サーバーで1秒間に平均25のアクティブなリクエストを持っているチャームのように機能しました

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.