最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL數(shù)據(jù)庫從安裝到理解

 更新時間:2026年01月04日 16:20:09   作者:是店小二呀  
本文詳細記錄了在基于Debian/Ubuntu的Linux系統(tǒng)上,從零開始安裝、配置、使用乃至徹底卸載MySQL的全過程,文章深入剖析了MySQL的邏輯架構,包括連接層、核心服務層和存儲引擎層,感興趣的朋友跟隨小編一起看看吧

在著手學習任何一門技術時,搭建一個可供實踐的環(huán)境是至關重要的第一步。這份筆記旨在詳盡記錄在基于Debian/Ubuntu的Linux系統(tǒng)上,從零開始安裝、配置、使用乃至徹底卸載MySQL的全過程。在整個學習初期,所有操作都將使用root賬戶來執(zhí)行。這樣做的目的,是為了暫時規(guī)避復雜的權限管理問題,使學習者能夠將全部精力集中在理解和掌握MySQL的核心概念與SQL基本語句上。當對基礎操作有了扎實的掌握之后,再回過頭來學習創(chuàng)建普通用戶并進行精細化的權限管理,會是一條更為平滑和高效的學習曲線。

MySQL與MariaDB:同源而生的數(shù)據(jù)庫系統(tǒng)

在選擇開源關系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)時,MySQL和MariaDB是兩個無法繞開的名字。它們之間有著深厚的淵源。MySQL最初由MySQL AB公司開發(fā),后經Sun Microsystems,最終被Oracle公司收購。由于社區(qū)對于MySQL在商業(yè)公司主導下其開源精神能否延續(xù)的擔憂,MySQL的創(chuàng)始人之一Michael “Monty” Widenius,領導了一個由原MySQL開發(fā)者組成的核心團隊,創(chuàng)建了MariaDB。

MariaDB是MySQL的一個社區(qū)驅動的分支,其設計目標是保持與MySQL的高度兼容性,使得用戶可以輕松地從MySQL遷移至MariaDB,同時承諾其核心代碼將永久保持開源。在功能上,MariaDB不僅復刻了MySQL的核心功能,還在性能優(yōu)化、新功能引入(如更多的存儲引擎Aria、XtraDB等)方面有所建樹。對于初學者而言,兩者的基礎SQL語法和核心操作幾乎完全一致,因此,掌握其中任何一個,都能夠為理解另一個打下堅實的基礎。

一、MySQL的安裝與初步配置

本次安裝實踐是在一個采用APT包管理器的Linux發(fā)行版(例如Ubuntu)上進行的。

1. 更新系統(tǒng)軟件包列表

在安裝任何新軟件之前,一個標準且必要的步驟是同步本地系統(tǒng)的軟件包索引。這個操作能夠確保系統(tǒng)獲取到所有配置的軟件源中最新的軟件包版本信息、依賴關系以及安全補丁列表。

sudo apt-get update

執(zhí)行此命令后,終端會開始連接各個軟件源服務器,下載最新的包信息。這個過程本身并不會安裝或升級系統(tǒng)中的任何軟件,它僅僅是刷新了本地的“軟件包目錄”。

終端執(zhí)行apt-get update命令后,會顯示一系列的GetHit條目,分別代表從源服務器下載新的包信息或本地列表已是最新。最后的Reading package lists... Done表示更新過程順利完成。

2. 安裝MySQL服務器

當軟件包列表更新至最新狀態(tài)后,便可以開始安裝MySQL服務器。

sudo apt-get install mysql-server

這條命令指示APT包管理器下載并安裝名為mysql-server的軟件包。APT會自動解析其依賴關系,將所有必需的組件,如mysql-client(客戶端工具)、mysql-common(通用文件)等一并安裝。在現(xiàn)代的Linux發(fā)行版中,安裝腳本通常會自動化完成一系列初始化工作,包括創(chuàng)建數(shù)據(jù)目錄、生成默認配置文件、初始化系統(tǒng)數(shù)據(jù)庫以及啟動MySQL服務。

執(zhí)行安裝命令后,APT會列出將要安裝的新軟件包以及它們將占用的磁盤空間,并請求確認。輸入Y并按下回車鍵,安裝流程就會繼續(xù)進行。

3. 檢查MySQL服務狀態(tài)

安裝過程結束后,MySQL服務(其后臺守護進程名為mysqld)理論上會自動啟動。為了驗證服務是否正常運行,可以使用service命令或在支持systemd的系統(tǒng)中推薦使用systemctl命令。

