1. 裝mysql
司木 - CentOS(linux) 下MySQL8.0.11的yum安裝
就按照連接里面的做就行。簡(jiǎn)單來(lái)說(shuō)就是不要裝最新的el8,裝老一個(gè)版本的。el8安裝過(guò)程會(huì)一大堆軟件包需求blablabla錯(cuò)誤。這次折騰給我的最大教訓(xùn)就是啥都別用最新版的,盡量用相對(duì)老一版的穩(wěn)定版。
如果你和我一樣覺(jué)得mysql8密碼太煩想搞個(gè)簡(jiǎn)單的,那么應(yīng)該需要改一下密碼策略:
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;
查看并確認(rèn)權(quán)限:
SHOW VARIABLES LIKE 'validate_password%';
參考:
Coder-Qian - Mysql 8.0.1修改密碼策略
2. 修改虛擬機(jī)配置從而使得主機(jī)能訪問(wèn)虛擬機(jī)的數(shù)據(jù)庫(kù)。
這里試下來(lái),一個(gè)比較靠譜的方法就是使用NAT,然后把虛擬機(jī)的端口轉(zhuǎn)發(fā)。這樣就可以在主機(jī)用localhost訪問(wèn)了。
具體請(qǐng)看: YYlxid - win下連接virtualbox中l(wèi)inux虛擬機(jī)的mysql
這里有一個(gè)小細(xì)節(jié)。你要從主機(jī)訪問(wèn)虛擬機(jī),那為了方便使用各種工具進(jìn)行訪問(wèn)和操作,你主機(jī)一般都是裝了mysql一套的。這樣的話如果你不特別進(jìn)行配置,那么主機(jī)和虛擬機(jī)的端口都是3306。這樣的話你如果從主機(jī)訪問(wèn)localhost:3306,走的就是主機(jī)的mysql而非虛擬機(jī)的。所以應(yīng)該在虛擬機(jī)設(shè)置的端口轉(zhuǎn)發(fā)那里,把主機(jī)的端口改一個(gè)不一樣的。比如我就改為了33306。
3. 修改mysql配置文件和linux防火墻
配置完了NAT和端口轉(zhuǎn)發(fā),還需要改一下虛擬機(jī)里的mysql配置和防火墻配置從而讓外部能訪問(wèn)進(jìn)來(lái)。首先改下配置文件,比如用vim,那么就打開(kāi):
vim /etc/my.cnf
在最底下加一行:
bind-address=127.0.0.1
其實(shí)bind-address這個(gè)值還有兩種填方法:
bind-address=0.0.0.0
或者:
bind-address={你虛擬機(jī)的實(shí)際ip}
要查看虛擬機(jī)的實(shí)際ip,可以敲ifconfig,或者GNOME右上角點(diǎn)網(wǎng)絡(luò)圖標(biāo)打開(kāi)設(shè)置也可以看到。
搞定以后重啟mysqld服務(wù):
systemctl restart mysqld
然后修改防火墻配置,這里注意下在centos7里不再是iptables,而是firewall-cmd了:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
成功了應(yīng)該跳個(gè)success。
然后重啟防火墻:
firewall-cmd --reload
參考:
How to Allow Remote Connections to MySQL Database on RHEL/CentOS
Centos 7 save iptables settings - serverfault
至此,配置就完成了。在虛擬機(jī)啟動(dòng)的情況下,在主機(jī)用navicat, datagrip等工具訪問(wèn)localhost:33306(如果你和我一樣把主機(jī)端口映射為33306的話),就可以正常使用了。
4. 使用vscode插件訪問(wèn)虛擬機(jī)mysql可能遇到這樣一個(gè)問(wèn)題。
我這邊還進(jìn)一步進(jìn)行了這樣一個(gè)折騰,就是使用vscode連接數(shù)據(jù)庫(kù)。那么這里就要裝些mysql插件了。具體請(qǐng)參考:sigmarising - 使用 Visual Studio Code 鏈接 MySql 數(shù)據(jù)庫(kù)并進(jìn)行查詢
如果你和我一樣,修改過(guò)密碼策略然后用了個(gè)簡(jiǎn)單密碼,那么你在使用vscode插件登錄的時(shí)候,可能會(huì)報(bào)這個(gè)錯(cuò):
ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading Mysql client
但是用命令行和其它工具明明可以連接啊,為什么呢?這個(gè)過(guò)程復(fù)現(xiàn)太折騰了,我盲猜是這個(gè)原因:在虛擬機(jī)里的mysql改過(guò)了策略,但是在主機(jī)的mysql沒(méi)改。所以解決方法,就是在命令行,用賬密登錄,然后再把上面的修改密碼策略的操作搞一遍(沒(méi)錯(cuò),盡管你確實(shí)是用弱密碼登錄成功了,但是你在修改的過(guò)程中就會(huì)發(fā)現(xiàn)策略還是要改)。這樣操作完,再用vscode插件就可以登錄并操作了。阿西,終于搞完了。