part5.all

一、SUDO,PAM配置規(guī)范說明

SUDO

①sudo執(zhí)行命令的流程

將當(dāng)前用戶切換到超級用戶下,或切換到指定的用戶下,
然后以超級用戶或其指定切換到的用戶身份執(zhí)行命令,執(zhí)行完成后,直接退回到當(dāng)前用戶。
具體工作過程如下:
當(dāng)用戶執(zhí)行sudo時,系統(tǒng)會主動尋找/etc/sudoers文件,判斷該用戶是否有執(zhí)行sudo的權(quán)限
–>確認(rèn)用戶具有可執(zhí)行sudo的權(quán)限后,讓用戶輸入用戶自己的密碼確認(rèn)
–>若密碼輸入成功,則開始執(zhí)行sudo后續(xù)的命令

②不需要輸入密碼的情況

1.root執(zhí)行sudo時不需要輸入密碼(eudoers文件中有配置root ALL=(ALL) ALL這樣一條規(guī)則)
2.欲切換的身份與執(zhí)行者的身份相同,不需要輸入密碼
3./etc/sudoers文件設(shè)置為允許用戶在不輸入該用戶的密碼的情況下使用所有命令
如設(shè)置允許wheel用戶組中的用戶在不輸入該用戶的密碼的情況下使用所有命令
( %wheel ALL=(ALL) NOPASSWD: ALL)
4.授權(quán)格式

用戶  登入主機(jī)=(代表用戶)  命令
user  host=(runas)  command

③實(shí)際案例演示

實(shí)例1:讓普通用戶test具有/etc/init.d/nagios腳本重啟的權(quán)限,可以在/etc/sudoers添加如下設(shè)置:

test ALL=NOPASSWD:/etc/init.d/nagios restart

PAM

①PAM介紹

Linux下可擴(kuò)展的鑒權(quán)模塊,用戶進(jìn)程服務(wù)某服務(wù)進(jìn)程,服務(wù)進(jìn)程先把請求送到PAM模塊進(jìn)行鑒權(quán),PAM根據(jù)服務(wù)名從/etc/pam.d/目錄選擇一個服務(wù)文件,根據(jù)服務(wù)文件的配置內(nèi)容進(jìn)行鑒權(quán)。

②PAM查看命令

通過ldd命令查看服務(wù)名,確定服務(wù)是否使用pam功能(pam服務(wù)對應(yīng)libpam*.so庫文件):

ldd /usr/sbin/sshd
        linux-vdso.so.1 =>  (0x00007fff1b8ef000)
        libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f579f2d8000)
        libpam.so.0 => /lib64/libpam.so.0 (0x00007f579f0cb000)

③Linux系統(tǒng)PAM配置

/lib/security目錄存放pam模塊文件

pam_access.so 控制訪問者地址與賬號名稱
pam_listfile.so 控制訪問者的賬號名稱或登錄位置
pam_limits.so 控制為用戶分配的資源
pam_rootok.so 對管理員(uid=0)無條件允許通過
pam_userdb.so 設(shè)定獨(dú)立用戶賬號數(shù)據(jù)庫認(rèn)證

etc/pam.d目錄存放使用pam的服務(wù)名

ogin -------/etc/pam.d/login
ipop3d -------/etc/pam.d/pop
vsftpd -------/etc/pam.d/ftp(編譯安裝)或/etc/pam.d/vsftpd(rpm安裝)
sshd -------/etc/pam.d/sshd
su -------/etc/pam.d/su

/etc/security/目錄存放pam認(rèn)證、鑒權(quán)時使用的配置文件,如limits.conf

通過配置文件增改刪進(jìn)程的鑒權(quán)規(guī)則,下面介紹兩個常用的pam模塊

pam_access.so模塊的使用―――控制訪問sshd服務(wù)的主機(jī)和用戶

1.修改需使用這個模塊的服務(wù)文件/etc/pam.d/sshd
添加 account required pam_access.so
2.修改模塊的配置文件 /etc/security/access.conf
redhat : ALL EXCEPT 192.168.0. (ip為192.168.0.X的redhat機(jī)器無權(quán)訪問)
結(jié)果:ip為192.168.0.X的redhat機(jī)器執(zhí)行ssh時,無法登錄該機(jī)器。

pam_limits.so 模式使用

1.模塊應(yīng)用到sshd服務(wù),修改服務(wù)文件
vi /etc/pam.d/sshd 添加:
session required pam_limits.so
session控制用戶進(jìn)程的登錄次數(shù),文件大小,通過控制用戶的會話進(jìn)程來限制用戶使用的資源。
2.編緝pam_limits.so的配置文件/etc/security/limits.conf

  •            hard    nofile          65536
    
  •            soft    nofile          65535
    

任意用戶進(jìn)程的句柄上限都是65535。

二、chrony搭建私有ntp服務(wù)

搭建環(huán)境
服務(wù)器:192.168.217.132
客戶端:192.168.217.131

服務(wù)器端配置

1、首先本機(jī)查看是或否有chrony軟件,沒有的話安裝

[root@Rocky8-132 ~]#rpm -q chrony && > /dev/null || yum -y install chrony
chrony-4.1-1.el8.x86_64

2、編輯配置文件

[root@Rocky8-132 ~]#vim /etc/chrony.conf
#pool 2.pool.ntp.org iburst  #注釋掉自帶的
server ntp.aliyun.com iburst #和阿里云的服務(wù)器同步
server time1.cloud.tencent.com iburst #和騰訊云同步

