認識mysql總結_從根上理解Mysql - 讀后個人總結1-搜云庫

初識 MySQL

4a6435793a2a86686e051fdd8de63413.png

通信介紹

MySQL 也是典型的 C / S 模型,分為客戶端及服務端,服務端一般部署在遠端服務器中,也可以部署至本地,然后客戶端跟服務端通信則可以使用依賴網絡的 TCP 長連接或 Unix-like 的系統下可以使用 Socket文件的形式通信

連接階段

客戶端跟服務器端通信,MySQL 服務器會維護為每個客戶端請求建立一個線程專門處理請求

連接可以通過 SSL 保證傳輸安全性,實際情況一般都是通過 SSL 訪問跳板機再通過內網地址訪問到 MySQL 服務器

MySQL 服務器也會通過用戶名,密碼,主機信息來做認證,判斷是否提供對應權限的服務

查詢緩存階段

MySQL 服務器為提供查詢效率,所以加入了全局緩存,當緩存命中時可以直接返回結果。但是實際兩個請求只要有任何字符上的不一樣,都會導致緩存不能命中,同時對于讀寫相差不多或寫多讀少的表,每次寫操作都會導致緩存失效造成不必要的開銷,所以在 MySQL 5.7+ 版本中該功能以及被廢棄,MySQL 8.0+ 版本中被移除

語法解析階段

如果緩存沒有命中,MySQL 服務接下去就會開始解析 SQL 語句,如果有語法錯誤則直接返回至客戶端,沒有問題則會將 SQL 語句轉換為 MySQL 內部的數據結構(解析樹)

查詢優化

語法解析之后,MySQL 服務器已經知道客戶端想如何去獲取數據,接下來服務器會對語句的執行進行優化,例如外連接轉換為內連接,表達式簡化,子查詢轉換為連接之類的,這部分優化不會對查詢結果有影響,類似于數學上的因式分解,但是執行效率更高。完成優化后,生成的結果就是執行計劃,這時根據執行計劃就可以知道該從哪個表,使用哪個索引,查詢哪些數據等所有的具體操作。

我們可以使用 EXPLAIN 語句查詢某個 SQL 的執行計劃,然后對 SQL 進行優化

存儲引擎

當擁有執行計劃后,MySQL 服務接下去就要真正的去持久化的區域,將數據取出來交給客戶端,這里為了能支持各種各樣的持久化策略,MySQL 對下層的所有控制都依賴于統一的存儲引擎 API,然后不同的存儲引擎提供各自的具體實現

不同的存儲引擎,目標場景不同,實現方式與特性也不同,可以根據實際場景進行選擇,場景的存儲引擎如下:

存儲引擎

描述

ARCHIVE

用于數據存檔 (行插入后不能再被修改)

CSV

在存儲數據時,以逗號分隔各個數據項

InnoDB

具備外鍵功能的事務存儲引擎

MERGE

用來管理多個 MyISAM 表構成的表集合

NDB

MySQL 集群專用存儲引擎

BLACKHOLE

丟棄寫操作,讀操作會返回空內容

FEDERATED

用來遠程訪問表

MEMORY

置于內存的表

MyISAM

主要的非事務處理存儲引擎

數據庫可以配置一個默認的存儲引擎,而每個表還可以單獨指定一個不同的存儲引擎,例如:

MySQL 調控

MySQL 服務器正常運行,會有非常多的配置參數,并且這些參數是支持根據實際場景進行修改的,主要有 **啟動選項 ** 和 配置文件 的方式

啟動選項

常規在命令行下使用一個命令,為了讓這個命令根據用戶不同的需求產生不能的行為,都會傳遞一個這個命令支持的選項參數,然后命令解析到這個參數后,就會按固定的行為來工作

比如 ls 表示將當前目錄下的文件信息都展示出來,而 ls -l 通過傳遞一個 -l 的選項,表示修改展示的內容及方式,這種類似的操作就是傳遞啟動選項,MySQL 服務器在啟動時也支持大量的啟動選項

