MySQL 创建用户与开启远程登录完整教程
MySQL 创建用户与开启远程登录完整教程
很多人在安装完:
1 | MySQL 8 |
后,会继续遇到:
- Navicat 无法连接
- 远程连接失败
- 3306 无法访问
- Access denied
- 程序无法连接数据库
原因通常:
1 | MySQL 默认禁止远程连接 |
本篇文章教你:
- 创建 MySQL 用户
- 创建数据库
- 开启远程访问
- 配置 bind-address
- 开放 3306 端口
- 使用 Navicat 远程连接
一、登录 MySQL
使用 root 登录:
1 | mysql -u root -p |
输入之前设置的密码:
1 | mmkk**789 |
二、创建数据库
例如:
创建:
1 | aix |
数据库。
执行:
1 | CREATE DATABASE aix; |
查看数据库是否创建成功
执行:
1 | SHOW DATABASES; |
会看到:
1 | aix |
说明创建成功。
三、创建本地用户
创建:
1 | aix |
用户。
密码:
1 | aix**888 |
执行:
1 | CREATE USER 'aix'@'localhost' |
localhost 是什么意思?
1 | 仅允许本机连接 |
例如:
- Java 程序
- PHP
- Node.js
运行在:
1 | 同一台服务器 |
时可以使用。
四、授予数据库权限
执行:
1 | GRANT ALL PRIVILEGES |
aix.* 是什么意思?
表示:
1 | aix 数据库下所有表 |
ALL PRIVILEGES
表示:
1 | 所有权限 |
包括:
- 查询
- 新增
- 删除
- 修改
- 创建表
五、开启远程登录
如果你需要:
- Navicat
- DBeaver
- 本地程序
- 远程服务器
连接 MySQL。
必须:
1 | 开启远程用户 |
创建远程用户
执行:
1 | CREATE USER 'aix'@'%' |
% 是什么意思?
表示:
1 | 允许任意 IP 连接 |
授予远程权限
执行:
1 | GRANT ALL PRIVILEGES |
六、刷新权限
执行:
1 | FLUSH PRIVILEGES; |
七、退出 MySQL
执行:
1 | EXIT; |
八、配置 MySQL 允许远程连接
默认情况下:
1 | MySQL 只监听本地 |
即:
1 | 127.0.0.1 |
所以:
1 | 远程无法访问 |
编辑 MySQL 配置文件
Ubuntu 通常:
1 | vi /etc/mysql/mysql.conf.d/mysqld.cnf |
修改 bind-address
找到:
1 | [mysqld] |
修改:
1 | bind-address = 127.0.0.1 |
为:
1 | bind-address = 0.0.0.0 |
0.0.0.0 是什么意思?
表示:
1 | 监听所有 IP |
这样:
1 | 远程设备才能连接 |
九、重启 MySQL
执行:
1 | sudo systemctl restart mysql |
十、开放 3306 端口
Ubuntu 如果开启了:
1 | ufw 防火墙 |
需要开放:
1 | 3306 |
开放端口
执行:
1 | sudo ufw allow 3306/tcp |
查看防火墙状态
执行:
1 | sudo ufw status |
云服务器额外注意
如果你使用:
- AWS
- 阿里云
- 腾讯云
- Oracle Cloud
还需要:
1 | 在安全组开放 3306 |
否则:
1 | 外部仍然无法访问 |
测试远程连接
本地电脑:
例如:
1 | Navicat |
配置:
| 配置 | 内容 |
|---|---|
| 主机 | 服务器 IP |
| 端口 | 3306 |
| 用户名 | aix |
| 密码 | aix**888 |
查看 MySQL 当前监听状态
执行:
1 | sudo ss -tunlp | grep 3306 |
如果看到:
1 | 0.0.0.0:3306 |
说明:
1 | 远程监听成功 |
推荐安全方案
生产环境:
1 | 不要直接开放 root |
建议:
- 单独业务用户
- 限制数据库权限
- 限制来源 IP
- 使用强密码
更安全。
推荐权限方案
| 用户 | 用途 |
|---|---|
| root | 管理 |
| aix | 业务程序 |
| backup | 备份 |
| readonly | 只读查询 |
常见问题
1. Access denied
原因:
- 用户密码错误
- 权限未刷新
- 用户 Host 不匹配
2. 3306 无法连接
检查:
- 防火墙
- 安全组
- bind-address
- MySQL 是否启动
3. Navicat 超时
通常:
1 | 是安全组没开放 |
或者:
1 | 防火墙拦截 |
查看所有用户
执行:
1 | SELECT user, host FROM mysql.user; |
删除用户
例如:
1 | DROP USER 'aix'@'%'; |
修改密码
执行:
1 | ALTER USER 'aix'@'%' |
总结
MySQL 开启远程连接:
核心步骤:
| 步骤 | 内容 |
|---|---|
| 1 | 创建数据库 |
| 2 | 创建用户 |
| 3 | 授权 |
| 4 | 修改 bind-address |
| 5 | 重启 MySQL |
| 6 | 开放 3306 |
重点:
1 | bind-address 和 防火墙 |
是:
1 | 最容易遗漏的地方 |
非常适合:
- Ubuntu
- 云服务器
- Java 后端
- Node.js
- Vue 项目
- Navicat 远程管理