和標題同樣,本文的主要內容就是在騰訊雲 Ubuntu18.04 上安裝配置 MySQL 5.7,之因此要寫這篇文章是由於前兩天和朋友討論如今的 mysql 設置 root 帳戶的密碼上和之前不同了並且後續的操做也比之前麻煩了,他不信相信,而後爲了向他驗證個人說法,我就把個人一臺暫時閒置的騰訊雲服務器重裝了下系統(程序員較起真來就是這麼不講理😜)mysql
這不,雖然我證明了我說的,但我也付出了要從新配置我這臺服務器的慘痛代價,既然這樣倒不如把安裝配置的過程記錄下。話很少說,咱們就開始吧。程序員
安裝mysql很是簡單,只須要執行下面兩個命令:sql
sudo apt-get install mysql-server
sudo apt-get install mysql-client
複製代碼
檢查MySQL是否運行:shell
sudo netstat -tap | grep mysql
複製代碼
若是成功安裝,個人會顯示以下內容:數據庫
tcp6 0 0 [::]:1030 [::]:* LISTEN 5743/mysqld
複製代碼
順便在這裏提一下重啓/打開/關閉 MySQL 的方法是:安全
sudo service mysql restart/start/stop
複製代碼
雖然咱們能夠經過執行兩個命令就能很方便的安裝好MySQL,可是我在安裝過程當中並無出現要我寫用戶名和密碼的地方,這讓我一臉懵逼,索性在終端輸入mysql -u root -p
以後,要求我輸入密碼,但是我並不知道密碼,心想可能默認密碼就是空吧,直接回車不對,隨便輸入一個密碼也不對,終於在查找了不少資料後,我找到了解決方案。bash
查看一個文件服務器
sudo cat /etc/mysql/debian.cnf
複製代碼
在這個文件裏面有着MySQL默認的用戶名和用戶密碼, 最最重要的是:用戶名默認的不是root,而是debian-sys-maint,以下所示socket
# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host = localhost
user = debian-sys-maint
password = skFz7zS0Fl1t2QHK
socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host = localhost
user = debian-sys-maint
password = skFz7zS0Fl1t2QHK
socket = /var/run/mysqld/mysqld.sock
複製代碼
記下這裏的 user 和 password,而後到終端裏輸入 mysql -u debian-sys-maint -p
,隨即會讓咱們輸入密碼,此時輸入咱們剛纔記下的密碼便可進入 mysql 的shell環境了。tcp
每次都這麼登陸天然很麻煩,所以先想到了更改root密碼:
mysql> update mysql.user set authentication_string=password('password') where user='root'and Host = 'localhost';
複製代碼
Tips:這裏說明下,在 MySQL 5.7 password字段已從
mysql.user
表中刪除,新的字段名是authenticalion_string
。
而後你覺得在終端輸入mysql -u root -p
,而後再輸入你剛纔設置的密碼就能夠訪問了嗎?
天真,怎麼會那麼簡單,想要成長,怎麼能不被無情的現實蹂躪一番。
可我明明就已經改過密碼了,爲啥仍是登錄不進去。
因而我又開始在度娘上搜索,終於找到了問題的緣由:
緣由是由於在最近的Ubuntu安裝(固然也多是其餘安裝)中,MySQL默認使用了
UNIX auth_socket plugin
插件。簡單來講這意味着當
db_users
使用數據庫時,將會經過系統用戶認證表進行認證。
你能夠經過下面的命令看看你的root用戶是否設置成了這樣:
mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------------------+
| User | plugin |
+------------------+-----------------------+
| root | auth_socket |
| mysql.sys | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+
複製代碼
若是是這樣的話就說明root用戶正在使用auth_socket
插件,對於這種問題,有兩種解決方案:
**設置你的root用戶使用 mysql_native_password 插件 **
建立一個與你的系統用戶一致的新的數據庫用戶(推薦)
由於不推薦採用這種方式,因此這裏只是給出要執行的命令:
mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
複製代碼
重點來講下這種方式。之因此要新建一個用戶,不僅僅是爲了解決修改root帳戶密碼的狀況。咱們知道,當一個項目的體量上去了,數據庫的維護就變得很是重要了,若是發展到必定程度後用戶名仍然是root(若是這時候還開通了外網訪問),那安全性就會大大下降。何況每一個項目的開發人員確定不止一個,不一樣coder的權限等級也不同,能對數據庫進行的操做確定也是不同的。因此綜上所述,我依舊推薦在剛開始安裝mysql時就新建一個用戶進行配置。
命令:
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
複製代碼
說明:
%
舉例:
若是我想建立一個用戶名爲"lyy",密碼爲123456,且容許從任意遠程主機登錄,能夠執行下面這條命令:
CREATE USER 'lyy'@'%' IDENTIFIED BY '123456';
複製代碼
命令:
GRANT privileges ON databasename.tablename TO 'username'@'host'
複製代碼
說明:
SELECT
,INSERT
,UPDATE
等,若是要授予所的權限則使用ALL
*
表示,如*.*
例子:
GRANT SELECT, INSERT ON test.user TO 'lyy'@'%';
GRANT ALL ON *.* TO 'lyy'@'%';
複製代碼
這樣咱們在回到shell環境中,執行mysql -u lyy -p
而後輸入密碼就能夠進入mysql的shell環境了。
Tips:若是想要更新某個用戶的密碼只須要執行:
update user set authentication_string=password('password') where user='username' and host='host'; 複製代碼
在使用 mysql 的過程當中,咱們每每都會使用Navicat等工具對數據庫進行可視化管理,這時就須要設置mysql外網訪問了。
設置過程分爲兩步:
bind_ip_address
第一步在上面已經說過了,這裏來講下第二步:
mysql 5.7的配置文件路徑在:/etc/mysql/mysql.conf.d/mysqld.cnf
,當咱們執行sudo cat /etc/mysql/mysql.conf.d/mysqld.cnf
命令時結果以下所示:
在bind-address
前添加#
註釋掉該行便可。
Tips:出於安全考慮,若是咱們想要修改mysql的啓動端口,能夠修改上述圖片中的 port 部分爲本身想要的端口號。
在這一切都弄好以後別忘了從新啓動下mysql哦😯
sudo service mysql restart
複製代碼
這裏咱們使用 Navicat 鏈接到mysql,其實步驟很簡單,打開軟件->新建連接->編輯信息就能夠了,以下所示:
至於怎麼下載安裝破解 Navicat 這裏就很少說了。
最後說下如何卸載 mysql
sudo apt-get autoremove --purge mysql-server-5.7
sudo apt-get remove mysql-server
sudo apt-get autoremove mysql-server
sudo apt-get remove mysql-common
複製代碼
上面的可能會有些是多餘的,以後須要清理殘餘數據
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
複製代碼