远程连接至Linux的MySQL数据库教程(超详细,含静态IP配置以及2002 (10060)报错指导)
在软件开发项目中,往往是一个团队协同工作,团队成员分布在不同的地理位置,使用的是不同的IP地址,远程连接可以让开发人员在自己的本地开发环境中,直接对部署在 Linux 服务器上的 MySQL 数据库进行操作。
所以作为一个程序员,学会如何远程连接至Linux的MySQL数据库是很重要的,这篇教程旨在教会大家使用本机连接Linux虚拟机中的MySQL数据库,感谢大家的支持。
一、找到Linux的IP地址
1.首先一定要明白自己的Linux的IP地址,远程连接必须找到IP地址才能连接;最好是把Linux的IP地址设置为静态IP,这样才方便连接。
接下来教大家如何设置静态IP
已设置静态IP,但是不知道怎么远程连接至Linux数据库的同学移步第二步,
知道如何连接至Linux数据库,但是不幸出现报错的同学移步第三步。
2.点击VMware的编辑后,在下拉列表中找到虚拟网络编辑器,点击进入之后,点击右下角的更改设置即可进入上图所示界面。
点击VMnet8,确保勾选项与上图一致,开始设置子网IP以及子网掩码,子网IP前两位192.168固定不变,不熟悉计网的同学可以直接按上图设置,本教程不展开讲述计网知识。 点击确认即可完成修改(之前自己有过胡乱修改,心里没底的可以点击左下角的还原默认设置,将设置还原为默认的情况再进行配置)。
3.完成VM的配置之后进入Linux虚拟机,然后在设置中找到网络,点击"有线"选项卡的开关旁边的小齿轮,进入上图,点击"手动"开始配置。
这一步与上一步是有关联的,必须根据上一步所填的子网IP进行IP地址填写,前三位192.168.100与之前的子网掩码前三位相同,第四位可以自行填写,取1~254即可。
子网掩码依旧255.255.255.0。
网关一般设置为192.168.100.1,即为子网内的第一个可用IP地址。
DNS设置为与网关一致。
完成配置之后点击应用,然后对"有线"选项卡进行一次关闭和一次开启(开关在小齿轮左边),也就是重启网络的作用。这时点击小齿轮,可以看到配置的成果。
二、进行远程连接数据库
安装与配置Linux数据库的操作不多赘述,网上教程已经相当完备,无论是通过apt命令还是直接解压,都有非常详细的教程。
1.首先做好准备工作,创建一个有一定权限的MySQL用户。
为了安全考虑,一般不直接使用root用户进行数据库操作,而是创建一个拥有一定操作权限的用户代为操作。 先使用root用户登录数据库
sql
mysql -u root -p
输入密码之后就可以进行创建用户。 username即可填入创建的用户名,如果想要远程连接就必须使用'%',即为不限制IP地址,否则如'local host'就是限定必须本机登录;password填入你的密码。
sql
CREATE USER 'username'@'%' IDENTIFIED WITH mysql_native_password BY 'password'
可以通过以下代码查看是否创建成功。
sql
-- 查询 mysql.user 表中的用户信息,只展示用户和主机字段
SELECT User,Host FROM mysql.user;
之后就是授予该用户权限,想授权所有权限就用第一段代码; 想授权具体的数据库的所有权限就使用第二段代码。
sql
-- 授予用户 'username' 从任意主机连接时,对所有数据库和所有表的全部权限
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%';
-- 刷新权限,使新的权限设置立即生效
FLUSH PRIVILEGES;
-- 授予用户 'username' 从任意主机连接时,对具体的数据库 'test_db' 的全部权限
GRANT ALL PRIVILEGES ON test_db.* TO 'username'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
至此,准备工作结束。
2.打开navicat或是别的数据库图形化操作软件(此处使用navicat进行演示)
主机这一栏填入我们第一步配置静态IP时配置的IP地址,忘记了可以去虚拟机的网络中查看。
端口一般默认为3306
用户名填入创建的那个用户的用户名
密码也填入你设置的密码
点击"测试连接"即可查看是否连接成功,弹出"连接成功"即可点击"确定",完成连接数据库。
如果是虚拟机没有进行端口配置以及环境配置所导致的报错请看下面的报错指导。
三、远程连接Linux数据库时报错
1.点击"测试连接"之后出现2002 - Can't connect to server on '192.168.100.101'(10060)错误
在账号密码都无错误的情况下,此时多是因为Linux虚拟机尚未配置防火墙,或是该MySQL用户的权限不能进行远程连接,又或者是MySQL的配置文件未修改,下面我将一一进行解决。
2.Linux防火墙尚未配置
Linux防火墙有两个处理方法,第一个是关闭防火墙(最直接但是不推荐),第二个是开放3306端口(推荐),二者选其一即可。
如果过程中出现了
Authorization failed.
Make sure polkit agent is running or run the application as superuser.
请不要忽略命令中的sudo,这代表着以管理员权限执行命令。
(1)关闭防火墙(不推荐)
查看防火墙状态
Linux
sudo systemctl status firewalld
关闭防火墙
Linux
sudo service firewalld stop
(2)开放3306端口(推荐)
查看3306端口状态(返回"no"即为未开放,返回"yes"即为开放)
Linux
sudo firewall-cmd --query-port=3306/tcp
开放3306端口
Linux
sudo firewall-cmd --permanent --add-port=3306/tcp
设置完毕之后重启防火墙
Linux
sudo firewall-cmd --reload
如果想要关闭3306端口
Linux
sudo firewall-cmd --permanent-remove-port=3306/tcp
3.MySQL用户没有远程连接权限
请详细检查该用户是否为'username'@'%',如果不为'%'是无法进行远程连接的,可使用以下命令进行查询。
sql
-- 查询 mysql.user 表中的用户信息,只展示用户和主机字段
SELECT User,Host FROM mysql.user;
如果发现主机名不为'%',请确认当前MySQL用户为root,然后使用下面的命令修改
sql
RENAME USER 'username'@'localhost' TO 'username'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
或者删除该用户,重新按照第二步的步骤创建用户
sql
-- 删除旧用户
DROP USER 'username'@'localhost';
4.MySQL的配置文件尚未进行修改
请在以下三个地址中找到上图界面,将bind-address一行改为上图所示0.0.0.0
根据每人版本不一样,配置文件位置也不同,请挨个尝试,我是Ubuntu24 + mysql8,在第一个地址找到了。
打开文件,不是上图界面就按":q"回车退出。
Linux
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
Linux
sudo vim /etc/mysql/my.cnf
Linux
sudo vim /etc/mysql/mysql.conf.d/mysql.cnf