我正在尝试使用 Postfix 建立自己的邮件服务,但在设置阶段遇到了一个问题,那就是 Postfix 无法连接到数据库。错误日志的内容如下:
⛔数据库连接字符串:mysql:host = localhost; dbname = postfixadmindb; charset = UTF8
⛔连接数据库时出现问题,请检查数据库配置(config.local.php 中的 ($CONF['database_*'] 条目)
⛔SQLSTATE[HY000] [2002] 权限被拒绝
这是配置文件:
<?php
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixuser';
$CONF['database_password'] = 'XXXXXXXX';
$CONF['database_name'] = 'postfixadmindb';
$CONF['configured'] = true;
$CONF['encrypt'] = 'md5crypt';
$CONF['setup_password'] = 'the setup password';
?>
首先,我尝试正常连接数据库:
sudo mysql -u postfixuser -p'thecorrectpassword' -h localhost postfixadmindb
一切正常,并按预期进入 MariaDB shell。
然后我授予postfixuser
数据库中的所有权限,但这并没有解决问题。
我检查了下面的日志/var/log/mysql/error.log
,但它是空的
我在运行 Ubuntu 22.04.1 LTS 的 WSL 机器上执行此操作,使用 apache 提供 postfixadmin 网页。
答案1
运行sudo mysql -u postf..
将以 root 权限运行 mysql 命令行客户端,并且不足以检查非特权用户是否也可以连接到 mysql 套接字。
尝试在没有 sudo 的情况下再次运行该程序,如果失败并出现错误,例如Can't connect to local server through socket '/run/mysqld/mysqld.sock'
可能存在文件系统权限问题,导致 postfix 用户无法通过 MariaDB 套接字连接到数据库。
解决方案就是更改该目录/路径上的文件系统权限。
sudo chmod 0755 /run/mysqld/
需要注意的是,/run
and/or下的目录/var/run
通常由 systemd 在启动时创建,在本例中由 MySQL/MariaDB 服务单元组成。
您可能需要编辑 systemd 单元文件使权限更改持久化。
如果RuntimeDirectory
使用该指令,则需要使用RuntimeDirectoryMode=0755
指示。
如果临时文件.d被使用,编辑其规范