# Allow NTP client access from local network.
#allow 192.168.0.0/16
allow 192.168.217.0/24 #加上這一行,指定允許同步的網(wǎng)段

# Serve time even if not synchronized to a time source.
#local stratum 10 #將這一行的注釋去掉。表示互聯(lián)網(wǎng)無法連接時,仍然可以為客戶端提供時間同步

3、重啟chronyd服務(wù)

[root@Rocky8-132 ~]#systemctl restart chronyd.service 

4、查看服務(wù)端的監(jiān)聽端口123是否開啟

[root@Rocky8-132 ~]#ss -nlu
State          Recv-Q         Send-Q                  Local Address:Port                  Peer Address:Port         Process         
UNCONN         0              0                             0.0.0.0:123                        0.0.0.0:*     

客戶端配置

1、編輯配置文件

[root@Rocky8-131 ~]#vim /etc/chrony.conf 
#注釋點(diǎn)默認(rèn)服務(wù)器,添加上之前設(shè)置好的時間服務(wù)器
#pool 2.pool.ntp.org iburst
server 192.168.217.132 iburst

2、重啟chronyd服務(wù)

[root@Rocky8-131 ~]#systemctl restart chronyd.service 

3.查看服務(wù)日志

[root@Rocky8-131 ~]#systemctl status chronyd.service 
...
Dec 05 21:35:08 Rocky8-131 chronyd[2216]: Selected source 192.168.217.132
...

三、CDN原理

要理解 CDN 這件事情,我們就得先理解瀏覽器發(fā)出一個請求的過程是怎樣的,其整體過程如下。

瀏覽器網(wǎng)絡(luò)請求過程

  1. 用戶在瀏覽器中輸入要訪問的網(wǎng)址域名。

  2. 瀏覽器向本地 DNS 服務(wù)器請求對域名的解析。

  3. 如果本地 DNS 服務(wù)器有域名的解析結(jié)果,那么直接響應(yīng)用戶請求,返回該域名對應(yīng)的 IP 地址。

  4. 如果本地 DNS 服務(wù)器沒有域名的解析結(jié)果,那么則會遞歸地向 DNS 系統(tǒng)請求解析,隨后將該結(jié)果返回給用戶。

  5. 瀏覽器得到域名解析結(jié)果后,其實(shí)也就是域名對應(yīng)的 IP 地址。

  6. 隨后瀏覽器向服務(wù)器請求內(nèi)容。

  7. 服務(wù)器將用戶請求內(nèi)容返回給瀏覽器。

通過這么復(fù)雜的步驟,用戶就可以看到頁面內(nèi)容了。但實(shí)際上,在第 6、7 這兩步的時候,其中間也經(jīng)過了非常復(fù)雜的過程。為了更清晰地表述,我們可以將這個過程分為 3 個主要節(jié)點(diǎn)。
服務(wù)器數(shù)據(jù)傳輸過程
網(wǎng)站服務(wù)器通過公網(wǎng)出口,再通過長途骨干網(wǎng),最后通過用戶的寬帶廣貓到達(dá)用戶所在的局域網(wǎng),最終才到達(dá)用戶電腦的瀏覽器。

其中長途骨干網(wǎng)的傳輸是最為耗時的,它需要經(jīng)過網(wǎng)站服務(wù)器所在的機(jī)房、骨干網(wǎng)、用戶所在城域網(wǎng)、用戶所在接入網(wǎng)等,其物理傳輸距離非常遙遠(yuǎn)。

在這種情況下,如果傳輸?shù)臄?shù)據(jù)非常多,訪問的用戶特別大,那么就會出現(xiàn)很長的延時,影響用戶體驗。同時,每請求一次數(shù)據(jù)都需要經(jīng)過漫長的數(shù)據(jù)傳輸,對于長途骨干網(wǎng)來說,都是一次負(fù)擔(dān)。

剛剛說的這個場景,很形象的一個例子是春節(jié)搶票的場景。當(dāng)我們春節(jié)搶票時,我們都會登陸 12306 網(wǎng)站,網(wǎng)站上肯定有不少圖片資源。這時候可能同時會有 1 個億的人,同時去請求一張一模一樣的圖片。

這時候如果我們都按照上面的過程去請求一次圖片數(shù)據(jù),那么將會產(chǎn)生 1 億次的網(wǎng)絡(luò)數(shù)據(jù)傳輸,這對于我們整個國家的互聯(lián)網(wǎng)基礎(chǔ)設(shè)施是個災(zāi)難??!

但事實(shí)情況是:12306 貌似也沒有掛掉呀!

那么他們是如何解決這個問題呢?答案就是:CDN!

什么是 CDN ?

其實(shí) CDN 就是內(nèi)容分發(fā)網(wǎng)絡(luò)的意思,其英文全稱為 Content Delivery Network。簡單地說,CDN 可以提前把數(shù)據(jù)存在離用戶最近的數(shù)據(jù)節(jié)點(diǎn),從而避免長途跋涉經(jīng)過長途骨干網(wǎng),最終達(dá)到減少骨干網(wǎng)負(fù)擔(dān)、提高訪問速度的目的。

