helen 2019-06-20
因为一段时接没有用MySQL,有点遗忘,遇到些小问题,在这里总结下。
目标:使宿主机(OS X)下的Workbench访问VirtualBox VM(Ubuntu 14.04)中部署的MySQL 5.6服务器。
首先确定Virtualbox中VM的网络设置,设置为Bridged Adaptor(桥接适配器)。这样虚拟机可以独立于宿主机存在同一网段中,获得自己的ip地址,且宿主机可以和虚拟机双向通信,同时宿主机和虚拟机都可以访问外网。
对于家庭网络环境,可以不为虚拟机设置静态ip,因为虚拟机很可能一直会获得相同的ip。机器加入网络时,会尝试发送一个带有上次ip地址的DHCP请求,因为是家庭网络,网段内机器数量有限,上一次登录使用的ip地址被其他机器占用的可能性不大。如果ip发生改变,也可以修改Workbench的连接设置。
如果需要设置静态ip地址:
ip地址:确保虚拟机的ip地址和宿主机的ip地址在同一网段内
网关地址:路由器的内网ip地址
DNS:查询当地ISP的DNS地址,或者直接填入路由器的内网ip地址,一般路由都有DNS代理功能
最后检查宿主机和虚拟机是否能相互ping通,是否都能访问外网。
需要做两件事儿。第一,MySQL默认和localhost绑定,不监听任何来自网络的请求。以Ubuntu为例(其他发行版的MySQL配置文件位置可能不一致):
$ sudo vi /etc/mysql/my.cnf
注释掉这行:
bind-address = 127.0.0.1
第二件事,要为一个用户设置远程访问的权限。首先以MySQL的root用户从客户端登录MySQL,如果要为root用户设置远程访问权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
如果想要建立一个新的远程登录用户'new_user':
CREATE USER 'new_user'@'%' IDENTIFIED BY 'password_to_be_set'; GRANT ALL PRIVILEGES ON *.* TO 'new_user'@'%'; FLUSH PRIVILEGES;
这里通配符'%'表示任何主机。[WITH GRANT OPTION]表示权限传递。‘*.*’表示privilege level。关于MySQL用户管理和SQL语法的细节,参见文档:
重启MySQL服务。
防火墙可能设置了一些规则屏蔽了MySQL监听端口的正常通信。因为Ubuntu 14.04的防火墙默认是关闭状态,这里不需要做任何事情。
最后确保连接设置得与MySQL服务器的ip与端口一致,应该就可以正常连接到服务器了。