阿里雲安裝MySQL以後,MySQL無法遠端連線
原因:
MySQL安裝預設建立的root使用者僅支援本地連線操作,ssh連線阿里雲伺服器,再mysql -u root -p命令連線資料庫的話,被認定為遠端連線,不是本地連線,提示連線失敗
注意:大家有沒有注意到,在報錯的最後提示using password:YES;這說明使用的密碼是正確的,但是沒有連線許可權,這就是因為MySQL安裝預設建立的root使用者僅支援本地連線操作,不支援遠端連線
關於連線許可權講解
分析發現MySQL資料庫對使用者的控制是有登陸許可權設定的,其中如下圖所示,MySQL user表中的host屬性是用來控制這使用者的登陸方式的
(有些情況下更改配置後,需要重啟生效)
命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password';
說明:username - 你將建立的使用者名稱, host - 指定該使用者在哪個主機上可以登陸,如果是本地使用者可用localhost, 如果想讓該使用者可以從任意遠端主機登陸,可以使用萬用字元%. password - 該使用者的登陸密碼,密碼可以為空,如果為空則該使用者可以不需要密碼登陸伺服器.
例子: CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';
CREATE USER 'pig'@'192.168.1.101_' IDENDIFIED BY '123456';
CREATE USER 'pig'@'%' IDENTIFIED BY '123456';
CREATE USER 'pig'@'%' IDENTIFIED BY '';
CREATE USER 'pig'@'%';
以下截圖為MySQL資料庫中預設建立的mysql資料庫user表資料(該表專門用來管理MySQL資料庫登入使用者資訊)
解決思路:
那就將root使用者的host欄位改成%就好了啊!或者自己重新建立一個使用者專門用於資料庫操作切記將host欄位設定為%才能支援遠端連線
解決方案:
1、修改 /etc/my.cnf,在 [mysqld] 小節下新增一行:skip-grant-tables
這一行配置讓 mysqld 啟動時不對密碼進行驗證
2、重啟 mysqld 服務:servive mysqld restart
3、使用 root 使用者登入到 mysql:mysql -u root
4、切換到mysql資料庫,更新 user 表:
-- 更新root使用者資訊
update user set hosr='%'authentication_string = password('root'), password_expired = 'N', password_last_changed = now() where user = 'root';
-- 重新插入一條使用者資訊
insert user .......................
注意:該步驟需要注意幾個點
1.既可以更新root使用者host資訊,讓其支援遠端登入
2.又可以複製root使用者資訊為insert,改一下host,user屬性,插入一條新的使用者資訊(此處可藉助資料庫連線工具,可遠端連線也不用輸入密碼即可連線成功)
3.在之前的版本中,密碼欄位的欄位名是 password,5.7版本改為了 authentication_string
5、退出 mysql,編輯 /etc/my.cnf 檔案,刪除 skip-grant-tables的內容
6、重啟 mysqld 服務,再用新密碼登入即可
大功告成!此時就可以用root使用者或者自己新建立的使用者進行遠端連線了。
最後附一條
MySql取消密碼強度驗證功能
一、修改MySql配置檔案(my.cnf)
一般情況下,MySql的配置檔案 my.cnf 會在 /etc/ 目錄下,如果沒有,可以使用以下命令查詢位置:
$ sudo find / -name my.cnf
編輯配置檔案:
$ sudo vi /etc/my.cnf
在檔案末尾新增以下內容:
plugin-load=validate_password.so
validate-password=OFF
儲存退出
二、重啟mysqld服務
重啟服務,以使得配置檔案生效:
$ sudo service mysqld restart
三、登入mysql驗證
使用命令登入驗證配置檔案是否生效:
$ mysql -u使用者名稱 -p密碼
隨意修改成一個簡單密碼,檢視是否成功,命令就不寫出來了