通过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
相关产品推荐
相关产品推荐

