踩坑实录:vbox虚拟机centos7安装mysql8,然后从w
1. 装mysql
司木 - CentOS(linux) 下MySQL8.0.11的yum安装
就按照连接里面的做就行。简单来说就是不要装最新的el8,装老一个版本的。el8安装过程会一大堆软件包需求blablabla错误。这次折腾给我的最大教训就是啥都别用最新版的,尽量用相对老一版的稳定版。
如果你和我一样觉得mysql8密码太烦想搞个简单的,那么应该需要改一下密码策略:
set global validate_password.policy=0;
set global validate_password.check_user_name=0;
set global validate_password.length=1;
set global validate_password.mixed_case_count=0;
set global validate_password.number_count=0;
set global validate_password.special_char_count=0;
flush privileges;
查看并确认权限:
SHOW VARIABLES LIKE 'validate_password%';
参考:
Coder-Qian - Mysql 8.0.1修改密码策略
2. 修改虚拟机配置从而使得主机能访问虚拟机的数据库。
这里试下来,一个比较靠谱的方法就是使用NAT,然后把虚拟机的端口转发。这样就可以在主机用localhost访问了。
具体请看: YYlxid - win下连接virtualbox中linux虚拟机的mysql
这里有一个小细节。你要从主机访问虚拟机,那为了方便使用各种工具进行访问和操作,你主机一般都是装了mysql一套的。这样的话如果你不特别进行配置,那么主机和虚拟机的端口都是3306。这样的话你如果从主机访问localhost:3306,走的就是主机的mysql而非虚拟机的。所以应该在虚拟机设置的端口转发那里,把主机的端口改一个不一样的。比如我就改为了33306。
3. 修改mysql配置文件和linux防火墙
配置完了NAT和端口转发,还需要改一下虚拟机里的mysql配置和防火墙配置从而让外部能访问进来。首先改下配置文件,比如用vim,那么就打开:
vim /etc/my.cnf
在最底下加一行:
bind-address=127.0.0.1
其实bind-address这个值还有两种填方法:
bind-address=0.0.0.0
或者:
bind-address={你虚拟机的实际ip}
要查看虚拟机的实际ip,可以敲ifconfig,或者GNOME右上角点网络图标打开设置也可以看到。
搞定以后重启mysqld服务:
systemctl restart mysqld
然后修改防火墙配置,这里注意下在centos7里不再是iptables,而是firewall-cmd了:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
成功了应该跳个success。
然后重启防火墙:
firewall-cmd --reload
参考:
How to Allow Remote Connections to MySQL Database on RHEL/CentOS
Centos 7 save iptables settings - serverfault
至此,配置就完成了。在虚拟机启动的情况下,在主机用navicat, datagrip等工具访问localhost:33306(如果你和我一样把主机端口映射为33306的话),就可以正常使用了。
4. 使用vscode插件访问虚拟机mysql可能遇到这样一个问题。
我这边还进一步进行了这样一个折腾,就是使用vscode连接数据库。那么这里就要装些mysql插件了。具体请参考:sigmarising - 使用 Visual Studio Code 链接 MySql 数据库并进行查询
如果你和我一样,修改过密码策略然后用了个简单密码,那么你在使用vscode插件登录的时候,可能会报这个错:
ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading Mysql client
但是用命令行和其它工具明明可以连接啊,为什么呢?这个过程复现太折腾了,我盲猜是这个原因:在虚拟机里的mysql改过了策略,但是在主机的mysql没改。所以解决方法,就是在命令行,用账密登录,然后再把上面的修改密码策略的操作搞一遍(没错,尽管你确实是用弱密码登录成功了,但是你在修改的过程中就会发现策略还是要改)。这样操作完,再用vscode插件就可以登录并操作了。阿西,终于搞完了。