主机Navicat访问远程Ubuntu中MySQL

先简单说一下,mysql-server 安装后可以通过默认用户密码登录(mysql本身提供,在/etc/mysql/demian.cnf下查看,如下图) 或者 root用户登录(默认没有密码),

你自己的用户(普通用户)是无法登陆的,验证:终端输入:mysql -u 你的用户 -p, 会报错,原因是你的用户不在 mysql 用户组中,无法访问mysql服务。

因此,远程登录必须用mysql用户组中的用户登录,也就是默认下可以使用 root 用户登录,而用 ‘你的用户’ 无法登录。所以需要把 你的用户 放入mysql用户组中。

先说选择你的用户远程登录

其实就是创建用户,只不过创建一个跟你的用户同名的用户(你要创建不同名的也可,但是何必搞个新的),再直接一点就是把 你的用户 添加到mysql的用户组(添加到user表中),

1.先确认配置文件绑定端口号注释掉:

sudo vim /etc/mysql/mysql.conf.d/ /mysqld.cnf 

文件打开后将    bind-address  = 127.0.0.1    这一行注释掉,此行不注释只能本机登录。

2.登录mysql, 可以用上述默认用户登录,也可root用户登录

sudo mysql -u root -p

3.进入mysql后创建一个用户(假设你的用户是hello,那就也创建一个hello用户吧!)

create user 'hello'@'%' identified by '123456';

这里%表示所有远程主机能登录,不能是localhost。密码自定。

4.然后给此用户赋予权限

grant all privileges on *.* to 'hello'@'%';
flush privileges;

赋予权限这个语句特别说明,后面如参数identified by '密码' with option之类的在高版本不支持了,新的高版本参数不一样,你必须确认你的版本才去用,否则报参数错误。我这条8.0版本可用

5.退出mysql并重启mysql。

exit

sudo service mysql restart

结果在物理机Navicat上常规登录如下,直接通过你的数据库用户名密码登录,且在你的云机输入 mysql -u 你的用户 -p  密码回车已经不报错了!

再说一下用root用户远程登录

其实本质和上面一样,只不过root用户默认存在于mysql用户组中,无需创建。

但是需要要改一个host字段为%,表示任一主机可远程连接。默认为localhost

而且root用户默认无密码,必须设置,否则远程无法通过root用户空密码登录(普通用户空密码可以登陆,比如上面hello用户可以不设置密码而空密码登录)

解决如下:

1.同样你得确认配置文件绑定本机端口号注释掉,方法如上。

2.设置host为%

进入mysql后执行

use mysql;
update user set host = '%' where user = 'root';

可以 select user,host from user;  看到root对应的host值已经更改为%

2.修改root用户密码

alter user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';

退出重启

结果在物理机Navicat上常规登录如下

### 如何从 Windows 中的 Navicat 连接到 Ubuntu 上的 MySQL #### 配置 UbuntuMySQL 服务以支持远程访问 为了使 Navicat 能够成功连接到 Ubuntu 上运行的 MySQL 数据库,需要先完成以下配置: 1. **更新并安装 MySQL** 使用 `apt` 命令来更新系统软件包列表,并安装最新版本的 MySQL Server 和客户端工具。这可以通过以下命令实现: ```bash sudo apt update sudo apt install -y mysql-server libmysqlclient-dev ``` 此外,还需要运行安全脚本来设置密码策略和其他安全性选项[^2]。 2. **修改绑定地址允许外部连接** 默认情况下,MySQL 只监听本地回环接口 (127.0.0.1),这意味着它仅接受来自同一台机器内部的应用程序请求。要启用远程访问,则需编辑 MySQL 主配置文件 `/etc/mysql/mysql.conf.d/mysqld.cnf` 并更改 bind-address 参数为 `0.0.0.0` 或具体的 IP 地址以便接收任何网络适配器上的传入流量。具体操作如下所示: ```bash sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf ``` 找到行 `bind-address = 127.0.0.1` 改成 `bind-address = 0.0.0.0` 后保存退出[^3]。 3. **重启 MySQL 服务应用变更** 修改完成后记得重新启动 MySQL 服务让新的设定生效: ```bash sudo systemctl restart mysql.service ``` 4. **创建具有适当权限的新用户账户用于远程登录** 登录至 MySQL 控制台并通过 GRANT 权限语句赋予新建立好的用户名字及其主机名组合相应的数据库对象操作权利。例如下面的例子展示了如何授予名为 'myuser' 密码设为'mypassword', 对于所有来自于任意位置(`%`)的数据表拥有 SELECT, INSERT, UPDATE 和 DELETE 特权: ```sql CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword'; GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'; FLUSH PRIVILEGES; ``` 5. **防火墙规则调整开放必要端口** 如果启用了 UFW(Uncomplicated Firewall), 则可能还需添加例外放行默认用来通信的 TCP/3306 端口号给外界设备尝试连进来用: ```bash sudo ufw allow 3306/tcp sudo ufw reload ``` #### 设置 Navicat for Windows 客户端进行连接 当上述服务器端准备工作全部就绪之后,在 Navicat For Windows 应用里按照下述指引去新增一个 MySQL Connection: 1. 开始界面点击左上角 “新建连接”,选择类型为 "MySQL"; 2. 输入目标 Linux VM 的公网IP或者局域网内的私有IPv4作为 Hostname/IP Address 字段值; 3. Port Number 维持标准即 3306 不变除非之前自定义过其他数值; 4. Username 键入刚才设立的那个可以跨网段认证的身份标识符比如 myuser; 5. Password 处填写对应的密钥串也就是前面指定过的字符串形式如mypassword; 6. 测试链接看能否正常握手如果一切顺利的话应该会弹窗提示成功的消息框; 最后确认无误提交保存即可随时调取该条目快速恢复先前中断的工作流程了! ```python # 示例 Python 脚本验证连接状态 import pymysql.cursors connection = pymysql.connect(host='your_ubuntu_server_ip', user='myuser', password='mypassword', database='testdb', cursorclass=pymysql.cursors.DictCursor) try: with connection.cursor() as cursor: sql = "SELECT `version()`;" cursor.execute(sql) result = cursor.fetchone() print(result) finally: connection.close() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值