按照我們上面的場景,如果沒有 CDN 的話,每次請求都需要從網(wǎng)站服務(wù)器經(jīng)過公網(wǎng)出口、長途骨干網(wǎng)、用戶接入局域網(wǎng),最終到達(dá)瀏覽器。但是當(dāng)有了 CDN 之后,瀏覽器請求圖片數(shù)據(jù)時,會先去 CDN 緩存服務(wù)器獲取。如果獲取到數(shù)據(jù),那么就直接返回。否則才會經(jīng)過長途骨干網(wǎng),最終到達(dá)網(wǎng)站服務(wù)器獲取圖片數(shù)據(jù)。那么只要我們提前在 CDN 緩存服務(wù)器上傳圖片,那么我們就可以極大地減少網(wǎng)絡(luò)流量,同時減少網(wǎng)絡(luò)延遲。

從上述我們可能會覺得:這不就是在長途骨干網(wǎng)和用戶局域網(wǎng)中間,加了一個服務(wù)器嘛。但事實(shí)上可并不是這樣,CDN 其實(shí)還縮短了請求數(shù)據(jù)的距離。

我們知道用戶所處的位置可能是全國各地,為了盡可能地減少網(wǎng)絡(luò)傳輸?shù)难訒r,一般都會在離用戶較近的地方設(shè)置 CDN 緩存服務(wù)器,例如:在華南、華北、華東、西南設(shè)置一個主 CDN 服務(wù)器,這樣各個地區(qū)的用戶就可以直接請求對應(yīng)的 CDN 服務(wù)器,而不需要來回跑大半個中國,極大地提高了效率!

因此,當(dāng)我們說內(nèi)容分發(fā)網(wǎng)絡(luò)的時候,腦海里應(yīng)該有如下這樣一張圖片:遍布全國各地的 CDN 緩存服務(wù)器,組成了我們的內(nèi)容分發(fā)網(wǎng)絡(luò)。****每次用戶請求都會到離他最近的 CDN 服務(wù)器請求數(shù)據(jù),從而極大地提高訪問速度。

CDN 工作原理

到了這里,相信大家都知道 CDN 是什么了。但實(shí)際上 CDN 是如何與 DNS 結(jié)合起來的,這里面還是有點(diǎn)復(fù)雜的。加入了 CDN 之后,瀏覽器的網(wǎng)絡(luò)請求就變成如下圖所示的情況。

image.png

CDN 基本工作過程

  1. 瀏覽器發(fā)起圖片 URL 請求,經(jīng)過本地 DNS 解析,會將域名解析權(quán)交給域名 CNAME 指向的 CDN 專用 DNS 服務(wù)器。

  2. CDN 的 DNS 服務(wù)器將 CDN 的全局負(fù)載均衡設(shè)備 IP 地址返回給瀏覽器。

  3. 瀏覽器向 CDN 全局負(fù)載均衡設(shè)備發(fā)起 URL 請求。

  4. CDN 全局負(fù)載均衡設(shè)備根據(jù)用戶 IP 地址,以及用戶請求的 URL,選擇一臺用戶所屬區(qū)域的區(qū)域負(fù)載均衡設(shè)備,向其發(fā)起請求。

  5. 區(qū)域負(fù)載均衡設(shè)備會為用戶選擇最合適的 CDN 緩存服務(wù)器(考慮的依據(jù)包括:服務(wù)器負(fù)載情況,距離用戶的距離等),并返回給全局負(fù)載均衡設(shè)備。

  6. 全局負(fù)載均衡設(shè)備將選中的 CDN 緩存服務(wù)器 IP 地址返回給用戶。

  7. 用戶向 CDN 緩存服務(wù)器發(fā)起請求,緩存服務(wù)器響應(yīng)用戶請求,最終將用戶所需要偶的內(nèi)容返回給瀏覽器。

使用 CDN 服務(wù)的網(wǎng)站,只需要將域名解析權(quán)交給 CDN 服務(wù)商,接著將需要分發(fā)的內(nèi)容上傳到 CDN,就可以實(shí)現(xiàn)內(nèi)容加速了!

四、搭建智能DNS,實(shí)現(xiàn)不同地域客戶端解析到不同主機(jī)

實(shí)驗環(huán)境
DNS主服務(wù)器: 192.168.217.135,10.0.0.5
web服務(wù)器bj:192.168.217.133
web服務(wù)器sh:10.0.0.2
DNS客戶端: 192.168.217.134, 10.0.0.4

五、DNS解析流程

什么是DNS

官方解釋:DNS(Domain Name System,域名系統(tǒng)),因特網(wǎng)上作為域名和IP地址相互映射的一個分布式數(shù)據(jù)庫,能夠使用戶更方便的訪問互聯(lián)網(wǎng),而不用去記住能夠被機(jī)器直接讀取的IP數(shù)串。

通過主機(jī)名,最終得到該主機(jī)名對應(yīng)的IP地址的過程叫做域名解析(或主機(jī)名解析)。

通俗的講,我們更習(xí)慣于記住一個網(wǎng)站的名字,比如www.baidu.com,而不是記住它的ip地址,比如:167.23.10.2。

由此可見,DNS 在日常生活中多么重要。每個人上網(wǎng),都需要訪問它,但是同時,這對它來講也是非常大的挑戰(zhàn)。一旦它出了故障,整個互聯(lián)網(wǎng)都將癱瘓。另外,上網(wǎng)的人分布在全世界各地,如果大家都去同一個地方訪問某一臺服務(wù)器,時延將會非常大。因而,DNS 服務(wù)器,一定要設(shè)置成高可用、高并發(fā)和分布式的。
于是,就有了這樣樹狀的層次結(jié)構(gòu)。

