在騰訊雲 Ubuntu18.04 安裝配置 MySQL 5.7(踩坑警告⚠️)

前言

和標題同樣,本文的主要內容就是在騰訊雲 Ubuntu18.04 上安裝配置 MySQL 5.7,之因此要寫這篇文章是由於前兩天和朋友討論如今的 mysql 設置 root 帳戶的密碼上和之前不同了並且後續的操做也比之前麻煩了,他不信相信,而後爲了向他驗證個人說法,我就把個人一臺暫時閒置的騰訊雲服務器重裝了下系統(程序員較起真來就是這麼不講理😜)mysql

這不,雖然我證明了我說的,但我也付出了要從新配置我這臺服務器的慘痛代價,既然這樣倒不如把安裝配置的過程記錄下。話很少說,咱們就開始吧。程序員

環境準備

  • 一臺騰訊雲服務器
  • 系統環境爲Ubuntu 18.04

安裝

安裝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
複製代碼

記下這裏的 userpassword,而後到終端裏輸入 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,而後再輸入你剛纔設置的密碼就能夠訪問了嗎?

天真,怎麼會那麼簡單,想要成長,怎麼能不被無情的現實蹂躪一番。

image-20190812152939808

可我明明就已經改過密碼了,爲啥仍是登錄不進去。

因而我又開始在度娘上搜索,終於找到了問題的緣由:

緣由是由於在最近的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插件,對於這種問題,有兩種解決方案:

  1. **設置你的root用戶使用 mysql_native_password 插件 **

  2. 建立一個與你的系統用戶一致的新的數據庫用戶(推薦)

設置 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';
複製代碼

說明:

  • username:你將建立的用戶名
  • host:指定該用戶在哪一個主機上能夠登錄,若是是本地用戶可用localhost,若是想讓該用戶能夠從任意遠程主機登錄,可使用通配符%
  • password:該用戶的登錄密碼,密碼能夠爲空,若是爲空則該用戶能夠不須要密碼登錄服務器

舉例:

若是我想建立一個用戶名爲"lyy",密碼爲123456,且容許從任意遠程主機登錄,能夠執行下面這條命令:

CREATE USER 'lyy'@'%' IDENTIFIED BY '123456';
複製代碼

給新建立的用戶受權

命令:

GRANT privileges ON databasename.tablename TO 'username'@'host'
複製代碼

說明:

  • privileges:用戶的操做權限,如SELECTINSERTUPDATE等,若是要授予所的權限則使用ALL
  • databasename:數據庫名
  • tablename:表名,若是要授予該用戶對全部數據庫和表的相應操做權限則可用*表示,如*.*

例子:

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 能夠外網訪問

在使用 mysql 的過程當中,咱們每每都會使用Navicat等工具對數據庫進行可視化管理,這時就須要設置mysql外網訪問了。

設置過程分爲兩步:

  1. 設置用戶能夠從任意遠程主機登錄
  2. 修改配置文件,註釋掉 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
複製代碼

鏈接到 MySQL

這裏咱們使用 Navicat 鏈接到mysql,其實步驟很簡單,打開軟件->新建連接->編輯信息就能夠了,以下所示:

WX20190812-164325@2x

至於怎麼下載安裝破解 Navicat 這裏就很少說了。

刪除 mysql

最後說下如何卸載 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
複製代碼

相關文章
相關標籤/搜索