MySQLでバイナリログに書き込むことなくクエリを実行するにはどうすればよいですか
-
23-10-2019 - |
質問
MySQLに大きなファイルのインポートを実行したいと思います。しかし、輸入には長い時間がかかり、奴隷がはるかに遅れをとるので、私はそれをバイナリログに書き込みたくありません。事実の後、奴隷の上で別々に実行したいのですが、それはシステムではるかに簡単になるからです。問題のテーブルは新しいものです。したがって、マスターとすべての奴隷がすべて同じファイルをインポートするため、すべての奴隷が最終的に同じデータを持っているので、私はそれが同期しないことを心配する必要はありません。最終的。また、問題のサーバーを再起動する必要があるため、Replicate-Ignore-*またはbinlog_ignore-*オプションを変更したくありません。バイナリログに書き込むことなく、単一のクエリを実行する方法はありますか?
私はすでに答えを知っていますが、ネット上でそれを非常に簡単に見つけることができなかったので、誰かに答えを投稿して、いくつかの担当者ポイントを取得しています。少し白に答えがない場合は、私が見つけた答えを投稿します。
解決
使用できます SQL-LOG-BIN 現在のセッションのロギングをオフにするセッション変数。単に入力するだけです:
SET sql_log_bin = 0;
また、現在のセッションのすべてのクエリは、バイナリログに送信されません。バイナリログを元に戻したい場合は、実行してください。
SET sql_log_bin = 1;
これは、現在実行中のセッションのみです。他のすべての接続からの他のすべてのクエリは引き続き記録され続けます。また、これが機能するためには、超特権が必要です。
他のヒント
CLIからこれを行いたい場合は、これを試してみてください。
$ mysqldump old_DB | mysql --init-command="SET SQL_LOG_BIN = 0;" new_DB
「init-command」paramが新しいMySQLバージョンに追加された可能性があります。