安裝 MySQL
在 Ubuntu 中缝左,默認只有最新版本的 MySQL 包含在 APT 軟件包存儲庫中缚忧。要安裝它,需要使用 apt 更新服務器上的軟件包索引:
$ sudo apt update
然后安裝默認的 MySQL 軟件包:
$ sudo apt install mysql-server
配置 MySQL
在安裝完 MySQL 之后苍狰,應該運行一下包含的安全腳本:
$ sudo mysql_secure_installation
這一步中會出現(xiàn)一些提示幫助做一些常規(guī)的安全設置露筒。包括:是否安裝驗證密碼插件耻涛?(N)废酷;為root用戶設置密碼;是否刪除匿名用戶抹缕?(Y)澈蟆;是否禁止root從遠程登錄?(N)卓研;是否刪除test數(shù)據(jù)庫并取消對它的訪問權限丰介?(Y);是否刷新授權表鉴分,讓這些新規(guī)則立即生效?(Y)
更改用戶認證方式
雖然上面設置了 root 用戶的密碼带膀,但當通過 MySQL 終端登錄時志珍,并不能通過密碼進行認證:
$ mysql -u root -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
這是因為在 MySQL 5.7 及之后的版本中,root 用戶被默認設置為通過 auth_socket 插件(而非密碼)認證垛叨,其主要原因是出于對數(shù)據(jù)庫的安全性考慮伦糯。
為了使 root 用戶能通過密碼方式連接 MySQL,先通過終端打開 MySQL 的提示符:
$ sudo mysql
root 用戶的認證方式是 auth_socket∷栽現(xiàn)在運行如下命令敛纲,將認證方式更改為密碼認證(即:mysql_native_password):
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
之后退出數(shù)據(jù)庫。
此時root用戶可以以密碼的形式登錄:
$ mysql -u root -p
配置遠程訪問
首先進入mysql數(shù)據(jù)庫剂癌,然后輸入下面兩個命令:
grant all privileges on *.* to 'root'@'%' identified by 'password';
flush privileges;
第一個 * 是數(shù)據(jù)庫淤翔,可以改成允許訪問的數(shù)據(jù)庫名稱。
第二個 * 是數(shù)據(jù)庫的表名稱佩谷,* 代表允許訪問任意的表
root代表遠程登錄使用的用戶名旁壮,可以自定義监嗜。
%代表允許任意ip登錄,如果你想指定特定的IP抡谐,可以把%替換掉就可以了裁奇。
password代表遠程登錄時使用的密碼,可以自定義麦撵。
flush privileges;這是讓權限立即生效刽肠。
然后配置mysql的mysqld.cnf配置文件:
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
注釋掉這一行配置:
bind-address = 127.0.0.1
完成后保存退出!
執(zhí)行如下命令免胃,重啟 mysql 服務:
$ sudo systemctl restart mysql
注意問題:
- 某教程中更改 user 表中的 host 項音五,將“l(fā)ocalhost”改稱“%”(表示所有用戶都可以訪問)杜秸,并給 root 用戶授權撬碟。
mysql> update user set host = '%' where user = 'root';
后期可能是%通配符的問題導致一直拒絕接入惶傻。 - 在mysql中可以通過查詢user表看用戶情況。出現(xiàn)不存在password字段,原因是password字段改名為authentication_string抓狭。
- 在mysql里面的user表可以看到root的host有兩種:127.0.0.1和localhost。這兩種是不一樣的苗桂,通過localhost登錄數(shù)據(jù)庫是使用UNIX socket進行登錄。通過mysql –uroot –proot –h 127.0.0.1命令進行登錄是使用TCP/IP協(xié)議進行登錄驼卖。因此在mysql.user表中添加root@localhost登錄權限。