sudo service mysql status
# 或者更推薦的方式:
# sudo systemctl status mysql

如果服務成功啟動并正在運行,輸出信息中會包含Active: active (running)的標識。這表明MySQL服務器已經在后臺就緒,并正在監(jiān)聽網(wǎng)絡端口等待客戶端的連接。

service mysql status命令的輸出結果。其中,綠色的active (running)字樣是核心信息,明確指示MySQL服務當前處于活動狀態(tài)。

萬一服務未能自動啟動,其狀態(tài)可能會顯示為inactive (dead)failed。此時,需要手動啟動它:

sudo service mysql start

4. 首次登入MySQL

在較新版本的Ubuntu或Debian系統(tǒng)中,MySQL的默認安裝配置了一個名為auth_socket(或unix_socket)的認證插件。這個插件的機制是:當一個用戶嘗試通過本地的Unix套接字文件連接MySQL時,MySQL服務器會向操作系統(tǒng)查詢發(fā)起連接的進程屬于哪個用戶。如果操作系統(tǒng)用戶是root,并且該用戶正在嘗試以MySQL的root用戶身份登錄,auth_socket插件就會直接信任操作系統(tǒng)的身份驗證,允許其無密碼登錄。

因此,可以直接通過以下命令進入MySQL命令行:

sudo mysql

執(zhí)行此命令后,如果一切順利,命令行的提示符會變成mysql>。這標志著已經成功進入MySQL的交互式客戶端環(huán)境,可以開始執(zhí)行SQL語句了。

成功登錄MySQL后的終端界面。其中包含了歡迎信息、當前MySQL服務器的版本號,以及等待用戶輸入命令的mysql>提示符。

5. 為root用戶配置密碼

auth_socket插件雖然簡化了本地root用戶的管理操作,但它也限制了必須通過sudo才能登錄,并且無法使用密碼從遠程客戶端(如圖形化界面工具或其他服務器)進行連接。為了獲得更通用的登錄方式,需要將root用戶的認證方式改回傳統(tǒng)的密碼認證。

步驟一:查看當前認證方式

首先,在mysql>提示符下,需要查詢root用戶當前的認證插件是什么。這可以通過查詢mysql系統(tǒng)數(shù)據(jù)庫中的user表來完成。

SELECT user, host, plugin FROM mysql.user WHERE user = 'root';

這條SQL語句的含義是:從名為mysql的數(shù)據(jù)庫里,找到名為user的表,篩選出user字段值為root的所有行,并顯示這些行的user(用戶名)、host(允許登錄的主機地址)和plugin(認證插件)三個字段的內容。

查詢結果清晰地顯示,對于從localhost連接的root用戶,其plugin字段的值是auth_socket,這印證了當前使用的是基于套接字的認證方式。

目標是將這個值修改為mysql_native_password,這是一種使用原生哈希算法存儲密碼的傳統(tǒng)認證方式。

步驟二:修改認證方式并設置密碼

使用ALTER USER語句可以修改用戶的屬性,包括其認證插件和密碼。

ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'your_password';

對這條語句進行分解:

  • ALTER USER 'root'@'localhost': 明確指出要修改的用戶是root,并且此規(guī)則僅應用于從localhost(本機)發(fā)起的連接。
  • IDENTIFIED WITH 'mysql_native_password': 將該用戶的認證插件更改為mysql_native_password。
  • BY 'your_password': 為該用戶設定一個新的密碼。請務必your_password替換為一個強密碼。

注意:在原始筆記中,該命令cALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' you_password';存在兩個語法錯誤:開頭的c和密碼部分缺少BY關鍵字以及引號。這里已修正為正確的SQL語法。

步驟三:刷新權限

MySQL為了提升性能,會將用戶的權限信息緩存在內存中。當執(zhí)行了GRANT、REVOKEALTER USER等修改權限的操作后,內存中的緩存并不會立即更新。需要顯式地執(zhí)行FLUSH PRIVILEGES命令,通知MySQL服務器從磁盤上的授權表中重新加載權限信息,使剛才的更改立刻生效。

FLUSH PRIVILEGES;

完成以上步驟后,可以輸入exitquit退出MySQL客戶端。然后,嘗試使用新的密碼進行登錄,以驗證配置是否成功:

mysql -u root -p

系統(tǒng)會提示Enter password:,輸入剛才設置的密碼,如果能再次進入mysql>環(huán)境,說明密碼配置成功。

二、MySQL的徹底卸載流程

