MySQL多实例共存失败主因是socket、datadir、服务名及配置路径未隔离;启动失败常因路径占用或权限问题;连接时localhost默认走socket易连错实例;需显式指定端口、socket或使用绝对路径调用。

不能只改端口就认为能共存——MySQL 启动失败、连错库、删错数据,八成是因为 socket、datadir、服务名或配置加载路径没隔离清楚。
mysqld 启动失败:Address already in use 或静默退出
根本不是端口冲突那么简单。mysqld 启动时会尝试绑定 port、创建 socket 文件、写入 pid-file、初始化 datadir、写 error-log ——任一路径被占用或权限不对,都会导致启动失败或降级为后台静默退出(尤其在 systemd 或 Windows 服务下)。
- 检查
socket路径是否被另一个实例占着:ls -l /var/run/mysqld/(Linux)或看my.ini里socket=指向的文件是否存在且可写 -
datadir必须是全新空目录,不能复用旧实例的/var/lib/mysql;否则mysqld会尝试读取 incompatible 的 ibdata1,直接 abort - Windows 下注册服务前必须先
net stop MySQL,否则mysqld --install MySQL80会因服务名冲突失败,错误藏在事件查看器里 - Linux systemd 启动失败时,别只看
systemctl status mysqld80,要加-l:systemctl status -l mysqld80,真实错误在最后一行
mysql 命令连错实例:localhost 不等于 127.0.0.1
这是最隐蔽也最危险的问题。mysql -u root -p 默认走 socket 连接,而 socket 路径由服务端配置决定——你没指定,它就去连系统默认路径(如 /var/run/mysqld/mysqld.sock),大概率连到第一个启动的实例上。
- 强制走 TCP:用
mysql -h 127.0.0.1 -P 3307 -u root -p,绕过 socket 查找逻辑 - 显式指定 socket:用
mysql -S /tmp/mysql80.sock -u root -p,确保路径与my80.cnf中socket=完全一致 - 别信
localhost:它在 MySQL 协议里是 socket 触发字,不是 DNS 名;想连哪个实例,就得明确告诉客户端用哪个端口或哪个 socket - PATH 里混着两个
mysql?用绝对路径调用:/usr/local/mysql80/bin/mysql -P 3307 -u root -p
MySQL 8.0 连接报 ERROR 2059:caching_sha2_password 认证失败
MySQL 8.0 默认用 caching_sha2_password 插件,但老版本 PHP/PDO、某些 GUI 工具(如旧版 DBeaver、Navicat)不支持,直连就报 ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded。
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
- 临时方案(开发机可用):在
my80.cnf的[mysqld]段加一行:default_authentication_plugin=mysql_native_password,然后重启实例 - 长期方案(推荐):登录后立刻执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; - 注意:该语句只对当前用户生效;若应用用的是其他用户(如
app@127.0.0.1),得对应改那个用户 - 别在初始化前就设插件——
--initialize生成的 root 密码绑定的是默认插件,改插件再初始化才有效
Windows 下 my.ini 编码错误:Found option without preceding group
Win10 记事本默认保存为 UTF-8 with BOM,mysqld 解析配置时会在第一行看到不可见字符,报错 Found option without preceding group in config file at line 1,然后整个配置被忽略,退回到默认行为(比如又去监听 3306)。
- 用 Notepad++ 或 VS Code 打开
my.ini,编码菜单选「ANSI」或「UTF-8 without BOM」再保存 - 验证方式:用
file my.ini(Linux/macOS)或 PowerShell 中Get-Content my.ini -Encoding Byte | Select -First 5看前几个字节,BOM 是EF BB BF,ANSI 则没有 - 配置文件开头必须是
[mysqld],不能有空行、注释或空格在它前面 - Windows 服务注册命令中
--defaults-file=后的路径必须是绝对路径,相对路径会静默失败
真正麻烦的从来不是“怎么装”,而是“怎么让两个实例彼此看不见”——每个路径、每个参数、每次连接,都得显式声明目标,靠默认值或 PATH 顺序来赌运气,迟早出事。










