[Soctt Cotton と Joshua Marcus, IC Group, Inc.によって寄贈されたコードです] 私たちはmysqlマップタイプを追加するコードを書きました。 これはmysqlクライアントライブラリを使用します、 ライブラリは次のところから入手できます: http://www.mysql.com/downloads/ http://sourceforge.net/projects/mysql/ mysqlマップをサポートしたpostfixをビルドするには、 -DHAS_MYSQLとmysqlヘッダーを含んだディレクトリへの-Iの追加と、 mysqlclientライブラリ(とlibm)をAUXLIBSへ追加しなければなりません。 例えば: make -f Makefile.init makefiles \ 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include' \ 'AUXLIBS=-L/usr/local/mysql/lib -lmysqlclient -lz -lm' そして、'make'するだけです。ビルドにはlibz圧縮ライブラリが必要です。 古いmysqlの実装はlibzなしでビルドされています。 mysqlマップタイプを使用するPostfixインストーレーションは 転送に関しての素早い更新が必要なサイトを取込むのに役立つでしょうし、 また、メールエクスチェンジャーに、顧客データベースの類と共に働く、 ネットワーク化したデータベースを参照させるのにも役立つかもしれません。 Postfixがmysqlサポート付きでビルドしたら、 次のようにmain.cfでマップタイプを指定できます: alias_maps = mysql:/etc/postfix/mysql-aliases.cf /etc/postfix/mysql-aliases.cfファイルにより、postfixにどのように mysqlデータベースを参照するかを伝える多くの情報が指定されます。 以下はmysqlマップ設定ファイルの例です: # # postfixでのalias検索のためのmysql設定ファイル # コメントは使えます。 # # mysqlサーバーへログインするためのユーザー名とパスワード user = someone password = some_password # サーバー上のデーターベース名 dbname = customer_database # テーブル名 table = mxaliases # select_field = forw_addr where_field = alias # additional_conditionsをここで指定してもよい additional_conditions = and status = 'paid' # 上記の変数は次の問い合わせフォームになります: # select forw_addr from mxaliases where alias = '$lookup' and status = 'paid' # ($lookupはシングルクオートや他の特殊文字を含む場合エスケープされ、 # SQLでのパースエラーを引き起しません。) # # postfixが接続して問い合わせるホスト(順序リスト) # Unixドメインソケットには unix:、TCP接続(デフォルト)にはinetを指定 hosts = host1.some.domain host2.some.domain unix:/file/name # mysql設定ファイル おわり 注: この設定インターフェイスでは複数のmysqlデータベースを許容します: 望むなら、一つをバーチャルテーブルに、一つをアクセステーブルに、 一つをエリアステーブルにと使用することができます。 複数のメールエクスチェンジャーが必要なサイトはネットワーク化した メーラーデータベースを使用する便利さを楽しめるかもしれませんが、 システムにSingle point of failureを持ち込まないようにしたいでしょうから、 私たちはpostfixへ一つのmysqlマップへのアクセスに 複数のホストを参照をさせる機能を含めました。 ひとつのホストでのエラーにより問い合わせが失敗したときは、 残りのホストが順に試されます。 エラー状態にある各ホストは度々再接続を試みられ、 もし到達可能なmysqlサーバーがなければ、その時は それらのホストの少なくとも一つが到達可能になるまで メールはdeferredにされます。 mysql付きのpostfixの性能は完全にはテストされていませんが、 安定していることは分かっています。 mysqlマップを使用する忙しいメールサーバーは多数の並列した mysqlクライアントを生成しますから、 mysqlサーバーはこのことを念頭において動作すべきです。 フィードバックに加えて、これ以上の性能に関する情報が あれば大歓迎です。