[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[postfix-jp: 3815] Re: postfixadminとの組み合わせで謎の現象



さとうふみやす @ OSSTech です。

At Wed, 28 Jul 2010 15:28:13 +0900 (JST),
大塚 総司(OTSUKA soushi) wrote:
> テスト環境でclueanupに-vをつけてログを出してみました。
        ***snipped***
> 02:38:21 srvXX postfix/cleanup[32191]: rewrite_clnt: local: otsuka??@example.jp -> otsuka??@example.jp
> 02:38:21 srvXX postfix/cleanup[32191]: been_here_check: otsuka??@example.jp: 0
> 02:38:21 srvXX postfix/cleanup[32191]: dict_mysql_get_active: found active connection to host 127.0.0.1

ここで 127.0.0.1 の MySQL へのセッションを見つけているのに対し、

> 02:38:21 srvXX postfix/cleanup[32191]: warning: mysql query failed: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='
> 02:38:21 srvXX postfix/cleanup[32191]: maps_find: virtual_alias_maps: otsuka??@example.jp: search aborted
> 02:38:21 srvXX postfix/cleanup[32191]: mail_addr_find: otsuka??@example.jp -> (try again)
> 02:38:21 srvXX postfix/cleanup[32191]: mail_addr_map: otsuka??@example.jp -> (try again)
        ***snipped***
> 02:38:21 srvXX postfix/cleanup[32191]: mail_addr_find: test4@mail.msrv.dev.example.jp -> (try again)
> 02:38:21 srvXX postfix/cleanup[32191]: mail_addr_map: test4@mail.msrv.dev.example.jp -> (try again)

こちらでは何も見つけていません。(有効な MySQL セッションが存在しない)

> 02:38:21 srvXX postfix/cleanup[32191]: warning: 786321A00DA: virtual_alias_maps map lookup problem for test4@mail.msrv.dev.example.jp
> 02:38:21 srvXX postfix/cleanup[32191]: been_here: rfc822;test4@mail.msrv.dev.example.jp?0?test4@mail.msrv.dev.example.jp?test4@mail.msrv.dev.example.jp: 0

src/global/dict_mysql.c をよく見たところ、「mysql query failed」した
後に plmysql_down_host(host) を実行しています。plmysql_down_host() が
何をしているかというと、次のようになっています:

/*
 * plmysql_down_host - close a failed connection AND set a "stay away from
 * this host" timer
 */
static void plmysql_down_host(HOST *host)
{
    mysql_close(host->db);
    host->db = 0;
    host->ts = time((time_t *) 0) + RETRY_CONN_INTV;
    host->stat = STATFAIL;
    event_cancel_timer(dict_mysql_event, (char *) host);
}

つまり、RETRY_CONN_INTV 秒 (60 秒固定) の間は STATFAIL (異常) 扱いに
します。結果、60秒間はこの MySQL セッションは使えなくなります。

問題の回避方法ですが、src/global/dict_mysql.c の
「mlmysql_down_host(host);」を「mlmysql_close_host(host);」に
書き換えれば即座に有効になって再接続されますが、MySQL サーバーを
複数立てていて Postfix からそれらを参照しており、MySQL サーバーの
フェイルオーバーを期待したい場合にうまい具合に動作しなくなると
思われます。

MySQL に詳しくないのですが、plmysql_connect_single() 内の
mysql_real_connect() の成功後に「mysql_set_character_set(host->db, "binary");」
を追加すると回避できないでしょうか?

> また、SQLクエリログも一緒に付けています。
> クエリログでは一応、test4@mail.msrv.dev.example.jpをselectしたクエリが残って
> います。

クエリは発生しないはずなんですが、何か見落しているのかなぁ。

-- 
-- Name: SATOH Fumiyasu (fumiyas @ osstech co jp)
-- Business Home: http://www.OSSTech.co.jp/
-- Personal Home: http://www.SFO.jp/blog/

_______________________________________________
Postfix-jp-list mailing list
Postfix-jp-list@xxxxxxxxxxxxxxxxxxxx
http://lists.sourceforge.jp/mailman/listinfo/postfix-jp-list

Follow-Ups
[postfix-jp: 3816] Re: postfixadminとの組み合わせで謎の現象, OTSUKA soushi
References
[postfix-jp: 3812] postfixadminとの組み合わせで謎の現象, OTSUKA soushi
[postfix-jp: 3813] Re: postfixadminとの組み合わせで謎の現象, SATOH Fumiyasu
[postfix-jp: 3814] Re: postfixadminとの組み合わせで謎の現象, OTSUKA soushi

[検索ページ] [Postfix-JP ML Home]