在某些情況下,例如需要重裝一個不同版本的MySQL,或者不再需要數(shù)據(jù)庫服務時,就需要進行徹底的卸載,以確保系統(tǒng)中沒有殘留的配置文件或數(shù)據(jù)文件干擾后續(xù)操作。

  1. 停止MySQL服務:在卸載前,必須先停止正在運行的mysqld進程。

    sudo service mysql stop
  2. 卸載核心軟件包及配置文件:使用apt-get remove命令并帶上--purge選項。remove只刪除軟件包本身,而--purge會一并刪除其全局的配置文件。

    sudo apt-get remove --purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*
  3. 移除不再需要的依賴項:在安裝MySQL時,APT可能自動安裝了一些其他的包作為依賴。當MySQL被卸載后,這些包如果不再被系統(tǒng)其他軟件需要,就成了“孤兒”包。autoremove命令可以安全地清理它們。

    sudo apt-get autoremove
  4. 手動刪除數(shù)據(jù)和日志目錄--purge選項主要清理/etc目錄下的配置文件,但MySQL的數(shù)據(jù)目錄(默認在/var/lib/mysql)和日志文件通常需要手動刪除。

    sudo rm -rf /etc/mysql /var/lib/mysql
  5. 清理其他可能的殘留文件:為了做到最徹底的清理,可以使用通配符來刪除其他可能散落在系統(tǒng)中的相關文件。

    sudo rm -rf /etc/mysql* /var/lib/mysql* /var/log/mysql*
  6. 最后刷新包管理器:完成所有清理工作后,再次更新軟件包列表,保持系統(tǒng)包信息的一致性。

    sudo apt-get update

三、重置遺忘的root密碼

忘記MySQL的root密碼是初學者乃至有經驗的管理員都可能遇到的問題。MySQL提供了一種恢復機制,其核心原理是:以一個臨時禁用權限驗證系統(tǒng)的特殊模式啟動MySQL服務,從而允許無密碼登錄并重置密碼,最后再恢復到正常模式。

  1. 停止當前MySQL服務:確保任何正常運行的mysqld實例都已關閉。

    sudo systemctl stop mysql
  2. 以安全模式啟動MySQL:使用mysqld_safe腳本,并附帶--skip-grant-tables參數(shù)。這個參數(shù)是關鍵,它指示MySQL服務器在啟動時不加載授權表(grant tables)。因此,服務器不會進行任何權限檢查,允許任何用戶以任何身份連接,并擁有所有權限。末尾的&符號讓該命令在后臺執(zhí)行。

    sudo mysqld_safe --skip-grant-tables &
  3. 無密碼登入MySQL:由于權限系統(tǒng)被暫時禁用,可以直接以root用戶身份連接,無需密碼。

    sudo mysql -u root
  4. 執(zhí)行密碼修改操作:進入mysql>環(huán)境后,需要按順序執(zhí)行以下命令來設置新密碼。

    FLUSH PRIVILEGES;

    這是一個非常重要的步驟。因為服務器啟動時跳過了授權表,所以像ALTER USER這樣的用戶管理命令可能無法正常工作。執(zhí)行FLUSH PRIVILEGES會強制服務器將授權表重新加載到內存中,這使得用戶管理功能得以恢復。

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewStrongPassword!';
    

    現(xiàn)在,可以安全地執(zhí)行ALTER USER語句來設置新密碼。將YourNewStrongPassword!替換為一個強度足夠的新密碼。

    FLUSH PRIVILEGES;

    再次執(zhí)行FLUSH PRIVILEGES,是為了確保新設置的密碼被正確地寫入磁盤并更新到內存緩存中。

    EXIT;

    完成操作后,退出MySQL客戶端。

  5. 停止安全模式下的MySQL進程:需要手動結束剛才在后臺啟動的mysqld進程。使用killall命令可以方便地結束所有名為mysqld的進程。

    sudo killall mysqld
  6. 正常重啟MySQL服務

    sudo systemctl start mysql
  7. 使用新密碼登錄驗證

    mysql -u root -p

    系統(tǒng)會提示輸入密碼。輸入剛剛設置的新密碼,如果能夠成功登錄,則證明密碼重置操作已成功。注意,原始筆記中最后的登錄命令為sudo mysql -u root -o,-o不是一個標準的mysql客戶端參數(shù),應為-p。

四、數(shù)據(jù)庫基礎核心概念的深化理解

1. 剖析MySQL的客戶端/服務器架構

