错误原因分析
报错 ERROR 1064 (42000) 是MySQL 8.0 版本的语法不兼容问题 :MySQL 8.0 彻底废弃了 GRANT ... IDENTIFIED BY 这种「授权 + 改密码」二合一的旧语法,必须分两步执行:先创建 / 更新用户,再单独授权,否则就会报语法错误。
✅ 正确执行步骤(MySQL 8.0 专用,可直接复制)
1. 先创建 / 更新 root 用户(允许任意 IP 远程连接)
sql
-- 若用户已存在,先删除旧的(可选,避免冲突)
DROP USER IF EXISTS 'root'@'%';
-- 创建允许任意IP连接的root用户,设置密码为root
CREATE USER 'root'@'%' IDENTIFIED BY 'root';
2. 再给用户分配全部权限
sql
-- 授予root用户所有库、所有表的全部权限,并允许转授权
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
3. 刷新权限,使配置立即生效
sql
FLUSH PRIVILEGES;
📌 补充说明(适配不同场景)
1. 仅允许指定 IP / 网段(更安全,生产环境推荐)
sql
-- 仅允许192.168.124.x网段的机器连接
DROP USER IF EXISTS 'root'@'192.168.124.%';
CREATE USER 'root'@'192.168.124.%' IDENTIFIED BY 'root';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.124.%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
2. 验证用户是否创建成功
sql
-- 查看所有用户权限
SELECT user, host FROM mysql.user;
能看到 root 对应的 host 为 %,说明配置成功。
3. 额外关键配置(避免连接失败)
- 修改绑定地址 :编辑
my.cnf(Linux)/my.ini(Windows),将bind-address = 127.0.0.1改为bind-address = 0.0.0.0或直接注释,然后重启 MySQL 服务 - 开放防火墙 :放行 3306 端口(Linux:
firewall-cmd --permanent --add-port=3306/tcp && firewall-cmd --reload;Windows:防火墙入站规则放行 3306)
⚠️ 版本差异提醒
表格
| MySQL 版本 | 授权语法支持 |
|---|---|
| 5.7 及更早 | 支持 GRANT ... IDENTIFIED BY 二合一语法 |
| 8.0 及更高 | 仅支持「创建用户 + 单独授权」两步语法 |
你当前的环境是 MySQL 8.0,所以必须用分两步的新语法,旧语法会直接报 1064 错误。
✅ 完整一键执行命令(直接复制到 MySQL 命令行)
sql
DROP USER IF EXISTS 'root'@'%';
CREATE USER 'root'@'%' IDENTIFIED BY 'root';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
SELECT user, host FROM mysql.user;