image.png
  • 根 DNS 服務(wù)器 :返回頂級域 DNS 服務(wù)器的 IP 地址
  • 頂級域 DNS 服務(wù)器:返回權(quán)威 DNS 服務(wù)器的 IP 地址
  • 權(quán)威 DNS 服務(wù)器 :返回相應(yīng)主機(jī)的 IP 地址

接著讓我們來了解一下域名的結(jié)構(gòu):

image.png

DNS 解析流程

為了提高 DNS 的解析性能,很多網(wǎng)絡(luò)都會就近部署 DNS 緩存服務(wù)器。于是,就有了以下的 DNS 解析流程。

電腦先查詢自身的本地DNS緩存,若未查到接著向下查詢。


image.png

電腦客戶端會發(fā)出一個 DNS 請求,問 www.baidu.com 的 IP 是啥啊,并發(fā)給本地域名服務(wù)器 (本地DNS)。那本地域名服務(wù)器 (本地 DNS) 是什么呢?如果是通過 DHCP 配置,本地 DNS 由你的網(wǎng)絡(luò)服務(wù)商(ISP),如電信、移動等自動分配,它通常就在你網(wǎng)絡(luò)服務(wù)商的某個機(jī)房。

本地 DNS 收到來自客戶端的請求。你可以想象這臺服務(wù)器上緩存了一張域名與之對應(yīng) IP 地址的大表格。如果能找到 www.baidu.com,它直接就返回 IP 地址。如果沒有,本地 DNS 會去問它的根域名服務(wù)器。根域名服務(wù)器是最高層次的,全球共有 13 套。它不直接用于域名解析,但能指明一條道路。

根 DNS 收到來自本地 DNS 的請求,發(fā)現(xiàn)后綴是 .com,說:“哦, www.baidu.com 啊,這個域名是由.com 區(qū)域管理,我給你它的頂級域名服務(wù)器的地址,你去問問它吧?!?/p>

本地 DNS 轉(zhuǎn)向問頂級域名服務(wù)器:“老二,你能告訴我 www.baidu.com 的 IP 地址嗎?”頂級域名服務(wù)器就是大名鼎鼎的比如 .com、.net、 .org 這些一級域名,它負(fù)責(zé)管理二級域名,比如baidu.com,所以它能提供一條更清晰的方向。

頂級域名服務(wù)器會給你負(fù)責(zé) www.baidu.com 區(qū)域的權(quán)威 DNS 服務(wù)器的地址,讓你去那里問。

本地 DNS 轉(zhuǎn)向問權(quán)威 DNS 服務(wù)器:“您好, www.baidu.com 對應(yīng)的 IP 是啥呀?”baidu.com 的權(quán)威 DNS 服務(wù)器,它是域名解析結(jié)果的原出處。為啥叫權(quán)威呢?就是我的域名我做主。

權(quán)威 DNS 服務(wù)器查詢后將對應(yīng)的 IP 地址 X.X.X.X 告訴本地 DNS。

本地 DNS 再將 IP 地址返回客戶端,客戶端和目標(biāo)建立連接。

至此DNS的解析流程便結(jié)束了。

六、iptables 5表5鏈解釋

五鏈(chain):

INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING

  • PREROUTING:前置路由檢查(包含:nat,mangle,raw)數(shù)據(jù)包在進(jìn)行路由決策前的規(guī)則,一般用于改變數(shù)據(jù)包的目標(biāo)地址
  • INPUT:進(jìn)內(nèi)核(包含:filter,mangle) 數(shù)據(jù)包經(jīng)由路由決策后,進(jìn)入本機(jī)處理之前應(yīng)用的規(guī)則,一般用于本機(jī)進(jìn)程處理的數(shù)據(jù)包(數(shù)據(jù)包本機(jī)處理)
  • OUTPUT: 出內(nèi)核(包含:filter,nat,mangle,raw) 從本機(jī)輸出時應(yīng)用的規(guī)則,一般用于本機(jī)處理后的數(shù)據(jù)包(數(shù)據(jù)包本機(jī)發(fā)出)
  • FORWARD: 轉(zhuǎn)發(fā)(包含:filter,mangle) 數(shù)據(jù)包經(jīng)由路由決策后,本機(jī)不做處理,僅僅是轉(zhuǎn)發(fā)數(shù)據(jù)包時應(yīng)用的規(guī)則(數(shù)據(jù)包本機(jī)轉(zhuǎn)發(fā))
  • POSTROUTING: 后置路由檢查(包含:nat,mangle,raw)數(shù)據(jù)包從本機(jī)出去前,對數(shù)據(jù)包應(yīng)用的規(guī)則,一般用于更改數(shù)據(jù)包的原地址信息

五表(table):

security -->raw-->mangle-->nat-->filter

  • filter:過濾規(guī)則表,根據(jù)預(yù)定義的規(guī)則過濾符合條件的數(shù)據(jù)包,默認(rèn)表
  • nat:network address translation 地址轉(zhuǎn)換規(guī)則表。主要實(shí)現(xiàn)網(wǎng)絡(luò)地址轉(zhuǎn)換的表。可以自由轉(zhuǎn)換數(shù)據(jù)報文中的ip和port
  • mangle:修改數(shù)據(jù)標(biāo)記位規(guī)則表,主要實(shí)現(xiàn)數(shù)據(jù)包的而拆分-修改-封裝。
  • raw:關(guān)閉啟用的連接跟蹤機(jī)制(關(guān)閉nat表的追蹤功能),加快封包穿越防火墻速度。
  • security:用于強(qiáng)制訪問控制(MAC)網(wǎng)絡(luò)規(guī)則,由Linux安全模塊(如SELinux)實(shí)現(xiàn)。主要針對的是數(shù)據(jù)鏈路層的管理規(guī)則組合