MySQL是一個遵循經典的客戶端/服務器(Client/Server)模式的軟件系統(tǒng)。這個架構是理解其工作方式的基礎。

  • mysqld (MySQL Daemon):這是服務器端的核心。它是一個在操作系統(tǒng)后臺持續(xù)運行的程序,通常被稱為“守護進程”(Daemon)。mysqld的主要職責包括:
    • 管理磁盤上的物理數(shù)據(jù)文件。
    • 監(jiān)聽一個網(wǎng)絡端口(默認為TCP 3306),等待客戶端的連接請求。
    • 接收并解析客戶端發(fā)送的SQL語句。
    • 執(zhí)行SQL語句,對數(shù)據(jù)進行增、刪、改、查等操作。
    • 管理事務、鎖、緩存等。
    • 將執(zhí)行結果返回給客戶端。
    • 所有的數(shù)據(jù)存儲和核心計算都發(fā)生在服務器端。
  • mysql:這是官方提供的命令行客戶端程序。它的角色是作為用戶與mysqld服務器溝通的橋梁。用戶在mysql客戶端中輸入的任何SQL命令,都會被打包并通過網(wǎng)絡(或本地套接字)發(fā)送給mysqld服務器去執(zhí)行。除了mysql這個命令行工具,任何能夠連接到MySQL服務器并與之通信的程序,都可被視為客戶端,例如圖形化管理工具(Navicat, DBeaver, MySQL Workbench)或應用程序中使用的數(shù)據(jù)庫連接庫(如Java的JDBC驅動)。

這種C/S架構實現(xiàn)了數(shù)據(jù)與操作的分離,使得數(shù)據(jù)庫的管理和訪問變得非常靈活??蛻舳撕头掌骺梢晕挥谕慌_物理機器上,也可以分布在網(wǎng)絡的不同節(jié)點上,通過網(wǎng)絡協(xié)議進行通信。

2. 數(shù)據(jù)庫登錄命令的詳細拆解

登錄MySQL的命令格式封裝了連接服務器所必需的全部信息:

mysql -h [主機地址] -P [端口號] -u [用戶名] -p
  • -h (host):指定目標MySQL服務器的IP地址或域名。如果省略此參數(shù),客戶端會默認嘗試連接localhost,即本機。
  • -P (Port):指定服務器正在監(jiān)聽的端口號。注意,參數(shù)是大寫的P。如果省略,默認端口是3306。
  • -u (user):指定用于登錄的MySQL用戶名。
  • -p (password):告知客戶端,登錄需要密碼。執(zhí)行命令后,客戶端會交互式地提示輸入密碼。為了安全,密碼輸入時不會在屏幕上顯示。也可以將密碼直接跟在-p后面(如-pYourPassword),但這會將密碼暴露在命令行歷史記錄中,存在安全風險,因此不推薦在生產環(huán)境中使用。

這是一個嘗試使用root用戶連接到IP地址為12.0.0.1、端口為3306的MySQL服務器的命令。

當只使用mysql -u root -p時,由于省略了-h-P參數(shù),客戶端會使用默認值,嘗試連接localhost3306端口。

