アーカイブ機能とクエリ機能の両方のために、MySQL データベースにインポートしたいアーカイブ ログ ファイルがいくつかあります。
これらのログ ファイルの各行は、特定の種類のイベントを表します。これを説明するために、各行が異なるイベント タイプである例を次に示します。
2013-01-15 03:30:08 - Failed login attempt for user 'helloworld' by 1.2.3.4
2013-01-15 03:30:08 - User 'helloworld' successfully logged in from 1.2.3.4
2013-01-15 03:30:08 - User 'helloworld' issued command 'randomcommand'
質問に関連するタイムスタンプに注意してください。
failed_logins
私が最初に考えたのは、イベントごとにテーブルを作成することでしsuccessful_logins
たcommands
。
そのアプローチの問題は、同じ秒に複数のイベントが発生した場合 (タイムスタンプの精度は 2 番目のレベルのみ)、それらが異なるテーブルにあるため、発生した実際の順序を知る方法がないことです。
次に考えたのは、1 つのテーブルを使用し、主キーで順序を維持することでしたが、これはすべてのイベント タイプですぐに手に負えなくなります。(これ以外にもあります。)
CREATE TABLE log_lines (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
type INT, // 1 = failed_login, 2 = command, ...
failed_logins_user VARCHAR(32),
failed_logins_ip VARCHAR(15),
commands_user VARCHAR(32),
commands_command VARCHAR(128)
);
これを達成するためのより良い方法があるように感じます。
要約すると、私の目標は、ログ ファイルで発生した各イベントの順序を維持しながら、データをクエリ可能にすることです。これについてどうすればよいですか?