簡體   English   中英

遠程連接 Mysql Ubuntu

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM