创建mysql普通用户须先用root登录,再执行create user命令;授权需grant配合(mysql 8.0+无需flush privileges);连接失败优先排查host匹配、认证插件兼容性及网络端口。

创建 MySQL 普通用户要先连上 root,再用 CREATE USER
普通用户不能直接从操作系统创建,必须在 MySQL 内部用 SQL 命令添加。前提是已用 root 或有 CREATE USER 权限的账号登录 MySQL 服务(如 mysql -u root -p)。
常见错误是直接在系统 shell 下执行类似 adduser mysqluser,这完全无效——MySQL 用户和系统用户毫无关系。
-
CREATE USER 'devuser'@'localhost' IDENTIFIED BY 'strong_pass123';:仅允许本机连接 -
CREATE USER 'webapp'@'%' IDENTIFIED BY 'aBc9XyZ!';:允许任意 IP 连接(生产环境慎用) - MySQL 8.0+ 默认用
caching_sha2_password认证插件,旧客户端可能连不上;如需兼容,加IDENTIFIED WITH mysql_native_password BY 'xxx'
授权要分两步:GRANT + FLUSH PRIVILEGES(MySQL 5.7 及更早必须)
只执行 CREATE USER 不等于能操作数据库——新用户默认没有任何权限。必须显式授权,且注意版本差异:
- MySQL 8.0+ 推荐用
GRANT SELECT, INSERT ON mydb.* TO 'devuser'@'localhost';,执行后权限立即生效 - MySQL 5.7 及更早:
GRANT后必须运行FLUSH PRIVILEGES;才能生效(否则权限查不到) - 避免用
GRANT ALL PRIVILEGES ON *.*给普通用户,最小权限原则:比如只读就只给SELECT,写日志表就只授权那个表 - 如果授权时提示
ERROR 1410 (42000): You are not allowed to create a user with GRANT,说明当前登录用户没GRANT OPTION权限
用户配置文件 .my.cnf 要放对位置,且权限必须是 600
普通用户想免密登录,常把账号密码写进 ~/.my.cnf(Linux/macOS)或 %USERPROFILE%\my.ini(Windows)。但容易因路径或权限出错:
- 文件必须放在用户主目录下:
/home/username/.my.cnf,不是/etc/my.cnf(那是全局配置) - 内容格式严格:
[client] user=devuser password=strong_pass123 host=localhost
- Linux/macOS 下必须运行
chmod 600 ~/.my.cnf,否则 MySQL 会拒绝读取(报错WARNING: option 'password' will be ignored) - Windows 用户注意:MySQL 优先读
my.ini,不是.my.cnf;若两者共存,以my.ini为准
连接失败时优先检查 host 匹配、认证插件、网络层是否通
用户建好了、授权也给了,还是连不上?别急着删重建,先看这三个点:
- 检查
SELECT User, Host FROM mysql.user;输出中,用户名后的Host值是否匹配你的连接来源(比如你从远程连,但用户只定义了'user'@'localhost') - MySQL 8.0+ 新建用户默认用
caching_sha2_password,而老版本客户端(如 MySQL Workbench 6.x、某些 Python MySQLdb 驱动)不支持;可临时改插件:ALTER USER 'devuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'xxx'; - 确认 3306 端口没被防火墙拦住:
telnet your-server-ip 3306或nc -zv your-server-ip 3306;本地连不上则看bind-address是否设为127.0.0.1(禁止外部)或0.0.0.0(监听所有)
host 匹配和认证插件是两个最常被忽略的环节,尤其跨版本迁移或容器部署时,几乎必踩一次。











