[前][次][番号順一覧][スレッド一覧]

mysql:2020

From: Seiji Tateyama <Seiji Tateyama <tateyan@xxxxxxxxxx>>
Date: Tue, 16 May 2000 19:20:19 +0900
Subject: [mysql 02020] Re: [Q] Perl ではどう使う?

たてやんっす

私ならこうします という感じで 申し訳ない(忙しい身の上なんです(^^ゞ)

まず ログですが /var/log/messages のなかから sendmail
のログを取り出すとすると

#!/usr/bin/perl
open(LOGS,"tail -f /var/log/messages |");
while(<LOGS>) {
  #
  #
  #ここで 処理を行う
  #
  #
}
close(LOGS);

といった形で 処理したりします

 unix の外部コマンドを使いたくない場合などは もうちょいと工夫すれば
tail もつかわず perl だけでできますが 説明長くなるんでやめときます
#手抜き

処理を行う場合で
例えば
May 16 18:27:19 mysql sendmail[9579]: SAA09578: to=<tateyan@xxxxxxxxxx>, delay=00:00:01, xdelay=00:00:00, mailer=local, stat=Sent
なんてログから
日時と  to を取り出す場合


処理の部分で


 if(/(\S+\s+\d{2}\s+\d{2}:\d{2}:\d{2})\s+\S+\s+\S+\s+\S+\s+to=(\S+),/)
        $count++;
        open(OUTF,">/tmp/log$count.tmp");
        print OUTF qq{"$1","$2"\n;
        close(OUTF);
 }

とすれば 
ls /tmp/*.tmp

/tmp/log1.tmp  /tmp/log3.tmp  /tmp/log5.tmp  /tmp/log7.tmp
/tmp/log2.tmp  /tmp/log4.tmp  /tmp/log6.tmp

とできていきまして
中身は
"May 16 18:27:19","<tateyan@xxxxxxxxxx>"
と言った形になります

正規表現とか qq{} によるクオート表現とか 使ってますので ご理解いただけるかは???
ですが...

で この部分を MySQL に食わせてあげればいいんですが
DBI / DBD を 使わない方法ということでしたら


        open(OUTF,">/tmp/log$count.tmp");
        print OUTF qq{"$1","$2"\n;
        close(OUTF);
をフィルタでmysql へ突っ込むという荒業で行ってみます?

        open(OUTF,"|mysql DATABASE名");
        print OUTF qq{insert into テーブル名 (val名 ,val名)VALUES("$1","$2");\n};
        close(OUTF);

なんて ことでどうでしょう (検証してないのでまちがったらごめんなさい)

もちろん この部分を DBI で作れば OKっす


#/usr/bin/perl
use DBI;
$user="hogehoge";                #mysql のユーザ名
$passwd="passwd";                #mysql のユーザのパスワード
$driver = "mysql";
$database="logs";                #データベース名
$hostname="localhost";
$dsn = "DBI:$driver:$database:$hostname";
$dbh = DBI->connect($dsn,$user,$passwd)|| die $DBI::errstr;
$sth = $dbh->prepare("insert into table (date,user) VALUES (?,?)")|| die $dbh->errstr;
open(LOGS,"tail -f /var/log/messages |");
while(<LOGS>) {
$sth->execute();
 if(/(\S+\s+\d{2}\s+\d{2}:\d{2}:\d{2})\s+\S+\s+\S+\s+\S+\s+to=(\S+),/)
         $sth->execute($1,$2) || die $dbh->errstr;;
 }
}

という 形でいけるかも


Ctrl-C で終了した場合とか のハンドラを入れればGOODかも


ただし ログはローテートされてないことを前提に書いてますし



endo@xxxxxxxxxx (遠藤 俊裕) さんは Perl ではどう使う? にて
遠> ども、えんどうです。
遠> 
遠> 遠藤 俊裕 さんは書きました。
遠> >ということで、堤井さんの方法で行ってみようと思います。
遠> 
遠> と思って、さっそく作り始めたのですが、またぶつかりました。
遠> 
遠> データはずーっと出てくるわけで、それをフィルタすると
遠> ファイルはいつまでも完結しないわけで、そうすると mysql
遠> にファイルを食わせることが出来ないわけで。。。
遠> 
遠> perl もよく分かってないもので困ってしまっているのですが、
遠> ちょっと mysql と趣旨が違っちゃってますけど、どなたかご
遠> 教授ください。


============
  彡彡从        たてやんっす
 d□/□-b      <tateyan@xxxxxxxxxx>
 ヽ"ー"丿



[前][次][番号順一覧][スレッド一覧]

      2015 2000-05-16 10:55 [<endo@xxxxxxxxxx>   ] [Q] Perl ではどう使う?                 
      2016 2000-05-16 11:53 ┣["Y. Tutui" <tutui@xx]                                       
      2018 2000-05-16 14:12 ┃┗[<endo@xxxxxxxxxx>   ]                                     
      2019 2000-05-16 15:27 ┃ ┗[<endo@xxxxxxxxxx>   ]                                   
->    2020 2000-05-16 19:20 ┃  ┗[Seiji Tateyama <tate]                                 
      2021 2000-05-16 19:40 ┃   ┣[Seiji Tateyama <tate]                               
      2022 2000-05-16 19:52 ┃   ┗["Y. Tsutsui" <tutui@]                               
      2024 2000-05-16 23:03 ┃    ┗[tateyan <tateyan@xxx]                             
      2026 2000-05-16 23:20 ┃     ┗[tateyan <tateyan@xxx]                           
      2027 2000-05-17 00:00 ┃      ┗[tateyan <tateyan@xxx]                         
      2028 2000-05-17 00:14 ┃       ┣["Ningfeng Yang" <yan] データベースに画像ファイルを保存できますか?
   @  2031 2000-05-17 00:21 ┃       ┃┗[hama <KHC01210@xxxxx]                     
      2032 2000-05-17 00:52 ┃       ┃ ┣[hama <KHC01210@xxxxx]                   
      2034 2000-05-17 01:05 ┃       ┃ ┃┗["Ningfeng Yang" <yan]                 
      2033 2000-05-17 00:58 ┃       ┃ ┗["Ningfeng Yang" <yan]                   
      2043 2000-05-17 08:39 ┃       ┗[<endo@xxxxxxxxxx>   ]                       
      2017 2000-05-16 12:03 ┣["Akinobu Yamamoto" <]                                       
      2044 2000-05-17 10:23 ┗[Satoshi Koiwa <koiwa]                                       
      2045 2000-05-17 10:35  ┣[<endo@xxxxxxxxxx>   ]                                     
      2046 2000-05-17 10:42  ┗["Y. Tsutsui" <tutui@]