啟動選項一般包含長形式和短形式,比如 MySQL 服務器配置監聽主機名的選項,長形式就是 –host,而短形式就是 -h,他們的作用是相同的,相當于短地址數量有限,所有只有一些常用的選項有短形式

注意:選項名區分大小寫,所以 -p 與 -P 完全不一樣,而短形式指定選項時,可以跟空格,也可以不跟(-p有些特殊,-p和密碼值之間是不能用空格的),所以 -P 3306 和 -P3306 是一樣的

配置文件

啟動選項僅針對單次啟動生效,也就是不會將配置進行持久化,而配置文件是持久化到本地的,所以不需要每次啟動時都輸入,所以非常方便

Unix like 操作系統下,默認 MySQL 服務器會從以下路徑來尋找配置文件:

路徑

備注

/etc/my.cnf

/etc/mysql/my.cnf

SYSCONFDIR/my.cnf

$MYSQL_HOME/my.cnf

特定于服務器的選項

defaults-extra-file

命令行指定的額外配置文件路徑

~/.my.cnf

用戶特定選項

~/.mylogin.cnf

用戶特定的登錄路徑選項(僅限客戶端)

說明:

1、 SYSCONFDIR 表示在使用 CMake 構建時使用 SYSCONFDIR 選項指定的目錄,通常情況下,默認配置是編譯安裝目錄下的 etc 目錄

2、 MYSQL_HOME 是自定義的環境變量,可配可不配,僅代表可以自定義放置配置文件的路徑

3、 ~ 表示跟當前登錄用戶相關,也就是根據用戶不同的配置方式,放置到每個用戶自己的目錄下

4、 defaults-extra-file 表示在啟動 MySQL 服務是,指定的編譯文件的目錄,例如:

`mysqld --defaults-extra-file=/tmp/my.cnf` 這樣啟動,則會訪問 /tmp/my.cnf 這個路徑下的配置文件

配置文件的內容

配置文件的啟動選項被分為若干個組,每個組有個組名,用中括號包裹

對應到啟動選項中,配置的這兩個選項的使用方式應該類似于:

mysqld --option1 --option2=value2

其次是分組的適用范圍:

1、 server 分組表示所有 MySQL 服務器程序都會讀取使用

2、 client 分組表示所有 MySQL 客戶端程序都會讀取使用

3、 mysqld 命令啟動 MySQL 服務器程序會讀取 [mysqld],[server]

4、 mysqld_safe 命令啟動 MySQL 服務器程序會讀取 [mysqld],[server],[mysqld_safe]

5、 mysql.server 命令啟動 MySQL 服務器程序會讀取 [mysqld],[server],[mysql.server]

6、 mysql 命令啟動客戶端程序會讀取 [mysql],[client]

7、 mysqladmin 命令啟動客戶端程序會讀取 [mysqladmin],[client]

8、 mysqldump 命令啟動客戶端程序會讀取 [mysqldump ],[client]

注意:同一個配置文件中,多個組都修改了同一個選項,并且這幾個組都能被讀取,則按從上到下的順序進行讀取,也就是最后一個配置會覆蓋之前的配置項

系統變量

除了監聽的端口ip等參數以外,MySQL 服務還有大量的系統變量,能影響 MySQL 服務程序的行為,跟之前的區別在于,這些系統變量除了配置文件和啟動選項能修改外,還支持通過 SQL 動態的更改

例如 default_storage_engine 表示 MySQL 服務默認的儲存引擎,max-connections 表示 MySQL 服務默認的儲存引擎,通過啟動選項的方式配置如下:

通過配置文件的方式配置參考如下:

而通過 SQL 語句配置參考如下:

變量作用范圍

與一般編程語言相似,MySQL 的系統系統變量也有作用范圍的說法,不過不是全局和局部,而是全局跟用戶,如果是 GLOBAL 下修改了這個參數,則對所有 MySQL 用戶而言,都以最新的參數進行工作,而在 SESSION 下修改了這個參數,則僅對當前的 MySQL 用戶生效

