web-dev-qa-db-ja.com

バイナリログに書き込まずにMYSQLでクエリを実行する方法

MySQLへの大きなファイルのインポートを実行したい。ただし、インポートに時間がかかり、スレーブが大幅に遅れるので、バイナリログに書き込まれることは望ましくありません。システム上でははるかに簡単になるので、実際には、スレーブ上で個別に実行したいと思います。問題のテーブルは新しいテーブルであり、マスターとすべてのスレーブがすべて同じファイルをインポートするため、最終的にマスターとすべてのスレーブが同じデータを持つため、同期が外れることを心配する必要はありません。最終的に。また、replicate-ignore- *またはbinlog_ignore- *オプションを変更したくありません。問題のサーバーを再起動する必要があるためです。バイナリログに書き込まずに単一のクエリを実行する方法はありますか?

私はすでに答えを知っていますが、ネット上では簡単に見つけることができなかったので、誰かに答えを投稿させて、いくつかの担当者ポイントを獲得させています。小さな白で答えがない場合は、見つけた答えを投稿します。

33
Kibbee

sql-log-bin セッション変数を使用して、現在のセッションのロギングをオフにすることができます。単に入力してください:

SET sql_log_bin = 0;

また、現在のセッションのすべてのクエリはバイナリログに送信されません。バイナリロギングをオンに戻したい場合は、次を実行してください:

SET sql_log_bin = 1;

これは、現在実行中のセッションのみを対象としています。他のすべての接続からの他のすべてのクエリは引き続きログに記録されます。また、これを機能させるには、SUPER権限が必要です。

54
Kibbee

あなたがcliからこれをしたいのであれば、これを試してください、それは私にとってはうまくいきました:

$ mysqldump old_DB | mysql --init-command="SET SQL_LOG_BIN = 0;" new_DB

「init-command」パラメータが新しいMySQLバージョンに追加された可能性があります。

19
Mihai