You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过systemd部署的MySQL 8.0.33多实例无法连接非默认实例

通过systemd部署的MySQL 8.0.33多实例无法连接非默认实例

看起来你遇到的核心问题是MySQL客户端连接时的socket优先级和新实例root用户的认证方式导致的,咱们一步步来解决:

1. 为什么之前的连接会“串”到默认实例?

当你用localhost作为主机名时,MySQL客户端会优先使用Unix Socket文件建立连接,而不是你指定的TCP端口。你之前只加了--port=3307,但没指定对应实例的socket路径,客户端自然就 fallback 到默认的/var/run/mysqld/mysqld.sock,这就是为什么输入默认实例的密码能连上,但status显示是默认实例的原因。

2. 正确连接非默认实例的方法

直接指定对应实例的socket文件就能登录:

  • 连接seeds实例:
mysql --socket=/var/run/mysqld-seeds/mysqld.sock -u root
  • 连接manofmystery实例:
mysql --socket=/var/run/mysqld-manofmystery/mysqld.sock -u root

MySQL 8.0新初始化的实例中,root@localhost默认使用auth_socket插件认证——它允许本地系统root用户通过socket直接登录,不需要密码,这和你日志里提到的“空密码root用户”并不冲突(空密码是指密码认证方式下的状态,但实际生效的是socket认证)。

3. 设置密码并允许TCP/IP连接

成功登录实例后,你需要修改root用户的认证方式为密码认证,同时设置密码,这样之后就能用端口连接了:
在MySQL命令行中执行:

-- 修改localhost用户的认证方式和密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的安全密码';
-- 如果需要用127.0.0.1通过TCP连接,创建对应权限的用户
CREATE USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY '你的安全密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION;
-- 刷新权限使设置生效
FLUSH PRIVILEGES;

4. 验证连接

现在你可以用两种方式连接非默认实例了:

  • 通过socket:
mysql --socket=/var/run/mysqld-seeds/mysqld.sock -u root -p
  • 通过TCP/IP端口:
mysql --host=127.0.0.1 --port=3307 -u root -p

额外检查点

确保你的非默认实例数据目录权限正确,MySQL进程需要读写权限:

sudo chown -R mysql:mysql /var/lib/mysql-seeds /var/lib/mysql-manofmystery
sudo chmod -R 700 /var/lib/mysql-seeds /var/lib/mysql-manofmystery

备注:内容来源于stack exchange,提问作者Fred Polli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 16:28:08