另外,不是所有的系統變量都有兩種作用范圍的,比如 max-connections 只具有 GLOBAL 的作用范圍,而 insert_id 只具有 SESSION 的作用范圍,像 version 這種變量更為特殊,屬于只讀的系統變量,不可更改

系統變量跟啟動選項的區別

啟動選項是程序啟動時傳遞的參數,而系統變量是程序在運行時,控制程序行為的變量,關系如下:

大部分的系統變量都可以通過啟動選項的方式進行配置

部分系統變量是程序自動生成,不可通過啟動選項的方式進行配置,例如:auto_increment_offset

部分啟動選項也不是系統變量,例如:defaults-file

狀態變量

為了更好的了解 MySQL 服務的運行狀況,服務提供了大量的關于運行狀態的變量,稱為狀態變量。例如:Threads_connected 表示當前已經連接的數量

狀態變量用于顯示服務器的狀態信息,他們的值只能由 MySQL 服務程序自己維護,而不能手動配置

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275872.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275872.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275872.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

白帽子技術分析會話劫持實戰講解

前言通常,大家所說的hack,都是針對一臺主機,在獲得管理員權限后,就很是得意;其實,真正的hacker是占領整個內部網絡。針對內部網絡的hack方法比較多,但比較有效的方法非ARP欺騙、DNS欺騙莫屬了。…

面試官問:你在項目中做過哪些安全防范措施?

大家好,我是若川。今天分享一篇安全相關的文章。點擊下方卡片關注我、加個星標,或者查看源碼等系列文章。學習源碼整體架構系列、年度總結、JS基礎系列如果你被面試官問到這個問題,不要急于描述自己遇到的問題以及如何處理的,你得…

TCP/IP協議族之應用層協議(FTP、TFTP)

文件傳送協議FTP: File Transfer Protocol 是因特網上使用得最廣泛的文件傳送協議。提供交互式的訪問,允許客戶指明文件的類型與格式(如指明是否使用ASCII碼),并允許文件具有存取權限(如訪問文件的用戶必須經過授權&am…

消滅病毒_消滅遺產

消滅病毒The year was 1995, I was 10 years of age. The number 1 single in the UK was Think Twice by Celine Dion, and Batman Forever was the highest grossing movie across the pond in the States. Manchester United, unfortunately, won their 3rd Premier League …

logcat崩潰_使用logcat抓取Android崩潰日志

一、安裝jdkJDK網上教程非常多,此處不再贅述。(好像不裝也沒關系,未實測)二、工具列表a) adb包(v.1.0.31版本或以上,下文提供下載地址)b) logcat.bat文件(下文制作)三、安裝adb(二選一)a) 放到任意位置(推薦)因為adb…

基于 Ubuntu 16.04 LTS 的 KDE neon 到達維護周期

隨著 KDE neon 在 Ubuntu 18.04 LTS 發布,開發團隊已經決定 放棄維護基于 Ubuntu 16.04 LTS版本,大多數用戶預警將希望升級到基于 Ubuntu LTS 的 KDE neno 新版本。“去年KDE neno 被重新定位到 Ubuntu bionic / 18.04上,并且升級已經基本順利…

真誠推薦7個能助你成長的前端大佬

不得不說,如今比前些年學習資料多很多了。現在的前端公眾號也挺多的,這里推薦幾個前端大佬運營的公眾號,都是聚焦前端垂直領域的優質公眾號,關注這些公眾號至少可以:1、了解現在前端技術發展情況和未來發展趨勢&#x…

Silverlight學習筆記(3):Silverlight的界面布局

在上一篇中講述了使用VS2010開發Silverlight的一些基礎知識,并且講述了Silverlight的部署和代碼安全知識,這一篇主要是講述如何在Silverlight中擺放界面元素。記得早年前我還在學習Java的時候,當時有兩種開發Java SE的方法,一種是…

pov-inc_yourself勞自己-懶惰的設計師的POV和一些Figma

