允許遠(yuǎn)程訪問MySQL的實現(xiàn)方式
如何允許遠(yuǎn)程訪問 MySQL
現(xiàn)在許多網(wǎng)站和應(yīng)用程序一開始的 Web 服務(wù)器和數(shù)據(jù)庫后端都托管在同一臺計算機上。
隨著時間的推移,這樣的方式可能會變得很麻煩并且難以擴展。
常見的解決方案
是通過設(shè)置遠(yuǎn)程數(shù)據(jù)庫來分離這些功能,從而允許服務(wù)器和數(shù)據(jù)庫在各自的計算機上按照自己的節(jié)奏增長。
用戶在嘗試設(shè)置遠(yuǎn)程 MySQL 數(shù)據(jù)庫時遇到的最常見問題之一是他們的 MySQL 實例僅配置為偵聽本地連接。
這是 MySQL 的默認(rèn)設(shè)置,但它不適用于遠(yuǎn)程數(shù)據(jù)庫設(shè)置,因為 MySQL 必須能夠偵聽可訪問服務(wù)器的*外部IP 地址。
*要啟用此功能,請打開mysqld.cnf`文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
導(dǎo)航到以指令開頭的行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 . . .
默認(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文件中。
在這種情況下,請將以下突出顯示的行添加到文件底部:
/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)閉文件。
然后重新啟動 MySQL 服務(wù)以使所做的更改生效:
sudo systemctl restart mysql
如果現(xiàn)在有一個現(xiàn)有的 MySQL 用戶帳戶,打算用于從遠(yuǎn)程主機連接到數(shù)據(jù)庫,則需要重新配置該帳戶以從遠(yuǎn)程服務(wù)器而不是localhost進(jìn)行連接。
則使用 MySQL root 用戶或其他特權(quán)用戶帳戶打開 MySQL 客戶端:
sudo mysql
如果root啟用了密碼身份驗證,則需要使用以下命令來訪問 MySQL shell:
mysql -u root -p
運行以下命令,確保更改sammy為您的 MySQL 用戶帳戶的名稱和remote_server_ip遠(yuǎn)程服務(wù)器的 IP 地址:
RENAME USER 'sammy'@'localhost' TO 'sammy'@'remote_server_ip';
或者,可以使用以下命令創(chuàng)建一個僅從遠(yuǎn)程主機連接的新用戶帳戶:
CREATE USER 'sammy'@'remote_server_ip' IDENTIFIED BY 'password';
注意:此命令將創(chuàng)建一個使用 MySQL 的默認(rèn)身份驗證插件caching_sha2_password 進(jìn)行身份驗證的用戶。但是,某些版本的 PHP 存在一個已知問題,可能會導(dǎo)致此插件出現(xiàn)問題。
如果計劃將此數(shù)據(jù)庫與 PHP 應(yīng)用程序(例如 phpMyAdmin)一起使用,則創(chuàng)建一個遠(yuǎn)程用戶,該用戶將使用較舊但仍然安全的mysql_native_password插件進(jìn)行身份驗證:
CREATE USER 'sammy'@'remote_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';
如果不確定,則可以創(chuàng)建一個用戶進(jìn)行身份驗證,例如使用以下命令進(jìn)行身份驗證:(注意用戶和IP)
ALTER USER 'sammy'@'remote_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';
然后根據(jù)特定需求授予新用戶適當(dāng)?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
最后,假設(shè)已經(jīng)在數(shù)據(jù)庫服務(wù)器上配置了防火墻,打開了端口3306(MySQL 的默認(rèn)端口)。
如果只計劃從一臺特定計算機訪問數(shù)據(jù)庫服務(wù)器,則可以使用以下命令授予該計算機遠(yuǎn)程連接數(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
接下來,嘗試從另一臺計算機遠(yuǎn)程訪問數(shù)據(jù)庫:
注意:如果添加了防火墻規(guī)則以僅允許來自特定 IP 地址的連接,則必須嘗試使用與該地址關(guān)聯(lián)的計算機來訪問數(shù)據(jù)庫。
mysql -u user -h database_server_ip -p
如果能夠訪問數(shù)據(jù)庫,則表明配置文件中的bind-address指令存在問題。
但請注意,該設(shè)置bind-address是0.0.0.0不安全的,因為它允許從任何 IP 地址連接到服務(wù)器。
另一方面,如果仍然無法遠(yuǎn)程訪問數(shù)據(jù)庫,則可能是其他原因?qū)е铝嗽搯栴}。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mysql插入帶有引號的字符串?dāng)?shù)據(jù)最佳實踐
在MySQL中可以使用單引號或雙引號來包裹字符串,下面這篇文章主要給大家介紹了關(guān)于Mysql插入帶有引號的字符串?dāng)?shù)據(jù)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01
MySQL 庫的操作案例之從創(chuàng)建配置到備份恢復(fù)
主要介紹MySQL庫創(chuàng)建、字符集配置、查改刪備及監(jiān)控,附實戰(zhàn)案例與避坑要點,覆蓋核心操作,本文就從實戰(zhàn)角度出發(fā),把MySQL庫操作的核心知識點講透,感興趣的朋友跟隨小編一起看看吧2025-10-10
mysql5.5與mysq 5.6中禁用innodb引擎的方法
這篇文章主要介紹了mysql5.5中禁用innodb引擎的方法,需要的朋友可以參考下2014-04-04
MYSQL連接不上本地服務(wù)器localhost的問題及解決
通過打開DOS窗口輸入mysql連接命令時報錯,發(fā)現(xiàn)本地MySQL服務(wù)未啟動,按照步驟在services.msc中找到并啟動MySQL服務(wù),選擇“自動”啟動類型,依次點擊“啟動”、“應(yīng)用”、“確定”,問題解決2026-03-03
mysql-connector-java.jar包的下載實踐
本文詳細(xì)介紹了如何從MySQL官方網(wǎng)站下載mysql-connector-java.jar包的步驟,包括訪問官網(wǎng)、選擇下載選項、選擇Connector/J、下載PlatformIndependent版本、進(jìn)行下載等2026-01-01
在Ubuntu或Debian系統(tǒng)的服務(wù)器上卸載MySQL的方法
這篇文章主要介紹了在Ubuntu或Debian系統(tǒng)的服務(wù)器上卸載MySQL的方法,適用于Debian系的Linux系統(tǒng),需要的朋友可以參考下2015-06-06
Mysql樹形結(jié)構(gòu)的數(shù)據(jù)庫表設(shè)計方案
樹形結(jié)構(gòu)對大家來說應(yīng)該都不陌生,在日常開發(fā)中經(jīng)常會遇到,下面這篇文章主要給大家介紹了關(guān)于Mysql樹形結(jié)構(gòu)的數(shù)據(jù)庫表設(shè)計的相關(guān)資料,文中通過示例代碼的非常詳細(xì),需要的朋友可以參考下2021-09-09

