使用unix socket时,postfix无法与mysql表连接.postmap虽然成功了吗?

sko*_*tos 2 mysql postfix-mta

Postfix抛出错误说:

7月9日14:41:26 tmail postfix/trivial-rewrite [4342]:警告:连接到mysql服务器unix:/var/run/mysqld/mysqld.sock:无法通过socket'/ var /连接到本地MySQL服务器run/mysqld/mysqld.sock'(2)Jul 9 14:41:26 tmail postfix/trivial-rewrite [4342]:致命:mysql:/etc/postfix/mysql-yaa-aliases.cf(0,lock | fold_fix ):表查找问题

在main.cf我有:

virtual_alias_maps = mysql:/etc/postfix/mysql-yaa-aliases.cf
Run Code Online (Sandbox Code Playgroud)

在mysql-yaa-aliases.cf我有:

hosts = unix:/var/run/mysqld/mysqld.sock
# hosts = 127.0.0.1
user = yaa_admin
password = ********
dbname = yaa
query = SELECT dest FROM yaa_active_aliases WHERE address='%s'
Run Code Online (Sandbox Code Playgroud)

如果我使用127.0.0.1它可以工作(不理想,因为我更喜欢套接字的速度.)另外,如果我用postmap测试套接字它的工作原理:

# postmap -q "bholly@example.org" mysql:/etc/postfix/mysql-yaa-aliases.cf
bholly@example.org, bholly@autoreply.example.org
Run Code Online (Sandbox Code Playgroud)

当我在trivial-rewrite守护进程上使用strace时,我得到:

connect(11, {sa_family=AF_FILE, path="/var/run/mysqld/mysqld.sock"}, 110) = -1 ENOENT (No such file or directory)
Run Code Online (Sandbox Code Playgroud)

使用postmap的strace我得到:

connect(4, {sa_family=AF_FILE, path="/var/run/mysqld/mysqld.sock"}, 110) = 0
Run Code Online (Sandbox Code Playgroud)

顺便说一句 - 目前正在运行Postfix 2.7,但故障仍显示为2.9

sko*_*tos 8

发现它:) - 平凡重写发生在chroot jail中,因此套接字文件REALLY不存在.

解决方案(感谢https://serverfault.com/questions/229389帮我解决这个问题)是将其添加到/ etc/fstab:

/var/run/mysqld /var/spool/postfix/var/run/mysqld bind defaults,bind 0 0
Run Code Online (Sandbox Code Playgroud)

因此允许Postfix保持其chroot配置,并允许它访问mysql套接字.

  • 如何使用`host`值`127.0.0.1`?它帮助我解决了这个问题.它使用不写socket的TCP连接(与unix上的`localhost`值不同). (7认同)