三種報文流向

流入本機(jī):PREROUTING --> INPUT–>用戶空間進(jìn)程
流出本機(jī):用戶空間進(jìn)程 -->OUTPUT–> POSTROUTING
轉(zhuǎn)發(fā):PREROUTING --> FORWARD --> POSTROUTING

iptables練習(xí)

5000-6000端口僅192.168.0.0/24網(wǎng)段內(nèi)的主機(jī)訪問
1.iptables實(shí)現(xiàn)

[root@Rocky8 ~]#iptables -A INPUT -s 192.168.0.0/24 -p tcp --dport 5000:6000 -j ACCEPT

[root@Rocky8 ~]#iptables -vnL Chain INPUT (policy ACCEPT 0 packets, 0 bytes) 
pkts bytes target prot opt in out source destination 
0 0 ACCEPT tcp -- * * 192.168.0.0/24 0.0.0.0/0 tcp dpts:5000:6000

2 firewalld實(shí)現(xiàn)

[root@Rocky8 ~]#firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 port protocol=tcp port=5000-6000 accept' 
success

[root@Rocky8 ~]#firewall-cmd --reload
success

3.nftable實(shí)現(xiàn)

#創(chuàng)建表
[root@Rocky8 ~]#nft add table inet test_table

#創(chuàng)建鏈
[root@Rocky8 ~]#nft add chain inet test_table test_filter_input_chain { type filter hook input priority 0 \; }

#添加規(guī)則
[root@Rocky8 ~]#nft add rule inet test_table test_filter_input_chain ip saddr 192.168.0.0/24 tcp dport {5000-6000} accept

七、mysql的各發(fā)行版有哪些

①常見發(fā)行版本:

1、MySQL官方版本(分為社區(qū)版和企業(yè)版)

企業(yè)版性能略強(qiáng),提供了更多的功能和工具

2、Percona MySQL

Percona是由MySQL最初開發(fā)者組成的一個社區(qū),Percona MySQL是基于官方社區(qū)版本二次開發(fā)的,在MySQL官方社區(qū)版的基礎(chǔ)上增加了一些MySQL官方企業(yè)版才有的功能,同時對官方社區(qū)版進(jìn)行了一些優(yōu)化,從目前公布的數(shù)據(jù)來看,Percona MySQL 性能是要優(yōu)于MySQL官方社區(qū)版的。

Percona MySQL 下載地址:https://www.percona.com/downloads/Percona-Server-LATEST/

3、MariaDB

MariaDB是由MySQL初始創(chuàng)建者在MySQL被Oracle收購之后,又獨(dú)立成立了一家公司,來開發(fā)的數(shù)據(jù)庫。

其以MySQL5.5源代碼為基礎(chǔ),發(fā)展起來。

MariaDB并不能完全和MySQL官方版完全兼容,但大多數(shù)功能是兼容的。

我們可以很容易的將數(shù)據(jù)從MySQL遷移到MariaDB上。

MariaDB 下載地址:https://downloads.mariadb.org/

②各個發(fā)行版之間的區(qū)別及優(yōu)缺點(diǎn)

1、基礎(chǔ)對比
MySQL Percona MySQL MariaDB
是否開源 開源 開源 開源
事務(wù)型存儲引擎 InnoDB XtraDB XtraDB
監(jiān)控工具 企業(yè)版監(jiān)控工具,社區(qū)版不提供 Percona Monitor工具 Monyog

說明:

InnoDB屬于Oracle公司,不對外提供,因此對于事務(wù)型存儲引擎,Percona MySQL 和 MariaDB使用的都是由percona公司開發(fā)的XtraDB,XtraDB和InnoDB完全兼容。

對于監(jiān)控工具來說,盡管MySQL社區(qū)版不提供監(jiān)控工具,但使用Percona Monitor工具 或 Monyog都可以實(shí)現(xiàn)對MySQL社區(qū)版的數(shù)據(jù)監(jiān)控。

2、高可用對比
MySQL Percona MySQL MariaDB
基于日志點(diǎn)復(fù)制 支持 支持 支持
基于Gtid復(fù)制 支持 支持 基于gtid復(fù)制
高可用集群方案 Replication Replication、PXC Galera Cluster
數(shù)據(jù)庫中間件 MySQL Router Proxy SQL MaxScale

說明:

基于Gtid復(fù)制方面,MySQL和Percona MySQL都支持,MariaDB雖然也支持,但MariaDB的gtid和MySQL不兼容,因為生成規(guī)則和MySQL官方版不同。

數(shù)據(jù)庫中間件方面,它們功能是類似的,都是通用的,都是作為和mycat類似的數(shù)據(jù)庫中間件。但值得注意的是,MaxScale對MySQL5.6及以前版本有很好的的支持,但對5.6版本以后的版本支持并不好。

3、安全性對比
MySQL Percona MySQL MariaDB
防火墻 企業(yè)版提供 ProxySQL FireWall MaxScale FireWall
用戶審計功能 企業(yè)版提供 審計日志 審計日志
密碼加密方面 用戶密碼生命周期 用戶密碼生命周期
加密方式 sha256_password caching_sha2_password sha256_password caching_sha2_password ed25519_sha256 password

