允許遠(yuǎn)程訪問(wèn)MySQL的實(shí)現(xiàn)方式
如何允許遠(yuǎn)程訪問(wèn) MySQL
現(xiàn)在許多網(wǎng)站和應(yīng)用程序一開(kāi)始的 Web 服務(wù)器和數(shù)據(jù)庫(kù)后端都托管在同一臺(tái)計(jì)算機(jī)上。
隨著時(shí)間的推移,這樣的方式可能會(huì)變得很麻煩并且難以擴(kuò)展。
常見(jiàn)的解決方案
是通過(guò)設(shè)置遠(yuǎn)程數(shù)據(jù)庫(kù)來(lái)分離這些功能,從而允許服務(wù)器和數(shù)據(jù)庫(kù)在各自的計(jì)算機(jī)上按照自己的節(jié)奏增長(zhǎng)。
用戶在嘗試設(shè)置遠(yuǎn)程 MySQL 數(shù)據(jù)庫(kù)時(shí)遇到的最常見(jiàn)問(wèn)題之一是他們的 MySQL 實(shí)例僅配置為偵聽(tīng)本地連接。
這是 MySQL 的默認(rèn)設(shè)置,但它不適用于遠(yuǎn)程數(shù)據(jù)庫(kù)設(shè)置,因?yàn)?MySQL 必須能夠偵聽(tīng)可訪問(wèn)服務(wù)器的*外部IP 地址。
*要啟用此功能,請(qǐng)打開(kāi)mysqld.cnf`文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
導(dǎo)航到以指令開(kāi)頭的行bind-address。
它看起來(lái)像這樣:
/etc/mysql/mysql.conf.d/mysqld.cnf . . . lc-messages-dir = /usr/share/mysql skip-external-locking # # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. bind-address = 127.0.0.1 . . .
默認(rèn)情況下,該值設(shè)置為127.0.0.1,這意味著服務(wù)器將僅查找本地連接。
所以需要更改此指令以引用外部 IP 地址。
可以將此指令設(shè)置為通配符 IP 地址,*、::或0.0.0.0:
/etc/mysql/mysql.conf.d/mysqld.cnf . . . lc-messages-dir = /usr/share/mysql skip-external-locking # # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. bind-address = 0.0.0.0 . . .
**注意:**在某些版本的 MySQL 中,默認(rèn)情況下該bind-address指令可能不在mysqld.cnf文件中。
在這種情況下,請(qǐng)將以下突出顯示的行添加到文件底部:
/etc/mysql/mysql.conf.d/mysqld.cnf . . . [mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql log-error = /var/log/mysql/error.log bind-address = 0.0.0.0
更改此行后,保存并關(guān)閉文件。
然后重新啟動(dòng) MySQL 服務(wù)以使所做的更改生效:
sudo systemctl restart mysql
如果現(xiàn)在有一個(gè)現(xiàn)有的 MySQL 用戶帳戶,打算用于從遠(yuǎn)程主機(jī)連接到數(shù)據(jù)庫(kù),則需要重新配置該帳戶以從遠(yuǎn)程服務(wù)器而不是localhost進(jìn)行連接。
則使用 MySQL root 用戶或其他特權(quán)用戶帳戶打開(kāi) MySQL 客戶端:
sudo mysql
如果root啟用了密碼身份驗(yàn)證,則需要使用以下命令來(lái)訪問(wèn) MySQL shell:
mysql -u root -p
運(yùn)行以下命令,確保更改sammy為您的 MySQL 用戶帳戶的名稱(chēng)和remote_server_ip遠(yuǎn)程服務(wù)器的 IP 地址:
RENAME USER 'sammy'@'localhost' TO 'sammy'@'remote_server_ip';
或者,可以使用以下命令創(chuàng)建一個(gè)僅從遠(yuǎn)程主機(jī)連接的新用戶帳戶:
CREATE USER 'sammy'@'remote_server_ip' IDENTIFIED BY 'password';
注意:此命令將創(chuàng)建一個(gè)使用 MySQL 的默認(rèn)身份驗(yàn)證插件caching_sha2_password 進(jìn)行身份驗(yàn)證的用戶。但是,某些版本的 PHP 存在一個(gè)已知問(wèn)題,可能會(huì)導(dǎo)致此插件出現(xiàn)問(wèn)題。
如果計(jì)劃將此數(shù)據(jù)庫(kù)與 PHP 應(yīng)用程序(例如 phpMyAdmin)一起使用,則創(chuàng)建一個(gè)遠(yuǎn)程用戶,該用戶將使用較舊但仍然安全的mysql_native_password插件進(jìn)行身份驗(yàn)證:
CREATE USER 'sammy'@'remote_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';
如果不確定,則可以創(chuàng)建一個(gè)用戶進(jìn)行身份驗(yàn)證,例如使用以下命令進(jìn)行身份驗(yàn)證:(注意用戶和IP)
ALTER USER 'sammy'@'remote_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';
然后根據(jù)特定需求授予新用戶適當(dāng)?shù)臋?quán)限。授權(quán)這玩意到處都用,下面是一個(gè)示例:
GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'remote_server_ip' WITH GRANT OPTION;
然后刷新權(quán)限:
FLUSH PRIVILEGES;
然后就可以退出MySQL客戶端了:
exit
最后,假設(shè)已經(jīng)在數(shù)據(jù)庫(kù)服務(wù)器上配置了防火墻,打開(kāi)了端口3306(MySQL 的默認(rèn)端口)。
如果只計(jì)劃從一臺(tái)特定計(jì)算機(jī)訪問(wèn)數(shù)據(jù)庫(kù)服務(wù)器,則可以使用以下命令授予該計(jì)算機(jī)遠(yuǎn)程連接數(shù)據(jù)庫(kù)的獨(dú)占權(quán)限。
確保替換remote_IP_address為計(jì)劃連接的機(jī)器的實(shí)際 IP 地址:
sudo ufw allow from remote_IP_address to any port 3306
如果將來(lái)需要從其他計(jì)算機(jī)訪問(wèn)數(shù)據(jù)庫(kù),可以使用此命令臨時(shí)授予它們?cè)L問(wèn)權(quán)限。
只需記住包含它們各自的 IP 地址即可。
或者,可以使用以下命令允許從任何IP 地址連接到 MySQL 數(shù)據(jù)庫(kù):
警告:此命令將使任何人都可以訪問(wèn)你的 MySQL 數(shù)據(jù)庫(kù)。如果數(shù)據(jù)庫(kù)包含任何敏感數(shù)據(jù),請(qǐng)勿運(yùn)行它。
sudo ufw allow 3306
接下來(lái),嘗試從另一臺(tái)計(jì)算機(jī)遠(yuǎn)程訪問(wèn)數(shù)據(jù)庫(kù):
注意:如果添加了防火墻規(guī)則以僅允許來(lái)自特定 IP 地址的連接,則必須嘗試使用與該地址關(guān)聯(lián)的計(jì)算機(jī)來(lái)訪問(wèn)數(shù)據(jù)庫(kù)。
mysql -u user -h database_server_ip -p
如果能夠訪問(wèn)數(shù)據(jù)庫(kù),則表明配置文件中的bind-address指令存在問(wèn)題。
但請(qǐng)注意,該設(shè)置bind-address是0.0.0.0不安全的,因?yàn)樗试S從任何 IP 地址連接到服務(wù)器。
另一方面,如果仍然無(wú)法遠(yuǎn)程訪問(wèn)數(shù)據(jù)庫(kù),則可能是其他原因?qū)е铝嗽搯?wèn)題。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL gh-ost DDL 變更工具的實(shí)現(xiàn)
本文主要介紹了MySQL gh-ost DDL變更工具的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02Linux下修改MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)文件路徑的步驟
這篇文章主要介紹了Linux下修改MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)文件路徑的步驟,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12Mysql忘記密碼怎么重置密碼的幾種實(shí)現(xiàn)方法
本文主要介紹了Mysql忘記密碼怎么重置密碼的幾種實(shí)現(xiàn)方法,每種方法都有其適用的情況,根據(jù)具體情況選擇合適的方法,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10mysql無(wú)法啟動(dòng)服務(wù)及其他問(wèn)題總結(jié)
MySQL無(wú)法啟動(dòng),可能有多種原因?qū)е?本文主要介紹了mysql無(wú)法啟動(dòng)服務(wù)及其他問(wèn)題總結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01