pov-incAre you ready and lazy enough (you will fully understand with continue reading this)? Coffee and tea next to you? Alright. This article is going to (not) kick you in your a**. It will be a bit of ‘lesson learned’, for sure a bit of FIGMA, and a …

Geary 0.13.0 發布,GNOME 3 Email 客戶端應用

百度智能云 云生態狂歡季 熱門云產品1折起>>> Geary 0.13.0 發布了,Geary 是一個電子郵件應用,用于 GNOME 3 桌面版本,它允許閱讀、查找和發送電子,并提供簡潔、現代化的界面。這是一個重要的新版本,具有許…

mysql表連接_mysql表連接

在數據庫中tableA連接tableB如下:tableA:a1  a21  12  23  24  3tableB:b1 b22  12  23  33  46  5笛卡爾積:select * from tableA, tableB.1  1  2  11  1  2  21  1  3  31  1  3  41  1  6  52…

輕型本地服務器_一小時超輕型漂移機

輕型本地服務器Iwas introduced to the world of Hyper Light Drifter through a series of visions — titans ravage a broken city, a shallow sea is stained red by floating corpses, a skinny dog leads me into the yawning abyss of a pillar in the center of the se…

baidu的服務器數據里面裝的都是垃圾!

baidu的服務器數據里面裝的都是垃圾! 除了垃圾廣告一點價值沒有,能不能學學google。 國人天天喊支持國貨,但國貨很多垃圾,沒有人管理這些制造垃圾的人。 轉載于:https://www.cnblogs.com/helper/archive/2010/10/12/1848371.html

聊聊前端面試

大家好,我是若川。今天分享一篇面試相關的文章。點擊下方卡片關注我、加個星標,或者查看源碼等系列文章。學習源碼整體架構系列、年度總結、JS基礎系列最近 Zoom 國內又開放招聘了,我們組有了前端的 HC,所以我也參加了幾場面試。合…

成為自信的node.js開發者(一)

這個博客是我最近整理了過去的文章。 適合閱讀的同學 想更進一步深入理解node的同學,如果你已經稍微了解一點點node, 可以用node做一些小demo,并且想更深一步的了解,希望這篇文章可以幫助到你。 不太適合閱讀的同學 不太熟悉基本的javascript…

mysql讀寫分離和分布式_MySQL主從復制與讀寫分離

MySQL主從復制(Master-Slave)與讀寫分離(MySQL-Proxy)實踐Mysql作為目前世界上使用最廣泛的免費數據庫,相信所有從事系統運維的工程師都一定接觸過。但在實際的生產環境中,由單臺Mysql作為獨立的數據庫是完全不能滿足實際需求的,無論是在安全…

ux和ui_UI和UX設計師的10種軟技能

ux和ui重點 (Top highlight)As designers, whether it be UI, UX, or Product Design, we tend to direct our focus and energy on developing and mastering tangible skills.作為設計師,無論是UI,UX還是產品設計,我們都將重點和精力放在開…

SQLServer中批量插入數據方式的性能對比 (轉)

轉自:http://www.cnblogs.com/wlb/archive/2010/03/02/1676136.html 昨天下午快下班的時候,無意中聽到公司兩位同事在探討批量向數據庫插入數據的性能優化問題,頓時來了興趣,把自己的想法向兩位同事說了一下,于是有了本…

VueConf China 2021 《Vue3生態進展-尤雨溪》 Reaction

大家好,我是若川。今天分享昨天Vueconf的一篇文章,來了解下Vue的生態進展。另外今晚7點,Vuebeijing社區邀請了尤大會在視頻號直播,可以加我微信 ruochuan12,告訴觀看地址提前預約。點擊下方卡片關注我、加個星標&#…

Plsql運行mysql腳本_oracle中PLSQL語句

1.set autot off 禁止使用autotrace命令 set autot on 這個命令包括exp 和 stat(執行語句、生成explain plan、生成統計信息) set autot trace 不執行sql語句,但(生成explain plan、生成統計信息) set autot trace exp stat 與上句同 set autot trace st1.set autot…