3. 數(shù)據(jù)庫的本質與主流產品概覽

  • 數(shù)據(jù)庫的定義:從廣義上講,數(shù)據(jù)庫(Database, DB)是一個有組織的數(shù)據(jù)集合。但在計算機科學中,這個詞通常指代數(shù)據(jù)庫管理系統(tǒng)(DBMS)。MySQL就是一種關系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)。DBMS不僅是存儲數(shù)據(jù)的文件集合,它更是一套復雜的軟件系統(tǒng),提供了用于定義數(shù)據(jù)結構(Data Definition)、操縱數(shù)據(jù)(Data Manipulation)、控制數(shù)據(jù)訪問(Data Control)、保證數(shù)據(jù)一致性和持久性(Transaction Control)以及高效檢索數(shù)據(jù)的一整套解決方案。
  • 主流數(shù)據(jù)庫產品巡禮
    • Oracle:甲骨文公司的商業(yè)數(shù)據(jù)庫產品,功能極為強大和完善,長期以來是大型企業(yè)、金融、電信等關鍵業(yè)務領域的首選。它以其穩(wěn)定性、安全性和對復雜事務處理的強大支持而聞名,但其許可費用和維護成本也相對高昂。
    • SQL Server:微軟公司的關系型數(shù)據(jù)庫產品,與Windows Server操作系統(tǒng)和.NET開發(fā)框架深度集成,為開發(fā)者提供了無縫的體驗。在中大型企業(yè)應用,特別是基于微軟技術棧的項目中非常流行。
    • MySQL:作為全球最受歡迎的開源關系型數(shù)據(jù)庫,MySQL以其高性能、高可靠性和易用性在Web開發(fā)領域占據(jù)了主導地位。它是LAMP(Linux, Apache, MySQL, PHP/Python/Perl)和LNMP(Linux, Nginx, MySQL, PHP/Python/Perl)等經典Web架構的核心組件。
    • PostgreSQL:被譽為“功能最先進的開源關系型數(shù)據(jù)庫”。它在遵循SQL標準、數(shù)據(jù)類型支持(如JSON、GIS)、可擴展性和處理復雜查詢方面表現(xiàn)出色,近年來在需要高級功能和嚴格數(shù)據(jù)一致性的應用中越來越受歡迎。
    • SQLite:一個非常輕量級的、無服務器的、嵌入式數(shù)據(jù)庫引擎。它的整個數(shù)據(jù)庫就是一個單一的磁盤文件,作為一個C語言庫被直接集成到應用程序中。因其零配置、事務性強的特點,廣泛應用于移動設備(Android和iOS內置)、桌面軟件和物聯(lián)網(wǎng)設備中。
    • H2:一個用Java編寫的開源嵌入式數(shù)據(jù)庫,可以方便地嵌入到任何Java應用程序中。它支持標準的SQL,并提供內存數(shù)據(jù)庫模式,非常適合用于單元測試、快速原型開發(fā)和小型應用。

4. Windows環(huán)境下的服務器管理

對于在Windows環(huán)境下安裝的MySQL,可以通過圖形化的服務管理器進行啟停操作。按下Win + R鍵打開“運行”對話框,輸入services.msc并回車,即可打開服務列表。

Windows的服務管理器界面,在列表中找到名為“MySQL”的服務(版本號可能不同),可以方便地對其進行啟動、停止、暫停、重啟動等操作。

5. 服務器、數(shù)據(jù)庫、表的物理關系

在Linux文件系統(tǒng)上,MySQL的邏輯結構與物理存儲之間存在著清晰的對應關系,理解這一點有助于形成一個直觀的認知:

  • MySQL服務器 (mysqld):對應一個正在運行的進程,它管理著一個指定的數(shù)據(jù)目錄(Data Directory)。
  • 數(shù)據(jù)庫 (Database):在邏輯上是表的集合。在物理上,每個數(shù)據(jù)庫通常對應數(shù)據(jù)目錄下的一個子目錄。例如,執(zhí)行CREATE DATABASE school;后,在MySQL的數(shù)據(jù)目錄(如/var/lib/mysql/)下會創(chuàng)建一個名為school的文件夾。
  • 表 (Table):在邏輯上是數(shù)據(jù)的二維結構。在物理上,每張表對應其所屬數(shù)據(jù)庫目錄下的一個或多個文件。這些文件的具體格式和數(shù)量由該表所使用的存儲引擎決定。例如,對于默認的InnoDB存儲引擎,一張名為students的表通常會生成students.frm(存儲表結構定義)和students.ibd(存儲表的數(shù)據(jù)和索引)兩個文件。

這個層級關系圖形象地表達了:一個MySQL服務器實例可以管理多個數(shù)據(jù)庫,而每個數(shù)據(jù)庫又可以包含多張數(shù)據(jù)表。

6. 一個完整的數(shù)據(jù)庫操作實例

下面通過一個從創(chuàng)建數(shù)據(jù)庫到查詢數(shù)據(jù)的完整流程,來演示SQL的基本用法。

創(chuàng)建數(shù)據(jù)庫

create database helloworld;

這條命令指示MySQL服務器創(chuàng)建一個名為helloworld的數(shù)據(jù)庫。

選擇要操作的數(shù)據(jù)庫

use helloworld;

在進行表操作之前,必須先通過USE命令告訴MySQL當前會話的上下文是哪個數(shù)據(jù)庫。后續(xù)所有不顯式指定數(shù)據(jù)庫的SQL語句都將在helloworld數(shù)據(jù)庫中執(zhí)行。

執(zhí)行use helloworld;命令后,MySQL返回Database changed,確認當前工作數(shù)據(jù)庫已切換。

創(chuàng)建數(shù)據(jù)表

create table student (
    id int,
    name varchar(32),
    gender varchar(2)
);

向表中插入數(shù)據(jù)

