mysql本地连接失败主因是服务未监听tcp端口或ipv4/ipv6解析冲突;认证失败因8.0+默认caching_sha2_password协议不兼容旧客户端;字符集乱码源于latin1默认配置未改utf8mb4。

MySQL 服务启动后连不上 localhost 是什么情况
多数人装完 MySQL,mysql -u root -p 命令能进,但用 Navicat、DBeaver 或 MySQL Workbench 连 localhost 就报错 —— 典型是服务没监听 TCP 端口,或绑定了 127.0.0.1 却被客户端解析成 IPv6 的 ::1。
检查方法:
netstat -tuln | grep :3306如果只看到
127.0.0.1:3306,说明只接受 IPv4 回环;如果没输出,说明 skip-networking 开着或 bind-address 被设成了 127.0.0.1 以外的值(比如 0.0.0.0 但防火墙拦了)。
- 确认
my.cnf(Linux)或my.ini(Windows)里没有skip-networking = 1 -
bind-address推荐设为127.0.0.1(仅本地)或0.0.0.0(全网卡,注意防火墙) - 改完重启服务:
sudo systemctl restart mysql(Linux)或服务管理器重启 MySQL 服务
Navicat 连接时提示 “Client does not support authentication protocol”
这是 MySQL 8.0+ 默认用 caching_sha2_password 插件,而老版本 Navicat(v12 以前)、某些 Python 驱动(如 PyMySQL 0.9 以下)不支持。不是密码错了,是认证协议不兼容。
临时解决(开发环境可用):
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';然后
FLUSH PRIVILEGES;。
- 生产环境不建议降级认证方式,应升级客户端工具或驱动
- 若用 Docker 启 MySQL 8,加启动参数:
--default-authentication-plugin=mysql_native_password - 连接字符串里显式指定 auth plugin(如 JDBC:
?serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false)
DBeaver 连接 MySQL 8 报错 “Public Key Retrieval is not allowed”
本质是 MySQL 8 的安全策略变更:当服务端要求公钥交换(比如用 caching_sha2_password),客户端默认禁止自动获取公钥,防止中间人攻击。DBeaver 默认关掉了这个开关。
解决方法是在连接配置的 Driver Properties 里手动加两个参数:
-
allowPublicKeyRetrieval→ 设为true -
useSSL→ 设为false(本地开发可关;生产必须开 SSL 或配证书)
注意:不能只改 URL,DBeaver 的 MySQL 驱动(MySQL Connector/J)必须 ≥ 8.0.15 才完整支持 caching_sha2_password;低于此版本即使加参数也无效。
客户端连上但查不到数据库或表名乱码
常见于 Windows 安装包默认字符集是 latin1,而建库时没指定 CHARACTER SET utf8mb4,导致客户端发 UTF-8 请求,服务端按 latin1 解,结果表名显示成问号或乱码符号。
验证当前连接字符集:
SHOW VARIABLES LIKE 'character_set%';<br>SHOW VARIABLES LIKE 'collation%';关键看
character_set_client、character_set_connection、character_set_database 是否都是 utf8mb4。
- 永久修复:在
my.cnf的[mysqld]段加:character-set-server = utf8mb4collation-server = utf8mb4_unicode_ci - 客户端工具(如 Navicat)连接时,在高级设置里勾选「使用 MySQL 字符集」或手动填
utf8mb4 - 已有库表乱码?
ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;,再逐表ALTER TABLE,但数据已损毁的需从备份恢复
字符集这事一旦漏掉初始化配置,后面补救成本远高于起步时多敲两行配置。










