[英]Remote Connections Mysql Ubuntu
出於某種原因,我一直無法遠程連接到我的 MySQL 服務器。 我已經嘗試了一切,但仍然出現錯誤。
root@server1:/home/administrator# mysql -u monty -p -h www.ganganadores.cl
Enter password:
ERROR 1045 (28000): Access denied for user 'monty'@'server1.ganganadores.cl' (using password: YES)
現在,我試過跑步
GRANT ALL ON *.* to monty@localhost IDENTIFIED BY 'XXXXX';
GRANT ALL ON *.* to monty@'%' IDENTIFIED BY 'XXXXXX';`
還是什么都沒有! 我做錯了什么?
編輯: my.cnf
已注釋掉綁定 ip。
要將 MySQL 公開給 localhost 以外的任何內容,您必須具有以下行
對於 mysql 5.6 及以下版本
在/etc/mysql/my.cnf
取消/etc/mysql/my.cnf
並分配給您的計算機 IP 地址而不是環回
對於 mysql 5.7 及以上版本
在/etc/mysql/mysql.conf.d/mysqld.cnf
取消/etc/mysql/mysql.conf.d/mysqld.cnf
並分配給您的計算機 IP 地址而不是環回
#Replace xxx with your IP Address
bind-address = xxx.xxx.xxx.xxx
或者如果不想指定IP,則添加一個bind-address = 0.0.0.0
然后停止並使用新的 my.cnf 條目重新啟動 MySQL。 運行后轉到終端並輸入以下命令。
lsof -i -P | grep :3306
這應該會與您在 xxx 中的實際 IP 返回類似的內容
mysqld 1046 mysql 10u IPv4 5203 0t0 TCP xxx.xxx.xxx.xxx:3306 (LISTEN)
如果上述語句正確返回,您將能夠接受遠程用戶。 但是,要使遠程用戶使用正確的權限連接,您需要在 localhost 和 '%' 中都創建該用戶。
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';
然后,
GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';
最后,
FLUSH PRIVILEGES;
EXIT;
如果您沒有創建與上述相同的用戶,當您在本地登錄時,您可能會繼承基本的 localhost 權限並遇到訪問問題。 如果您想限制 myuser 的訪問權限,那么您需要在此處閱讀 GRANT 語句語法。
注意:如果 lsof 沒有返回或未找到,您可以根據您的 Linux 發行版在此處安裝它。 您不需要 lsof 來使事情正常工作,但是當事情沒有按預期工作時它非常方便。
更新:如果即使在my.cnf
添加/更改bind-address
也不起作用,那么請在最初聲明的位置更改它:
/etc/mysql/mariadb.conf.d/50-server.cnf
在 apesa 的優秀帖子之上補充幾點:
1)您可以使用下面的命令來檢查mysql服務器正在偵聽的IP地址
netstat -nlt | grep 3306
sample result:
tcp 0 0 xxx.xxx.xxx.xxx:3306 0.0.0.0:* LISTEN
2) 如果由於某種原因更改沒有立即生效,則使用FLUSH PRIVILEGES
強制加載授權表
GRANT ALL ON *.* TO 'user'@'localhost' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
GRANT ALL ON *.* TO 'user'@'%' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;
用戶 == 用於連接到 mysql ex.root 的用戶
passwd == 你用來連接到 mysql 的密碼
3) 如果在 mysql 服務器機器上啟用了 netfilter 防火牆( sudo ufw enable
),請執行以下操作以打開端口 3306 以進行遠程訪問:
sudo ufw allow 3306
檢查狀態使用
sudo ufw status
4) 一旦建立了遠程連接,就可以使用命令在客戶端或服務器機器上進行驗證
netstat -an | grep 3306
netstat -an | grep -i established
MySQL 只監聽 localhost,如果我們想要遠程訪問它,那么我們需要在 my.cnf 文件中做一些更改:
sudo nano /etc/mysql/my.cnf
我們需要注釋掉 bind-address 和 skip-external-locking 行:
#bind-address = 127.0.0.1
# skip-external-locking
進行這些更改后,我們需要重新啟動 mysql 服務:
sudo service mysql restart
您正在使用 ubuntu 12(相當舊的)
首先,打開/etc/mysql/mysql.conf.d/mysqld.cnf文件( Ubuntu 14.04及更早版本中為/etc/mysql/my.cnf
在 [mysqld] 下找到那行,bind-address = 127.0.0.1 並改成,bind-address = 0.0.0.0 或者注釋掉
然后,重啟 Ubuntu MySQL Server systemctl restart mysql.service
現在 Ubuntu Server 將允許遠程訪問 MySQL 服務器,但您仍然需要配置 MySQL 用戶以允許從任何主機訪問。
用戶必須是'username'@'%'
並具有所有必需的授權
為確保 MySQL 服務器偵聽所有接口,請按如下方式運行 netstat 命令。
netstat -tulnp | grep mysql
希望這有效!
如果在 Windows 上測試,不要忘記打開端口 3306。
就我而言,我使用的是 MySql Server 版本:8.0.22
我不得不添加
bind-address = 0.0.0.0
並將此行更改為
mysqlx-bind-address = 0.0.0.0
在 /etc/mysql/mysql.conf.d 的文件中
然后通過運行重新啟動MySQL
sudo service mysql restart
當我嘗試將 Mysql 連接到遠程服務器時,我遇到了同樣的問題。 我發現我必須將綁定地址更改為數據庫服務器的當前私有 IP 地址。 但是當我嘗試在my.cnf
文件中添加bind-address =0.0.0.0
行時,當我嘗試創建數據庫時它不理解該行。
經過搜索,我找到了聲明 bind-address 的原始位置。
實際聲明在: /etc/mysql/mariadb.conf.d/50-server.cnf
因此我直接在那里更改了綁定地址,然后一切似乎都在工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.