說明:

防火墻方面:MySQL社區(qū)版是沒有這個概念的,MySQL只在企業(yè)版提供防火墻功能。Percona MySQL 和 MariaDB都是通過其數(shù)據(jù)庫中間層產(chǎn)品來間接提供防火墻功能。但值得一提的是,MariaDB的MaxScale FireWall 并不是開源的。

用戶審計方面:MySQL并沒有在社區(qū)版提供該功能,只在企業(yè)版提供。Percona MySQL和MariaDB都是以插件的方式提供了審計日志功能。對用戶的行為進(jìn)行審核和監(jiān)控。

用戶密碼方面:安全性方面重點(diǎn)在于用戶密碼是否安全,密碼是否很容易被暴力破解,MySQL在8.0版本中,在安全特性上有了很大的提升,不僅可以限制用戶密碼的復(fù)雜度,同時可以對密碼的生命周期進(jìn)行控制,來限制密碼重復(fù)使用的歷史次數(shù)。并且升級了其默認(rèn)的密碼加密方法,用caching_sha2_password 插件,不僅提高了密碼加密的速度,同時可以保證同一密碼每次生成的加密串是不同的,大大降低了通過占庫對密碼進(jìn)行破解的可能性。

該功能目前在MySQL官方版和Percona MySQL中都可以看到,但目前MariaDB還未提供該功能。

八、MySQL索引的作用

在mysql中,索引可以用來快速查詢數(shù)據(jù)表中有某一特定值的記錄,大大加快數(shù)據(jù)的查詢速度;在列上創(chuàng)建了索引之后,查找數(shù)據(jù)時可以直接根據(jù)該列上的索引找到對應(yīng)記錄行的位置,從而快捷地查找到數(shù)據(jù)。如果表中查詢的列有一個索引,MySQL就能快速到達(dá)一個位置去搜索數(shù)據(jù)文件,而不必查看所有數(shù)據(jù),這樣將會節(jié)省很大一部分時間;且通過創(chuàng)建唯一索引可以保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性。

為什么要使用索引

索引就是根據(jù)表中的一列或若干列按照一定順序建立的列值與記錄行之間的對應(yīng)關(guān)系表,實(shí)質(zhì)上是一張描述索引列的列值與原表中記錄行之間一 一對應(yīng)關(guān)系的有序表。

索引是 MySQL 中十分重要的數(shù)據(jù)庫對象,是數(shù)據(jù)庫性能調(diào)優(yōu)技術(shù)的基礎(chǔ),常用于實(shí)現(xiàn)數(shù)據(jù)的快速檢索。

在 MySQL 中,通常有以下兩種方式訪問數(shù)據(jù)庫表的行數(shù)據(jù):

1) 順序訪問

順序訪問是在表中實(shí)行全表掃描,從頭到尾逐行遍歷,直到在無序的行數(shù)據(jù)中找到符合條件的目標(biāo)數(shù)據(jù)。

順序訪問實(shí)現(xiàn)比較簡單,但是當(dāng)表中有大量數(shù)據(jù)的時候,效率非常低下。例如,在幾千萬條數(shù)據(jù)中查找少量的數(shù)據(jù)時,使用順序訪問方式將會遍歷所有的數(shù)據(jù),花費(fèi)大量的時間,顯然會影響數(shù)據(jù)庫的處理性能。

2) 索引訪問

索引訪問是通過遍歷索引來直接訪問表中記錄行的方式。

使用這種方式的前提是對表建立一個索引,在列上創(chuàng)建了索引之后,查找數(shù)據(jù)時可以直接根據(jù)該列上的索引找到對應(yīng)記錄行的位置,從而快捷地查找到數(shù)據(jù)。索引存儲了指定列數(shù)據(jù)值的指針,根據(jù)指定的排序順序?qū)@些指針排序。

例如,在學(xué)生基本信息表 tb_students 中,如果基于 student_id 建立了索引,系統(tǒng)就建立了一張索引列到實(shí)際記錄的映射表。當(dāng)用戶需要查找 student_id 為 12022 的數(shù)據(jù)的時候,系統(tǒng)先在 student_id 索引上找到該記錄,然后通過映射表直接找到數(shù)據(jù)行,并且返回該行數(shù)據(jù)。因為掃描索引的速度一般遠(yuǎn)遠(yuǎn)大于掃描實(shí)際數(shù)據(jù)行的速度,所以采用索引的方式可以大大提高數(shù)據(jù)庫的工作效率。

簡而言之,不使用索引,MySQL 就必須從第一條記錄開始讀完整個表,直到找出相關(guān)的行。表越大,查詢數(shù)據(jù)所花費(fèi)的時間就越多。如果表中查詢的列有一個索引,MySQL 就能快速到達(dá)一個位置去搜索數(shù)據(jù)文件,而不必查看所有數(shù)據(jù),這樣將會節(jié)省很大一部分時間。

索引的優(yōu)點(diǎn)如下:

通過創(chuàng)建唯一索引可以保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性。

可以給所有的 MySQL 列類型設(shè)置索引。

可以降低服務(wù)需要掃描的數(shù)據(jù)量,減少了IO次數(shù),大大加快數(shù)據(jù)的查詢速度,這是使用索引最主要的原因。

在實(shí)現(xiàn)數(shù)據(jù)的參考完整性方面可以加速表與表之間的連接。

在使用分組和排序子句進(jìn)行數(shù)據(jù)查詢時也可以顯著減少查詢中分組和排序的時間

