Apache, MySQL · 1 min read · Feb 03, 2026
Apache2: MySQLデータベースへのログ記録 (mod_log_sql) (Debian Etch)
Apache2: MySQLデータベースへのログ記録 (mod_log_sql) (Debian Etch)
Version 1.0
Author: Falko Timme
このガイドでは、Apache2のアクセスログをファイルの代わりにMySQLデータベースに書き込む方法を示します。これを実現するために、Apache2モジュールmod_log_sqlを使用します。このチュートリアルでは、Debian Etchサーバーを使用しています。
私はこれがあなたにとって機能することを保証しません!
1 Apache2、MySQL、mod_log_sqlのインストール
残念ながら、libapache2-mod-log-sql-mysqlはDebian Lenny(テスト)およびSid(不安定)のDebianパッケージとしてのみ利用可能で、Etchにはありません。したがって、Lennyからlibapache2-mod-log-sql-mysqlパッケージをインストールします。これを行うには、/etc/apt/sources.listを開き、次の行を追加します。deb http://ftp2.de.debian.org/debian/ lenny main; あなたの/etc/apt/sources.listは次のようになります:
vi /etc/apt/sources.list| deb http://ftp2.de.debian.org/debian/ etch main deb-src http://ftp2.de.debian.org/debian/ etch main deb http://ftp2.de.debian.org/debian/ lenny main deb http://security.debian.org/ etch/updates main contrib deb-src http://security.debian.org/ etch/updates main contrib |
もちろん(システムを混乱させないために)、Etchから適切なパッケージがない場合にのみLennyからパッケージをインストールしたいと思います - EtchとLennyの両方からパッケージがある場合は、Etchからのものをインストールしたいと思います。これを行うために、/etc/apt/preferencesでEtchからのパッケージに高い優先度を与えます:
vi /etc/apt/preferences| Package: * Pin: release a=etch Pin-Priority: 700 Package: * Pin: release a=lenny Pin-Priority: 650 |
(etchおよびlennyという用語は、/etc/apt/sources.listの適切な用語を指します。安定版とテスト版を使用している場合は、/etc/apt/preferencesでもetchおよびlennyの代わりにstableおよびtestingを使用する必要があります。)
その後、パッケージデータベースを更新します:
apt-get updateもし次のようなエラーが表示された場合:
Segmentation faultsts... 96%または次のようなエラー:
E: Dynamic MMap ran out of room/etc/apt/apt.confを開き、APT::Cache-Limitの行を非常に高い値で追加します。例えば次のように:
vi /etc/apt/apt.conf | APT::Cache-Limit "100000000"; |
その後、再度実行します
apt-get updateそしてインストールされたパッケージをアップグレードします:
apt-get upgrade (質問が表示された場合は、デフォルトの値を受け入れることができます。)
Apache2、MySQL、およびmod_log_sqlをインストールするには、次を実行します:
apt-get install apache2 mysql-server mysql-client libapache2-mod-log-sql-mysqlMySQLユーザーrootのパスワードを作成します(yourrootsqlpasswordを使用したいパスワードに置き換えます):
mysqladmin -u root password yourrootsqlpassword次に、次のコマンドで確認します:
netstat -tap | grep mysqlMySQLがリッスンしているアドレスを確認します。出力が次のようになっている場合:
tcp 0 0 localhost.localdo:mysql *:* LISTEN 2713/mysqldこれはMySQLがlocalhost.localdomainのみにリッスンしていることを意味しますので、前に設定したパスワードで安全です。しかし、出力が次のようになっている場合:
tcp 0 0 *:mysql *:* LISTEN 2713/mysqldホスト名のMySQLパスワードも設定する必要があります。そうしないと、誰でもデータベースにアクセスしてデータを変更できます:
mysqladmin -h server1.example.com -u root password yourrootsqlpasswordmod_log_sqlはインストール時に自動的に有効になりましたが、もう1つ有効にすべきモジュールがあります: mod_uique_id(これは必須ではありませんが、これがないとmod_log_sqlはアクセスログのMySQLテーブルのid列を空のままにします)。id列には、標準のApacheモジュールmod_unique_idによって提供される一意のリクエストIDが含まれます。
a2enmod unique_idApacheを再読み込みします:
/etc/init.d/apache2 force-reload2 仮想ホストの作成
次に、/var/www/web1/webディレクトリにデフォルトのApache vhostを作成します。この目的のために、/etc/apache2/sites-available/defaultのデフォルトのApache vhost構成を変更します。MySQLログ記録を有効にしたいvhostがすでにある場合は、このチュートリアルをあなたの状況に合わせて調整する必要があります。
まず、/var/www/web1/webディレクトリを作成し、Apacheユーザー(www-data)をそのディレクトリの所有者にします:
mkdir -p /var/www/web1/web
chown www-data /var/www/web1/web
次に、デフォルトのApache vhost構成(/etc/apache2/sites-available/default)をバックアップし、自分のものを作成します:
mv /etc/apache2/sites-available/default /etc/apache2/sites-available/default_orig
vi /etc/apache2/sites-available/default
| NameVirtualHost * |
その後、Apacheを再読み込みします:
/etc/init.d/apache2 reload3 MySQLログ記録用に仮想ホストを構成
mod_log_sqlのドキュメントは、HTMLファイル/usr/share/doc/libapache2-mod-log-sql/manual.htmlにあります。これをワークステーションにコピーし(例: WinSCPを使用)、学習してください。
このファイルを読んだ後、apachelogsというMySQLデータベースを作成します。このデータベースには、アクセスログ用のテーブルが含まれます(複数のアクセスログテーブルを含むことができ、たとえば、持っている各仮想ホスト用の1つなど)。さらに、MySQLユーザーloguserを作成します。このユーザーは、後でmod_log_sqlがMySQLに接続するために使用されます。loguserには、アクセスログ用のテーブルを自動的に作成するためのCREATEおよびINSERT権限が与えられます(テーブルがすでに存在しない場合)およびこれらのテーブルにレコードを挿入します:
mysql -u root -pcreate database apachelogs;grant insert,create on apachelogs. to loguser@localhost identified by ‘loguser_password’;
grant insert,create on apachelogs. to [email protected] identified by ‘loguser_password’;
FLUSH PRIVILEGES;
(loguser_passwordをお好みのパスワードに置き換えます。)
次に、MySQLシェルを終了します:
quit;次に、/etc/apache2/sites-available/defaultのvhostを次のように変更します:
vi /etc/apache2/sites-available/default| LogSQLLoginInfo mysql://loguser:loguser_password@localhost/apachelogs LogSQLCreateTables on LogSQLDBParam socketfile /var/run/mysqld/mysqld.sock LogSQLTransferLogFormat AbHhmRSsTUuvI NameVirtualHost * |
LogSQLLoginInfo(データベースへのログイン資格情報を保持)、LogSQLCreateTables(mod_log_sqlにテーブルが存在しない場合は作成するよう指示)、LogSQLDBParam socketfile(MySQLソケットを指定)、およびLogSQLTransferLogFormat(データベースに何がログされるかを指定する)ディレクティブは、グローバルApache構成に入ります。LogSQLTransferLogTableディレクティブはvhost構成に入ります - これにより、各仮想ホストに異なるアクセスログテーブルを指定できます(例: web1_access_log、web2_access_log、web3_access_logなど)。
LogSQLTransferLogFormatディレクティブは、/usr/share/doc/libapache2-mod-log-sql/manual.htmlファイルで詳しく説明されています。
その後、Apacheを再読み込みします:
/etc/init.d/apache2 reload4 mod_log_sqlのテスト
今、ブラウザでvhostのいくつかのページにアクセスし、その後apachelogsデータベースを確認します:
mysql -u root -puse apachelogs;
show tables;
今、テーブルweb1_access_logがmod_log_sqlによって作成されたことがわかるはずです:
mysql> show tables;
+———————-+
| Tables_in_apachelogs |
+———————-+
| web1_access_log |
+———————-+
1 row in set (0.00 sec)
mysql>
今、そのテーブルに何が入っているかを確認しましょう:
select * from web1_access_log;すべてがうまくいった場合、そのテーブルにアクセスログが見つかるはずです:
mysql> select * from web1_access_log;
+———————+———————————————————————————————…
| id | agent …
+———————+———————————————————————————————…
| JpEF8MCoAGQAAFyuEBU | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14…
| JpPHIMCoAGQAAFyuEBY | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14…
| JpTj0MCoAGQAAFyuEBc | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14…
+———————+———————————————————————————————…
3 rows in set (0.00 sec)
mysql>
MySQLシェルを離れるには、
quit;と入力します。
5 リンク
- Apache: http://httpd.apache.org
- Debian: http://www.debian.org
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。