遠端連線debian_允許遠端連線到MySQL資料庫伺服器的步驟
預設情況下,MySQL伺服器僅偵聽來自localhost的連線,這意味著只能由執行在同一主機上的應用程式訪問它。
但在某些情況下,有必要允許遠端連線。比如你想要從本地系統連線到遠端MySQL伺服器,或者使用多伺服器部署、應用程式與資料庫伺服器不在同一臺機器上執行時。
配置MySQL伺服器
第一步是設定MySQL伺服器,以偵聽機器上的某個特定IP地址或所有IP地址。
如果MySQL伺服器和客戶端可以通過專用網路相互通訊,那麼最好的選擇是設定MySQL伺服器,僅偵聽專用IP。否則,如果你想通過公共網路連線到伺服器,就設定MySQL伺服器,偵聽機器上的所有IP地址。
為此,你需要編輯MySQL配置檔案,新增或更改bind-address選項的值。你可以設定單個IP地址和IP範圍。如果地址是0.0.0.0,MySQL伺服器接受所有主機IPv4介面上的連線。如果你在系統上配置了IPv6,改而使用::,而不是0.0.0.0。
MySQL配置檔案的位置因發行版而異。在Ubuntu和Debian中,該檔案位於/etc/mysql/mysql.conf.d/mysqld.cnf,而在基於Red Hat的發行版(比如CentOS)中,該檔案位於/etc/my.cnf。
使用文字編輯器開啟檔案:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
搜尋以bind-address開頭的行,將其值設定為MySQL伺服器應偵聽的IP地址。
預設情況下,該值被設定為127.0.0.1(僅在localhost中偵聽)。
在這個例子中,我們將值改為0.0.0.0來設定MySQL伺服器,偵聽所有IPv4介面:
mysqld.cnfbind-address = 0.0.0.0# skip-networking
如果有一行含有skip-networking,刪除該行或通過在行開頭新增#來註釋掉它。
在MySQL 8.0及更高版本中,bind-address指令可能不存在。在這種情況下,將其新增到[mysqld]部分下。
完成後,重新啟動MySQL服務以使更改生效。只有root使用者或擁有sudo許可權的使用者才能重新啟動服務。
想在Debian或Ubuntu上重新啟動MySQL服務,請輸入:
sudo systemctl restart mysqld
在基於RedHat的發行版(比如CentOS)上,想重新啟動服務,執行:
sudo systemctl restart mysql
授權使用者從遠端機器來訪問
下一步是允許遠端使用者訪問資料庫。
輸入以下內容,以root使用者身份登入MySQL伺服器:
$ sudo mysql
如果你使用舊的原生MySQL驗證外掛以root使用者身份登入,請執行以下命令,出現提示時輸入密碼:
$ mysql -uroot -p
從MySQL shell裡面,使用GRANT語句為遠端使用者授予訪問許可權。
mysql> GRANT ALL ON database_name.* TO user_name@'ip_address' IDENTIFIED BY 'user_password';
其中:
database_name是使用者將連線到的資料庫的名稱。
user_name是MySQL使用者的名稱。
ip_address是使用者將連線的IP地址。使用%允許使用者從任何IP地址進行連線。
user_password是使用者密碼。
比如說,要授予名為foo、使用密碼my_password的使用者從IP是10.8.0.5的客戶端機器訪問資料庫dbname,你要執行:
mysql> GRANT ALL ON dbname.* TO foo@'10.8.0.5' BY 'my_passwd';
配置防火牆
最後一步是配置防火牆配置,允許來自遠端機器的通過埠3306(MySQL預設埠)入站的流量。Iptables
如果你使用iptables作為防火牆,以下命令將允許從網際網路上的任何IP地址訪問MySQL埠。這很不安全。
$ sudo iptables -A INPUT -p tcp --destination-port 3306 -j ACCEPT
允許從特定IP地址訪問:
sudo iptables -A INPUT -s 10.8.0.5 -p tcp --destination-port 3306 -j ACCEPT
UFW
UFW是Ubuntu中的預設防火牆工具。要允許從網際網路上的任何IP地址進行訪問(很不安全),請執行:
$ sudo ufw allow 3306/ tcp
允許從特定IP地址訪問:
sudo ufw allow from 10.8.0.5 to any port 3306
FirewallD
FirewallD是CentOS中的預設防火牆管理工具。要允許從網際網路上的任何IP地址進行訪問(很不安全),請輸入:
$ sudo firewall-cmd --permanent --zone = public --add-port = 3306/ tcp $ sudo firewall-cmd --reload
要允許從特定埠上的特定IP地址進行訪問,你可以建立新的FirewallD區域或使用豐富的規則。不妨建立一個名為mysqlzone的新區域:
$ sudo firewall-cmd --new-zone=mysqlzone --permanent $ sudo firewall-cmd --reload $ sudo firewall-cmd --permanent --zone=mysqlzone --add-source=10.8.0.5/32 $ sudo firewall-cmd --permanent --zone=mysqlzone --add-port=3306/tcp $ sudo firewall-cmd --reload
驗證更改
要驗證遠端使用者可以連線到MySQL伺服器,請執行以下命令:
mysql -u user_name -h mysql_server_ip -p
其中user_name是你授予訪問許可權的使用者的名稱,mysql_server_ip是執行MySQL伺服器的主機的IP地址。
如果一切設定正確,你就能夠登入到遠端MySQL伺服器。
如果你收到如下錯誤,埠3306未開啟,或者MySQL伺服器未偵聽IP地址。
ERROR 2003 (HY000): Can't connect to MySQL server on '10.8.0.5' (111)"
以下錯誤表明你嘗試登入的使用者沒有訪問遠端MySQL伺服器的許可權。
"ERROR 1130 (HY000): Host ‘10.8.0.5’ is not allowed to connect to this MySQL server"
MySQL是預設流行的開源資料庫伺服器,它僅偵聽來自localhost的入站連線。
要允許遠端連線到MySQL伺服器,你需要執行以下步驟:
1. 配置MySQL伺服器,偵聽所有介面或特定介面。
2. 授予遠端使用者訪問許可權。
3. 開啟防火牆中的MySQL埠。
轉自:https://www.linuxprobe.com/mysql-service.html
————————————————
版權宣告:本文為CSDN博主「Janice Lu」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/weixin_42659252/article/details/112518249