行,今天得空,就来唠唠前两天折腾那个MySQL虚拟主机的事儿。也不是啥新鲜技术,就是想让我的MySQL数据库能像个独立的主机一样,让别的机器或者程序能直接连上来用,省得传来传去的麻烦。
开始折腾
就喜欢自己动手搞。我是在我那台旧的笔记本上装个Linux系统,虚拟机啥的我懒得弄,直接装的。装完系统,第一件事就是把MySQL给装上。这个过程倒是没啥坑,用包管理器直接就装好,版本也还行,不算太旧。
装完MySQL,默认它只能自己连自己,就是那个127.0.0.1
。这可不行,我要的是“虚拟主机”的效果,得让局域网里其他电脑也能访问到。
改配置文件
这时候就得去改MySQL的配置文件。这玩意儿藏得还挺深,不同系统、不同安装方式放的地方还不一样。我用find
命令配合grep
瞎找一通,总算在一个犄角旮旯里找到那个叫还是的文件,记不清,反正就是主要的配置文件。
打开一看,里面密密麻麻一堆配置项。咱也看不懂那么多,就凭着感觉找那个bind-address
。果然,默认写的是127.0.0.1
。关键就在这儿,得把它改。改成啥?改成0.0.0.0
,意思就是监听所有网络接口,谁来都接待。你要是只想让某台特定的机器连,也可以写那台机器的IP地址,不过我当时图省事,就直接0.0.0.0
。
改完这个,保存文件。别忘,改完配置得重启MySQL服务才能生效。我当时直接systemctl restart mysql
(或者是service mysql restart
,看你系统是啥),让它重新加载配置。
防火墙和用户权限
重启完服务,我心想这下总该行?结果用另一台电脑试着连,还是不行!当时就有点烦躁。后来一拍脑袋,想起来还有防火墙这道坎。
Linux系统自带防火墙,默认是不让外面随便访问端口的。MySQL默认用的是3306端口,我得把这个端口给放开。查查防火墙命令(我用的是firewalld
),加条规则,允许外部访问TCP的3306端口。加完规则还得reload
一下防火墙配置。
防火墙搞定,还差一步。MySQL里面得有个用户允许从远程登录才行。总不能直接用root用户,那太危险。于是我登录到MySQL命令行里面:
- 先创建一个新用户:比如叫
remote_user
,密码设复杂点。关键是要指定这个用户能从哪里登录,用'remote_user'@'%'
,那个就表示允许从任何IP地址登录。要是只想让某个IP登录,就把换成那个IP地址,比如'remote_user'@'192.168.1.100'
。 - 然后给这个用户授权:光创建用户还不行,得给它操作数据库的权限。比如给它某个特定数据库的所有权限,用
GRANT ALL PRIVILEGES ON 数据库名. TO 'remote_user'@'%';
这样的命令。 - 刷新权限:
FLUSH PRIVILEGES;
,让刚才的修改立刻生效。
连接测试
所有这些都搞定之后,我心里踏实多。回到另一台电脑,打开一个数据库连接工具(随便啥工具都行,Navicat、DBeaver或者命令行客户端),输入我装MySQL那台机器的IP地址、端口号3306、刚才创建的用户名remote_user
和它的密码。
点一下连接按钮,这回成! 看到成功连接的提示,心里那叫一个舒坦。折腾半天,总算没白费功夫。
我局域网里的其他机器就能直接把这台装MySQL的电脑当作一个数据库服务器来用,确实方便不少。虽然过程有点小波折,特别是防火墙和用户权限那块儿容易忘,但搞定之后还是挺有成就感的。这就是自己动手实践的乐趣。