注:索引可以提高查詢速度,但是會影響插入記錄的速度。因為,向有索引的表中插入記錄時,數(shù)據(jù)庫系統(tǒng)會按照索引進(jìn)行排序,這樣就降低了插入記錄的速度,插入大量記錄時的速度影響會更加明顯。這種情況下,最好的辦法是先刪除表中的索引,然后插入數(shù)據(jù),插入完成后,再創(chuàng)建索引。

九、MySQL btree索引的原理

B-Tree結(jié)構(gòu)的數(shù)據(jù)可以讓系統(tǒng)高效的找到數(shù)據(jù)所在的磁盤塊。為了描述B-Tree,首先定義一條記錄為一個二元組[key, data] ,key為記錄的鍵值,對應(yīng)表中的主鍵值,data為一行記錄中除主鍵外的數(shù)據(jù)。對于不同的記錄,key值互不相同。

image.png

檢索原理:首先從根節(jié)點(diǎn)進(jìn)行二分查找,如果找到則返回對應(yīng)節(jié)點(diǎn)的data,否則對相應(yīng)區(qū)間的指針指向的節(jié)點(diǎn)遞歸進(jìn)行查找,直到找到節(jié)點(diǎn)或未找到節(jié)點(diǎn)返回null指針。(存放數(shù)據(jù)記錄越少樹越高,高IO次數(shù)多,效率越低)

面試題: InnoDB中一顆的B+樹可以存放多少行數(shù)據(jù)?

假設(shè)定義一顆B+樹高度為2,即一個根節(jié)點(diǎn)和若干葉子節(jié)點(diǎn)。那么這棵B+樹的存放總行記錄數(shù)=根節(jié)點(diǎn)指針數(shù) * 單個葉子記錄的行數(shù)。這里先計算葉子節(jié)點(diǎn),B+樹中的單個葉子節(jié)點(diǎn)的大小為16K,假設(shè)每一條目為1K,那么 記錄數(shù)即為16(16k/1K=16),然后計算非葉子節(jié)點(diǎn)能夠存放多少個指針,假設(shè)主鍵ID為bigint類型,那么長 度為8字節(jié),而指針大小在InnoDB中是設(shè)置為6個字節(jié),這樣加起來一共是14個字節(jié)。那么通過頁大小/(主鍵ID大小+指針大小),即16384/14=1170個指針,所以一顆高度為2的B+樹能存放16 * 1170=18720條這樣的 記錄。根據(jù)這個原理就可以算出一顆高度為3的B+樹可以存放16 * 1170 * 1170=21902400條記錄。所以在InnoDB中B+樹高度一般為2-3層,它就能滿足千萬級的數(shù)據(jù)存儲

十、MySQL安全加固

1、MySQL 安全防護(hù)

一、配置添加新用戶密碼復(fù)雜度檢查

二、配置密碼過期策略

三、MySQL數(shù)據(jù)庫限制多次登錄失敗重試時間

一、配置密碼復(fù)雜度檢查

1.mysql 5.7.15版本好像默認(rèn)啟用了密碼復(fù)雜度設(shè)置,插件名字叫做 validate_password

mysql>>INSTALL PLUGIN validate_password SONAME 'validate_password.so';

2、加上/etc/my.cnf配置

[mysqld]

plugin-load=validate_password.so

validate_password_policy=2 

# 0 or LOW 僅需需符合密碼長度

# 1 or MEDIUM 滿足LOW策略,同時還需滿足至少有1個數(shù)字,小寫字母,大寫字母和特殊字符

# 2 or STRONG 滿足MEDIUM策略,同時密碼不能存在字典文件(dictionary file)中

validate-password=FORCE_PLUS_PERMANENT

二、配置密碼定期更換
定期更換口令策略:由于定期修改密碼,會涉及到應(yīng)用一塊更改,涉及到應(yīng)用重啟,不建議定期修改密碼。

1、在/etc/my.cnf配置文件中增加

[mysqld]

default_password_lifetime=90  # 90天過期

三、MySQL數(shù)據(jù)庫限制多次登錄失敗重試時間
需求:

如果連續(xù)5次輸入密碼錯誤,限制登錄數(shù)據(jù)庫30分鐘 --次數(shù)和限制時間可以根據(jù)實(shí)際變更

解決方法(通過MySQL插件控制)

1、登錄數(shù)據(jù)庫,安裝插件(CONNECTION_CONTROL和CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS)

mysql -uroot -p

install plugin CONNECTION_CONTROL soname 'connection_control.so';

install plugin CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS soname 'connection_control.so';

2、查看所有已安裝的插件

show plugins;

3、按需修改配置文件(/etc/my.cnf)

vim /etc/my.cnf

添加如下兩行配置:

connection-control-failed-connections-threshold=5   #登陸失敗次數(shù)限制

connection-control-min-connection-delay=1800000    #限制重試時間,此處為毫秒,注意按需求換算

4、重新登錄數(shù)據(jù)庫,查看配置是否生效

service mysqld restart 或 service mysql restart
mysql -uroot -p
show variables like '%connection_control%';

5、驗證

輸錯5次密碼后,會發(fā)現(xiàn)第6次登錄會卡住,限制登錄,時間為設(shè)定的限制時間30分鐘

2、MySQL服務(wù)安全加固

轉(zhuǎn)載來源 : https://help.aliyun.com/knowledge_detail/49568.html

介紹

