允許遠程訪問MySQL的實現(xiàn)方式
如何允許遠程訪問 MySQL
現(xiàn)在許多網(wǎng)站和應用程序一開始的 Web 服務器和數(shù)據(jù)庫后端都托管在同一臺計算機上。
隨著時間的推移,這樣的方式可能會變得很麻煩并且難以擴展。
常見的解決方案
是通過設置遠程數(shù)據(jù)庫來分離這些功能,從而允許服務器和數(shù)據(jù)庫在各自的計算機上按照自己的節(jié)奏增長。
用戶在嘗試設置遠程 MySQL 數(shù)據(jù)庫時遇到的最常見問題之一是他們的 MySQL 實例僅配置為偵聽本地連接。
這是 MySQL 的默認設置,但它不適用于遠程數(shù)據(jù)庫設置,因為 MySQL 必須能夠偵聽可訪問服務器的*外部IP 地址。
*要啟用此功能,請打開mysqld.cnf`文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
導航到以指令開頭的行bind-address。
它看起來像這樣:
/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 . . .
默認情況下,該值設置為127.0.0.1,這意味著服務器將僅查找本地連接。
所以需要更改此指令以引用外部 IP 地址。
可以將此指令設置為通配符 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 中,默認情況下該bind-address指令可能不在mysqld.cnf文件中。
在這種情況下,請將以下突出顯示的行添加到文件底部:
/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
更改此行后,保存并關閉文件。
然后重新啟動 MySQL 服務以使所做的更改生效:
sudo systemctl restart mysql
如果現(xiàn)在有一個現(xiàn)有的 MySQL 用戶帳戶,打算用于從遠程主機連接到數(shù)據(jù)庫,則需要重新配置該帳戶以從遠程服務器而不是localhost進行連接。
則使用 MySQL root 用戶或其他特權(quán)用戶帳戶打開 MySQL 客戶端:
sudo mysql
如果root啟用了密碼身份驗證,則需要使用以下命令來訪問 MySQL shell:
mysql -u root -p
運行以下命令,確保更改sammy為您的 MySQL 用戶帳戶的名稱和remote_server_ip遠程服務器的 IP 地址:
RENAME USER 'sammy'@'localhost' TO 'sammy'@'remote_server_ip';
或者,可以使用以下命令創(chuàng)建一個僅從遠程主機連接的新用戶帳戶:
CREATE USER 'sammy'@'remote_server_ip' IDENTIFIED BY 'password';
注意:此命令將創(chuàng)建一個使用 MySQL 的默認身份驗證插件caching_sha2_password 進行身份驗證的用戶。但是,某些版本的 PHP 存在一個已知問題,可能會導致此插件出現(xiàn)問題。
如果計劃將此數(shù)據(jù)庫與 PHP 應用程序(例如 phpMyAdmin)一起使用,則創(chuàng)建一個遠程用戶,該用戶將使用較舊但仍然安全的mysql_native_password插件進行身份驗證:
CREATE USER 'sammy'@'remote_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';
如果不確定,則可以創(chuàng)建一個用戶進行身份驗證,例如使用以下命令進行身份驗證:(注意用戶和IP)
ALTER USER 'sammy'@'remote_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';
然后根據(jù)特定需求授予新用戶適當?shù)臋?quán)限。授權(quán)這玩意到處都用,下面是一個示例:
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
最后,假設已經(jīng)在數(shù)據(jù)庫服務器上配置了防火墻,打開了端口3306(MySQL 的默認端口)。
如果只計劃從一臺特定計算機訪問數(shù)據(jù)庫服務器,則可以使用以下命令授予該計算機遠程連接數(shù)據(jù)庫的獨占權(quán)限。
確保替換remote_IP_address為計劃連接的機器的實際 IP 地址:
sudo ufw allow from remote_IP_address to any port 3306
如果將來需要從其他計算機訪問數(shù)據(jù)庫,可以使用此命令臨時授予它們訪問權(quán)限。
只需記住包含它們各自的 IP 地址即可。
或者,可以使用以下命令允許從任何IP 地址連接到 MySQL 數(shù)據(jù)庫:
警告:此命令將使任何人都可以訪問你的 MySQL 數(shù)據(jù)庫。如果數(shù)據(jù)庫包含任何敏感數(shù)據(jù),請勿運行它。
sudo ufw allow 3306
接下來,嘗試從另一臺計算機遠程訪問數(shù)據(jù)庫:
注意:如果添加了防火墻規(guī)則以僅允許來自特定 IP 地址的連接,則必須嘗試使用與該地址關聯(lián)的計算機來訪問數(shù)據(jù)庫。
mysql -u user -h database_server_ip -p
如果能夠訪問數(shù)據(jù)庫,則表明配置文件中的bind-address指令存在問題。
但請注意,該設置bind-address是0.0.0.0不安全的,因為它允許從任何 IP 地址連接到服務器。
另一方面,如果仍然無法遠程訪問數(shù)據(jù)庫,則可能是其他原因?qū)е铝嗽搯栴}。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
MySQL gh-ost DDL 變更工具的實現(xiàn)
本文主要介紹了MySQL gh-ost DDL變更工具的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-02-02Linux下修改MySQL數(shù)據(jù)庫數(shù)據(jù)文件路徑的步驟
這篇文章主要介紹了Linux下修改MySQL數(shù)據(jù)庫數(shù)據(jù)文件路徑的步驟,本文分步驟給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12