最近在配置MySQL遠程連接的時候發現我的MySQL數據庫采用的是 MariaDB 引擎,與普通的數據庫配置有點不同
經過查找資料終於完成了,特此記錄方便以后查詢
MariaDB 與普通的MySQL數據庫的一個不同在於它的配置文件不止一個,它將不同的數據放入到不同的配置文件中,之前的/etc/mysql/my.cnf內容如下:
從文件中的注釋上來看,它主要有這么幾個配置文件
- /etc/mysql/mariadb.cnf 默認配置文件,
- /etc/mysql/conf.d/*.cnf 設置全局項的文件
- "/etc/mysql/mariadb.conf.d/*.cnf" 設置與MariaDB相關的信息
- "~/.my.cnf" 設置該賬戶對應的信息
這也就是為什么我們在my.cnf做相關設置有的時候不起作用(可能在其他配置文件中有相同的項,MySQL最終采用的是另外一個文件中的設置)。
根據官方的說法, MariaDB為了提高安全性,默認只監聽127.0.0.1中的3306端口並且禁止了遠程的TCP鏈接,我們可以通過下面兩步來開啟MySQL的遠程服務
- 注釋掉skip-networking選項來開啟遠程訪問.
- 注釋bind-address項,該項表示運行哪些IP地址的機器連接,允許所有遠程的機器連接
但是配置文件這么多,這兩選項究竟在哪呢?這個時候使用grep在/etc/mysql/目錄中的所有文件中遞歸查找,看哪個文件中含有這個字符串
我們輸入:
grep -rn "skip-networking" *
,結果如下:
十分幸運的是這兩項都在同一文件中(我自己的是沒有skip-networking項)
我們打開文件/etc/mysql/mariadb.conf.d/50-server.cnf,注釋掉bind-address項,如下:
只有這些仍然不夠,我們只是開啟了MySQL監聽遠程連接的選項,接下來需要給對應的MySQL賬戶分配權限,允許使用該賬戶遠程連接到MySQL
輸入
select User, host from mysql.user;
查看用戶賬號信息:
root賬戶中的host項是localhost表示該賬號只能進行本地登錄,我們需要修改權限,輸入命令:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
修改權限。%表示針對所有IP,password表示將用這個密碼登錄root用戶,如果想只讓某個IP段的主機連接,可以修改為
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.100.%' IDENTIFIED BY 'my-new-password' WITH GRANT OPTION;
注意:此時遠程連接的密碼可能與你在本地登錄時的密碼不同了,主要看你在IDENTIFIED BY后面給了什么密碼
具體的請參考GRANT命令
最后別忘了
FLUSH PRIVILEGES;
保存更改。再看看用戶信息:
這個時候發現相比之前多了一項,它的host項是%,這個時候說明配置成功了,我們可以用該賬號進行遠程訪問了
輸入
service mysql restart
```重啟遠程服務器,測試一下:

如果這些都做完了,還是不能連接,可以看一下端口是不是被防火牆攔截了
參考地址:[官方文檔](https://mariadb.com/kb/zh-cn/configuring-mariadb-for-remote-client-access/)