insert into student (id, name, gender) values (1, '張三', '男');
insert into student (id, name, gender) values (2, '李四', '女');

使用兩條INSERT INTO語句,向student表中添加了兩行記錄。

從表中查詢數(shù)據(jù)

select * from student;

SELECT *是一個DQL(數(shù)據(jù)查詢語言)語句,*代表查詢所有列,FROM student指定了查詢的數(shù)據(jù)源是student表。

查詢命令的執(zhí)行結果以一個清晰的表格形式返回,包含了student表中當前存儲的所有行和列的數(shù)據(jù)。

五、MySQL 邏輯架構的深入剖析

MySQL之所以能夠高效、穩(wěn)定地工作,得益于其精心設計的分層式、插件化的架構。這種架構使得各個組件職責分明,易于維護和擴展。

這是一個經典的MySQL邏輯架構圖,它將MySQL自頂向下劃分為三個主要層次:連接層、核心服務層和存儲引擎層。

第一層:連接層 (Connectors & Connection Pool)
這是最外層,直接與客戶端打交道。它負責處理所有與連接相關的任務:

  • 連接處理與線程管理:接收來自各種客戶端(Connectors)的連接請求。MySQL采用“一個連接一個線程”的模型,為每個客戶端連接分配一個專用的服務線程。
  • 連接池:管理和復用數(shù)據(jù)庫連接,避免了為每個請求都重復進行TCP握手和MySQL認證的昂貴開銷,這對于需要處理大量短連接的應用至關重要。
  • 身份認證:驗證客戶端提供的用戶名和密碼是否正確。
  • 權限驗證:在用戶成功登錄后,其后續(xù)的每一個操作都會經過權限檢查,確保用戶只執(zhí)行其被授權的操作。

第二層:核心服務層 (SQL Interface, Parser, Optimizer, Caches & Buffers)
這一層是MySQL的大腦,負責所有核心的數(shù)據(jù)處理邏輯。它接收來自連接層的SQL請求,并最終將執(zhí)行指令傳遞給存儲引擎層。

  • SQL接口 (SQL Interface):接收SQL命令,并返回查詢結果。
  • 解析器 (Parser):對SQL語句進行詞法分析和語法分析,生成一個內部數(shù)據(jù)結構,通常是“解析樹”。如果SQL語句存在語法錯誤,解析階段就會被駁回。
  • 優(yōu)化器 (Optimizer):這是決定查詢性能的核心組件。優(yōu)化器會分析解析樹,并根據(jù)MySQL內部的統(tǒng)計數(shù)據(jù)(如表的行數(shù)、索引的基數(shù)等),生成多個可能的執(zhí)行計劃。然后,它會使用一個基于成本的模型來評估這些計劃,并選擇一個它認為執(zhí)行成本最低的計劃。例如,它會決定是使用全表掃描還是使用索引,以及在多表連接時應該采用什么樣的連接順序。
  • 緩存與緩沖區(qū) (Caches & Buffers):包括多個重要的內存區(qū)域,如InnoDB的緩沖池(Buffer Pool),用于緩存數(shù)據(jù)頁和索引頁,以減少磁盤I/O。在MySQL 8.0之前還有一個查詢緩存(Query Cache),用于緩存SELECT查詢的完整結果集,但由于其在寫密集型負載下維護成本高昂且易失效,現(xiàn)已被移除。

第三層:存儲引擎層 (Storage Engines)
這是MySQL架構中最具特色的部分,負責數(shù)據(jù)的物理存儲和檢索。MySQL的設計允許用戶為數(shù)據(jù)庫中的每一張表選擇不同的存儲引擎,這種“可插拔”的機制賦予了MySQL極大的靈活性。

  • 存儲引擎是真正與底層文件系統(tǒng)交互的組件。它定義了數(shù)據(jù)在磁盤上的存儲格式、索引的實現(xiàn)方式、鎖的粒度等。
  • 核心服務層通過一個標準的API與存儲引擎層通信,它不關心數(shù)據(jù)是如何被存儲的,只關心如何調用API來存取數(shù)據(jù)。

1. SQL語言的邏輯分類

