Centos7安裝MySQL8.0(RPM方式)


人生處處皆學問,工作也是如此!過去不止一次在Linux上安裝MySQL,可以說輕車熟路,但是寫篇文章總結一下,發現有很多細節值得學習!


安裝包選擇

為什么用rpm?

在Linux系列上安裝軟件一般有源碼編譯安裝、rpm(或者dpkg)、yum等方式,優劣主要體現在是否需要網絡環境、是否能自動檢測依賴,升級和卸載是否方便等。作為非運維人員,也需基本了解。

源碼安裝支持離線,但即使可以自動創建 Makefile等文件簡化安裝,整個過程也比較復雜,升級和卸載更麻煩。針對一些沒有官方釋出的軟件,只能選擇這種方式。

yum方式可以自動監測依賴,並且安裝過程中可以將安裝信息寫入系統的軟件管理程序,升級卸載都比較方便。缺點是多數情況下需要良好的網絡環境,尤其是一些沒有國內鏡像的軟件,速度感人。(事實上,有些情況也可以在rpm包所在的目錄下以離線方式使用yum,前提是各種依賴都在本地具備)。

rpm相當於官方編譯好的安裝包,支持離線,能夠檢測依賴,但部分軟件沒有rpm包。所以說一定程度上rpm具備了上述兩種方式的優點。

實際情況下,要根據具體的環境選擇,一般來說rpm優先於源碼。

本次安裝環境:

Centos7.8 (最小安裝,root權限)
mysql 社區版8.0.16

此處選擇上傳已經下載好的官方打包bundle文件mysql-8.0.16-2.el7.x86_64.rpm-bundle.tar,也可以在官方網站分別下載未打包的多個文件。

或者在線下載(也可以在本地直接將wget后面的地址復制到瀏覽器地址欄,將自動開始下載)

wget   https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.16-2.el7.x86_64.rpm-bundle.tar

解壓

注意此處解壓命令是,-xvf 沒有z

tar -xvf    mysql-8.0.16-2.el7.x86_64.rpm-bundle.tar

解壓后包含8個文件,

解壓后8個文件


安裝前環境檢測

檢查

在MySQL被收購后,MySQL最初的作者擔心MySQL存在閉源的風險,在MySQL的分支上開發了mariadb。后來一些Linux分發版就將mariadb作為系統默認安裝的數據庫系統,理論上mariadb兼容MySQL,甚至某些方面性能更好。(當然,我沒有測試過)

rpm -qa | grep -i mariadb

可能結果顯示

mariadb-libs-5.5.65-1.el7.x86_64

去除依賴

rpm -ev  --nodeps mariadb-libs-5.5.65-1.el7.x86_64

安裝

安裝順序

應當按照common–>libs–>client–>server的順序安裝,否則安裝過程會提醒依賴順序,其他的為非必須安裝包。

rpm -ivh mysql-community-common-8.0.16-2.el7.x86_64.rpm

rpm -ivh mysql-community-libs-8.0.16-2.el7.x86_64.rpm

rpm -ivh mysql-community-client-8.0.16-2.el7.x86_64.rpm

rpm -ivh mysql-community-server-8.0.16-2.el7.x86_64.rpm

正如文章開始提到的,也可以在解壓后的安裝包文件下使用yum install命令代替rpm(非必須)


啟動與修改密碼

啟動

 systemctl start mysqld

查看狀態

systemctl status mysqld

查看啟動狀態

查看初始隨機密碼

 cat /var/log/mysqld.log | grep password

結果類似下面內容,則初始密碼為tC0;+kB?BqCg

2020-09-02T05:30:06.739311Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: tC0;+kB?BqCg

使用root角色登錄

mysql -u root -p

粘貼或輸入初始密碼,注意,Linux為了安全,MySQL命令行上可能沒有反應或者****,但密碼已經輸入
隨機密碼首次登錄

修改密碼

第一次使用隨機生成的密碼登錄后必須修改密碼,否則無法進行其他操作。

首次隨機密碼登錄

密碼要求

