電源が切れました-クエリは終了しましたか?


9

クエリが終了したかどうかを確認する方法はありますか?先週休暇に出かけたときに、非常に長時間実行される更新クエリを3つ(それぞれ+/- 25時間)実行しました。残念ながら、平日のどこかで電源が切れ、MYSQLを実行しているマシンがシャットダウンしました。3つ(または3つすべて)のクエリのどれが完了したかをチェックして確認する方法はありますか?

データが更新されたかどうかを確認できることはわかっていますが、正しい完全な実行ではNULLが予想され、4800万行のデータが閲覧されます。何かご意見は?

mysql 

6
ログ...何かをログに記録する場合。そうでない場合は、開始することをお勧めします。
ベン

1
@ベン-UPSとトランザクション処理も推奨するには遅すぎると思います。

1
InnoDBを使用している場合は、トランザクションでコードを実行できます。dev.mysql.com/doc/refman/5.0/en/commit.html

1
スロークエリロギングをオンにした場合、スロークエリはスロークエリログに記録される可能性があります。

3
また、正常に完了しなかった場合に備えて、バックアップはありますか?

回答:


9

バイナリログを有効にして実行している場合、これは比較的高い信頼性でチェックできます。

まず、バイナリログが実際に有効になっているかどうかを確認するには、次のコマンドを実行します。

SHOW BINARY LOGS;

有効になっている場合は、次のような出力が得られます。

+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000244 |  15462544 |
| mysql-bin.000245 | 102622775 |
+------------------+-----------+

そうしないと、エラーメッセージが表示されます。

バイナリログが有効になっている場合、成功したコミットもバイナリログに書き込まれます。私は「コミット」と言いますが、MyISAMなどの非トランザクションテーブルでも、成功した操作はそこに書き込まれます。ただし、正直に言うと、クエリの結果を確実に把握するために、InnoDBなどのトランザクションエンジンを使用しているか、何もわからないことを願っています。

さて、バイナリログがオンになっていて、テーブルがトランザクション対応(うまくいけばInnoDB)だとすると、クエリが正常に完了すると、バイナリログに書き込まれることが期待されます。

ここで、関連するバイナリログを探し、そこでクエリを探す必要があります。クエリを見つけた場合-良いです!そうでない場合-それはおそらくそこにありません。すぐに説明します。

どのバイナリログにクエリが含まれていますか?通常はデータディレクトリにあるバイナリログファイル自体を確認します。タイムスタンプを探します。電源が入ると、新しいバイナリログが作成されました。それを見つける。あなたのクエリはおそらくそののバイナリログにあります。これは推測です。それはその前などでもかまいません。しかし、それは良い推測です。

次に、mysqlbinlogユーティリティを使用して、コマンドラインから次のように実行します。

mysqlbinlog mysql-bin.000245

ファイル名を、クエリを含むと思われるファイル名に置き換えます。

これにより、このバイナリログファイル内のすべてのクエリが標準出力に出力されます。Unixでは、を使用grepしてクエリを検索します。

mysqlbinlog mysql-bin.000245 | grep "something which identifies the query"

Windowsでは、頑張ってください。notepad ++などで開き、手動で検索します。

クエリはありますか?すばらしい-あなたそれがコミットされたことを知っています。

クエリはありませんか?sync_binlogパラメータを確認する必要があります。それは1?次に、バイナリログにないクエリ==>クエリがコミットされていません。しかし、sync_binlog1でない場合でもcommit、バイナリログがディスクにフラッシュされた直後と直前にクラッシュが発生した可能性があるため、クエリがまだバイナリログにコミットされていない可能性があります。その後、他の手段に戻す必要があります。

それらは:(また、うまくいけば、再びInnoDBを使用しています):クエリの結果を特定できる単一の行を探します。InnoDBを使用すると、「オールオアナッシング」を実現できます。クエリの影響を受ける単一の行が確実である場合は、クエリが完了したことを確認できます。

編集:もちろん、遅いログが有効になっている場合は、完了後にそのような長いクエリがそこに記録されることも期待できます...

幸運を!


2
頑張ってください。
jcolebrand

2
@jcolebrandローランドは、ここにいくつかの競争に行うことができます:)
Philᵀᴹ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.