結構化查詢語言(SQL)根據(jù)其功能,通常被劃分為以下幾個主要類別:

  • DDL (Data Definition Language):數(shù)據(jù)定義語言。用于創(chuàng)建、修改和刪除數(shù)據(jù)庫中的各種對象,如數(shù)據(jù)庫本身、表、視圖、索引等。
    • 核心指令:CREATE, ALTER, DROP, TRUNCATE。
  • DML (Data Manipulation Language):數(shù)據(jù)操縱語言。用于對表中的數(shù)據(jù)進行操作。
    • 核心指令:INSERT, UPDATE, DELETE。
    • DQL (Data Query Language):數(shù)據(jù)查詢語言。由于SELECT語句的使用頻率和復雜性遠超其他DML操作,它常被單獨劃分為一類。
  • DCL (Data Control Language):數(shù)據(jù)控制語言。用于定義用戶的訪問權限和安全級別。
    • 核心指令:GRANT (授權), REVOKE (撤銷權限)。
  • TCL (Transaction Control Language):事務控制語言。用于管理數(shù)據(jù)庫事務,確保數(shù)據(jù)操作的原子性、一致性、隔離性和持久性(ACID)。
    • 核心指令:COMMIT (提交事務), ROLLBACK (回滾事務), SAVEPOINT (設置事務保存點)。

2. 存儲引擎深入探討

可以通過執(zhí)行SHOW ENGINES;命令來查看當前MySQL實例支持的所有存儲引擎及其特性。

show engines;

show engines;命令的輸出結果。這個表格列出了所有可用的存儲引擎,其中Engine列是名稱,Support列表示是否可用,DEFAULT表示該引擎是當前服務器的默認存儲引擎。TransactionsXA列指明了其事務支持能力。

在眾多存儲引擎中,InnoDBMyISAM是最為著名和常用的兩種。

這個對比圖直觀地總結了InnoDB和MyISAM在幾個關鍵維度上的核心差異。

InnoDB

  • 當前默認引擎:自MySQL 5.5版本起,InnoDB就成為了默認的存儲引擎。
  • 事務安全:完全支持ACID兼容的事務,提供了提交(COMMIT)、回滾(ROLLBACK)和崩潰恢復能力,是需要保證數(shù)據(jù)強一致性應用的首選。
  • 行級鎖定:在執(zhí)行寫操作時,InnoDB只鎖定需要修改的行,而不是整張表。這極大地減少了鎖沖突,顯著提高了在高并發(fā)寫入場景下的性能。
  • 外鍵約束:支持外鍵,可以用來強制實施表與表之間的引用完整性,從數(shù)據(jù)庫層面保證數(shù)據(jù)的關聯(lián)正確性。
  • 適用場景:絕大多數(shù)需要事務支持、高并發(fā)讀寫、數(shù)據(jù)完整性要求高的應用,例如在線交易系統(tǒng)(OLTP)、金融服務、電子商務后臺等。

MyISAM

  • 歷史默認引擎:在MySQL 5.5版本之前是默認存儲引擎。
  • 無事務支持:不支持事務。這意味著它的操作是“非事務性”的,如果一個操作包含多個步驟而中途失敗,無法自動回滾到初始狀態(tài)。
  • 表級鎖定:其鎖定機制非常簡單,任何寫操作(INSERT, UPDATE, DELETE)都會鎖定整張表。當一個會話在寫表時,其他所有會話的寫操作都必須等待,這在寫操作頻繁時會成為嚴重的性能瓶頸。
  • 讀取性能:由于其結構和鎖定機制相對簡單,開銷較小,在純粹的只讀或讀遠多于寫的場景下,其查詢性能有時會略優(yōu)于InnoDB。
  • 全文索引:曾是MyISAM的一個主要優(yōu)勢,但現(xiàn)在InnoDB也提供了強大的全文索引功能。
  • 適用場景:讀密集型、對事務完整性要求不高的應用,例如一些日志記錄表、數(shù)據(jù)倉庫的某些事實表或內容管理系統(tǒng)的文章表。

在今天的應用開發(fā)中,鑒于InnoDB在功能、性能和可靠性上的全面優(yōu)勢,除非有非常明確和特殊的理由,否則都應該選擇并使用InnoDB作為存儲引擎

最終總結

MySQL作為一個構建在操作系統(tǒng)之上的復雜軟件系統(tǒng),其分層架構是其高效、靈活和可擴展性的基石。連接層作為門戶,負責處理客戶端的接入和安全;核心服務層作為大腦,對SQL進行智能的解析、優(yōu)化和調度;而可插拔的存儲引擎層則作為執(zhí)行者,提供了多樣化的物理存儲方案以應對不同的業(yè)務需求。從網(wǎng)絡模型的角度來看,這三層協(xié)同工作,共同構成了應用層的數(shù)據(jù)庫服務。最終,由存儲引擎與操作系統(tǒng)內核進行交互,將數(shù)據(jù)安全、持久地寫入磁盤。通過本次從安裝、配置到深入其架構和核心概念的完整學習過程,為后續(xù)進行更復雜的數(shù)據(jù)庫設計、SQL優(yōu)化和管理維護工作奠定了堅實的基礎。