按照MySQL8.0默認的密碼組件,此時的密碼要求是必須包含數字,大小寫字母,特殊字符,且長度不低於8位,否則會提示密碼不符合規則。建議按照這種方式設置,如果想將密碼設置成123456這種簡單形式(養成良好習慣,不建議),請看本文最后一部分,密碼問題。

以123456為密碼測試

ALTER user 'root'@'localhost' IDENTIFIED BY '123456';

簡單密碼不符合規則

此處我們將密碼設置為Root.123456 注意R大寫,t后有英文句號。

ALTER user 'root'@'localhost' IDENTIFIED BY 'Root.123456';

開放遠程登錄權限

此時只能以root角色登錄,同樣出於安全,MySQL的root角色只能在本地登錄,正規的做法應當是用root權限分配其他不同角色供遠程登錄。

但這里還是強行開啟root角色的遠程登錄權限,否則再寫角色分配相關的內容,文章就成了太長不看系列了。

開放權限的本質是在數據庫mysql中修改user表的host屬性,使其可以被本地之外的IP連接,依次執行以下語句。

use mysql;

select host,user from user;

update user set host='%' where user ='root';

執行以上語句之后在執行刷新權限:

flush privileges;

開放防火牆端口

開啟root遠程登錄權限后,還無法直接被外界連接,因為MySQL的端口號3306在Linux中默認關閉的。

注意:使用阿里雲等雲服務器還需要在控制台中安全組策略打開端口,此處省略。
查詢3306端口是否開啟

 firewall-cmd --query-port=3306/tcp

開啟3306

firewall-cmd --zone=public --add-port=3306/tcp --permanent

重新加載防火牆

firewall-cmd --reload

此時我們的程序已經可以直接連接MySQL了。

配置文件更改(非必須)

要修改mysql數據和日志存放位置等信息,配置文件是/etc/my.cnf,直接修改保存位置。

vim /etc/my.cnf

修改數據存放位置


以下內容非必須。

在使用Navicat或者Sqlyog工具時,較新的版本已經可以直接連接,所以開始此步驟前可以使用Navicat測試連接是否成功。

但舊版本Navicat連接mysql8.0時,可能無法與mysql的加密規則匹配,導致連接失敗。此處的加密規則說的是對你的密碼進行加密保存時采用的算法。

更改mysql的加密規則

查看加密規則

show variables like "default_authentication%";

結果可能為

修改規則

alter user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密碼';

此時使用Navicat連接成功。


密碼問題(非必須)

修改密碼規則

注意:若依照前面說的規則設置復雜的密碼,這一步驟直接可以省略。

再次啰嗦,建議將密碼設置為復雜程度較高的(前提是不要忘記)。若仍然要將密碼設置為簡單的,往下看。

登錄MySQL

查看密碼規則要求(正常情況下已經默認安裝了密碼相關組件)

SHOW VARIABLES LIKE 'validate_password.%';

密碼規則

validate_password.policy的值

可以使用數字值0、1、2或相應的符號值LOW,MEDIUM,STRONG來指定validate_password.policy值

Policy Tests Performed
0 or LOW Length
1 or MEDIUM Length; numeric, lowercase/uppercase, and special characters
2 or STRONG Length; numeric, lowercase/uppercase, and special characters; dictionary file

如果想使用類似於123456形式的簡單密碼,需要更改密碼規則和密碼長度

mysql8.0及以后的版本

set global validate_password.policy=0;

set global validate_password.length=1;

實際上,密碼長度即使設為1,其最小長度也不會小於下面函數的值,即默認長度始終不會小於4

validate_password.number_count+ validate_password.special_char_count+ (2 * validate_password.mixed_case_count)

5.7及以前版本

set global validate_password_policy=0;

set global validate_password_length=1;

更改密碼

此處密碼改為123456

ALTER user 'root'@'localhost' IDENTIFIED BY '123456';

最后

比起整個流水化的安裝過程,其實更值得深思的是,僅僅一個密碼設置和保存,MySQL就提供了不同的組件,設置了不同的規則和策略,盡最大程度去平衡方便和安全,某種意義上說,也是值得我們學習的匠心吧!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM