我有一个正在运行的 Postfix 3.1 和 Dovecot 生产安装。最近升级到新版本的 MySQL,从 5.6 升级到托管在新服务器上的 8。
现在的问题是,由于mysql客户端的设置不兼容(与SSL有关),postfix和dovecot服务无法连接到MySQL8。
如果我尝试使用 mysql 命令行连接到新的数据库服务器(mysql03),我会收到错误:
mysql -hmysql03 -uvimbadmin -p vimbadmin
ERROR 2026 (HY000): SSL connection error: unknown error number
我知道这是 SSL 的问题,所以如果我尝试
mysql --ssl-mode=disabled -hmysql03 -uvimbadmin -p vimbadmin
它连接得很好。所以我把这个配置放在/etc/mysql/conf.d/mysql.cnf
[mysql]
ssl-mode=DISABLED
[client]
ssl-mode=DISABLED
使用命令行 mysql(没有 ssl-mode 选项)再次测试并且连接良好。
但是,即使我在配置中指定了 option_file 和 option_group 参数,postfix 仍拒绝连接。因此,对于 postfix,我设法实施了一种解决方法,将别名和邮箱的数据库类型从 mysql 更改为 texthash。并使用脚本生成 texthash 文件。
问题是 dovecot 也无法连接到 MySQL8,而且我不知道还有其他方法可以做到这一点。文件内容/etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=mysql02 user=vimbadmin password=*** dbname=vimbadmin
default_pass_scheme = MD5
password_query = SELECT username as user, password as password, \
homedir AS userdb_home, maildir AS userdb_mail, \
concat('*:bytes=', quota) AS userdb_quota_rule, uid AS userdb_uid, gid AS userdb_gid \
FROM mailbox \
WHERE username = '%Lu' AND active = '1' \
AND ( access_restriction = 'ALL' OR LOCATE( '%Us', access_restriction ) > 0 )
user_query = SELECT homedir AS home, maildir AS mail, \
concat('*:bytes=', quota) as quota_rule, uid, gid \
FROM mailbox WHERE username = '%u'
现在我正在使用 mysql02,因为它是旧的数据库服务器,并且一直在运行以保持电子邮件正常工作。目标是更改为 mysql03。
和最后,我的问题是是否有办法使用像 postfix 这样的文件来配置 dovecot,这样我就不需要从应用程序连接到数据库了。如果没有,我可以更改什么才能连接到新的 MySQL 服务器。
答案1
如果这只是升级期间的临时问题*
,而您唯一的麻烦是传输安全,请暂时将您的主机线路换成 mysql 知道它不负责传输安全的内容:
# connect = host=mysql02 user=vimbadmin password=*** dbname=vimbadmin
connect = host=/run/sergi-temp-maintenance/mysql03.sock user=vimbadmin password=*** dbname=vimbadmin
如果该主机是远程的,因此您还没有本地套接字,请让 SSH 进行安全转发:
ssh -f -N -T -o ExitOnForwardingFailure=yes -L /run/sergi-temp-maintenance/mysql03.sock:/var/run/mysqld/mysqld.sock unprivileged@mysql03
请注意,对于通过套接字的连接,mysql 将自动允许作为连接的本地所有者进行连接,因此您希望该套接字仅可由转发主机上的预期消费者读取,并且目标上的 SSH 用户不要与特权 mysql 用户相关联。
*)
我希望这只是升级期间的暂时现象,因为 Postfix 3.1 听起来也像你想要升级的东西