到此這篇關于MySQL數(shù)據(jù)庫從安裝到理解的文章就介紹到這了,更多相關mysql數(shù)據(jù)庫安裝內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL5.7主從配置實例解析

    MySQL5.7主從配置實例解析

    這篇文章主要為大家詳細解析了MySQL5.7主從配置的實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Mysql應用安裝后找不到my.ini文件的解決過程

    Mysql應用安裝后找不到my.ini文件的解決過程

    剛剛在修改mysql默認配置的時候,發(fā)現(xiàn)找不到my.ini文件,下面這篇文章主要給大家介紹了關于Mysql應用安裝后找不到my.ini文件的解決過程,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • Mybatis多表查詢與動態(tài)SQL特性詳解

    Mybatis多表查詢與動態(tài)SQL特性詳解

    動態(tài)SQL可以省略很多拼接SQL的步驟,使用類似于JSTL方式,下面這篇文章主要給大家介紹了關于Mybatis多表查詢與動態(tài)SQL特性的相關資料,文字通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • MySQL中由load data語句引起死鎖的解決案例

    MySQL中由load data語句引起死鎖的解決案例

    這篇文章主要介紹了MySQL中由load data語句引起死鎖的解決案例,文中講到了InnoDB引擎的數(shù)據(jù)表中一些鎖的機制,需要的朋友可以參考下
    2016-01-01
  • MySQL數(shù)據(jù)庫CPU飆升到100%的詳細解決方案

    MySQL數(shù)據(jù)庫CPU飆升到100%的詳細解決方案

    在監(jiān)控線上數(shù)據(jù)庫的運行是否安全、正常的過程中,cpu使用率是一個重要的指標,一旦cpu使用率飆升至90%+甚至達到100%,必然會對數(shù)據(jù)庫的正常工作產生影響,下面這篇文章主要給大家介紹了關于MySQL數(shù)據(jù)庫CPU飆升到100%的詳細解決方案,需要的朋友可以參考下
    2023-05-05
  • MySQL索引的5種應用

    MySQL索引的5種應用

    本文主要介紹了MySQL索引的5種應用,包含聚集索引,唯一索引,非唯一(普通)索引,全文索引,組合索引等,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • MySQL配置文件無法修改的解決方法(Win10)

    MySQL配置文件無法修改的解決方法(Win10)

    這篇文章主要為大家詳細介紹了MySQL配置文件無法修改的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Mysql徹底解決中文亂碼問題的方案(Illegal mix of collations for operation)

    Mysql徹底解決中文亂碼問題的方案(Illegal mix of collations for operation)

    mysql數(shù)據(jù)庫和中文支持很不友好,經常見到“Illegal mix of collations for operation”錯誤,該如何解決呢?下面小編給大家?guī)砹薽ysql數(shù)據(jù)庫中涉及到哪些字符集及徹底解決中文亂碼的解決方案,非常不錯,一起看看吧
    2016-08-08
  • MySQL CTE 通用表達式詳解

    MySQL CTE 通用表達式詳解

    在MySQL中,CTE是一種簡潔而強大的語法,用于構建臨時的結果集,通常用于簡化復雜查詢,下面通過本文給大家介紹MySQL CTE 通用表達式,感興趣的朋友一起看看吧
    2025-06-06
  • 關于mysql主備切換canal出現(xiàn)的問題解決

    關于mysql主備切換canal出現(xiàn)的問題解決

    這篇文章主要給大家介紹了關于mysql主備切換canal出現(xiàn)的一些問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11

最新評論

旺苍县| 周宁县| 剑川县| 弋阳县| 集安市| 吉林市| 松溪县| 大洼县| 肇源县| 崇仁县| 五大连池市| 禹州市| 曲阳县| 高邑县| 扎兰屯市| 东兴市| 万载县| 会同县| 息烽县| 丽水市| 淮南市| 高陵县| 永年县| 公主岭市| 鄯善县| 吉木萨尔县| 甘泉县| 札达县| 重庆市| 类乌齐县| 卫辉市| 中西区| 济源市| 明水县| 河池市| 黄石市| 和静县| 江阴市| 京山县| 丹巴县| 彭水|