數(shù)據(jù)庫管理人員可以參考本文檔進(jìn)行 MySQL 數(shù)據(jù)庫系統(tǒng)的安全配置加固,提高數(shù)據(jù)庫的安全性,確保數(shù)據(jù)庫服務(wù)穩(wěn)定、安全、可靠地運(yùn)行。
漏洞發(fā)現(xiàn)
您可以使用安騎士企業(yè)版自動檢測您的服務(wù)器上是否存在 MySQL 漏洞問題,或者您也可以自己排查您服務(wù)器上的 MySQL 服務(wù)是否存在安全問題。

判斷Mysql數(shù)據(jù)庫版本

nmap的指紋識別可以精確的判斷數(shù)據(jù)庫的版本號,通過telnet來判斷是否支持遠(yuǎn)程連接(telnet 192.168.0.88 3306)。當(dāng)連接成功后會顯示Mysql版本號,然后可以利用hydra來探測是否存在弱口令。

hydra -L user.txt -P pass.txt -o savessh.log -f -vV -e ns 192.168.0.88 mysql

InnoDB并發(fā)調(diào)優(yōu)
解決InnoDB高并發(fā)條件性能下降快,就是限制并發(fā)。SHOW INNODB STATUS輸出中的SEMAPHORES部分來確認(rèn)是否發(fā)生了并發(fā)問題,
并發(fā) = CPU的數(shù)量 x 磁盤的數(shù)量 x 2

安全加固

1、帳號安全

正確設(shè)置目錄權(quán)限:
設(shè)置目錄權(quán)限的原則是軟件和數(shù)據(jù)分開,具體如下:

  1. 將 mysql 安裝在單獨(dú)的用戶下
  2. 安裝時,以 root 用戶進(jìn)行安裝,mysql 的軟件默認(rèn)都為 root 權(quán)限
  3. 安裝完畢后,將數(shù)據(jù)目錄權(quán)限設(shè)置為實(shí)際運(yùn)行 mysql 的用戶權(quán)限,比如:
Chown –R mysql:mysql /home/mysql/data

-禁止 Mysql 以管理員帳號權(quán)限運(yùn)行
以普通帳戶安全運(yùn)行 mysqld,禁止以管理員帳號權(quán)限運(yùn)行 MySQL 服務(wù)。在 /etc/my.cnf 配置文件中進(jìn)行以下設(shè)置。

[mysql.server]
user=mysql

-避免不同用戶間共享帳號
參考以下步驟。
a、創(chuàng)建用戶。

mysql> mysql> insert into
mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_sub 
ject) values("localhost","pppadmin",password("passwd"),'','','');

執(zhí)行以上命令可以創(chuàng)建一個 phplamp 用戶。
b、使用該用戶登錄 MySQL 服務(wù)。

mysql>exit; 
@>mysql -u phplamp -p 
@>輸入密碼 
mysql>登錄成功

-刪除無關(guān)帳號
DROP USER 語句可用于刪除一個或多個 MySQL 賬戶。使用 DROP USER 命令時,必須確保當(dāng)前賬號擁有 MySQL 數(shù)據(jù)庫的全局 CREATE USER 權(quán)限或 DELETE 權(quán)限。賬戶名稱的用戶和主機(jī)部分分別與用戶表記錄的 User 和 Host 列值相對應(yīng)。
執(zhí)行DROP USER user;語句,您可以取消一個賬戶和其權(quán)限,并刪除來自所有授權(quán)表的帳戶權(quán)限記錄。

2、口令

檢查賬戶默認(rèn)密碼和弱密碼。口令長度需要至少八位,并包括數(shù)字、小寫字母、大寫字母和特殊符號四類中的至少兩種類型,且五次以內(nèi)不得設(shè)置相同的口令。密碼應(yīng)至少每 90 天進(jìn)行一次更換。
修改root用戶口令,刪除空口令
您可以通過執(zhí)行以下命令修改密碼。

 mysql> update user set password=password('test!p3') where user='root';
 mysql> flush privileges;

3、授權(quán)

在數(shù)據(jù)庫權(quán)限配置能力范圍內(nèi),根據(jù)用戶的業(yè)務(wù)需要,配置其所需的最小權(quán)限。

查看數(shù)據(jù)庫授權(quán)情況。

mysql> use mysql;
mysql> select * from user;
mysql>select * from db;
mysql>select * from host;
mysql>select * from tables_priv;
mysql>select * from columns_priv;

通過 revoke 命令回收不必要的或危險的授權(quán)。

mysql> help revoke

4、開啟日志審計功能

數(shù)據(jù)庫應(yīng)配置日志功能,便于記錄運(yùn)行狀況和操作行為。

MySQL服務(wù)有以下幾種日志類型:

錯誤日志: -log-err
查詢?nèi)罩荆?-log (可選)
慢查詢?nèi)罩荆?-log-slow-queries (可選)
更新日志: -log-update
二進(jìn)制日志: -log-bin
找到 MySQL 的安裝目錄,在 my.ini 配置文件中增加上述所需的日志類型參數(shù),保存配置文件后,重啟 MySQL 服務(wù)即可啟用日志功能。例如

#Enter a name for the binary log. Otherwise a default name will be used. 
#log-bin= 
#Enter a name for the query log file. Otherwise a default name will be used. 
#log= 
#Enter a name for the error log file. Otherwise a default name will be used. 
log-error= 
#Enter a name for the update log file. Otherwise a default name will be used. 
#log-update=
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容