MySQL 基礎介紹

来源:https://www.cnblogs.com/heyongshen/archive/2023/11/22/17849048.html
-Advertisement-
Play Games

MySQL介紹 相關概念 DB(DataBase)資料庫。是一個存儲數據的容器 DBA(Database Administrator):資料庫管理員。負責資料庫的管理和維護的專業人員 DBMS(Database Management System):資料庫管理系統。是一種軟體,用於創建和管理資料庫。 ...


MySQL介紹

相關概念

DB(DataBase)資料庫。是一個存儲數據的容器

DBA(Database Administrator):資料庫管理員。負責資料庫的管理和維護的專業人員

DBMS(Database Management System):資料庫管理系統。是一種軟體,用於創建和管理資料庫。

App(Application):應用程式。執行特定任務或一系列任務的軟體程式


DBA使用DBMS管理DB,DBMS提供了訪問和操作資料庫的介面,App通過DBMS的介面訪問DB,在這個過程中DBA需要確保App能高效、安全地訪問DB。

MySQL 發展歷史

MySQL 的第一個版本在 1996 年發佈,命名方式是以其創始人 Michael Widenius 的女兒 My 命名。最初在 2008 年MySQL被 Sun Microsystems 收購。2010 年,甲骨文公司(Oracle)收購了 Sun Microsystems,從而也獲得了 MySQL。甲骨文公司收購 Sun Microsystems(包括 MySQL)後,社區對 MySQL 未來可能閉源的擔憂加劇,儘管到目前為止,MySQL 仍然是開源的。


所以MySQL的創始人Michael Widenius 基於MySQL5.5 創建了 MariaDB,這是為了確保有一個持續開源的分支。MariaDB 的名字是以他的另一位女兒 Maria 命名,MariaDB 旨在完全相容 MySQL,包括 API 和命令行,確實使其成為 MySQL 的一個直接替代品。MariaDB 致力於保持與 MySQL 的相容性,同時也引入了一些新的特性和改進。


雖然MariaDB 最初是基於 MySQL 5.5 版本開發的。MariaDB 的首個版本是 MariaDB 5.1,它在很大程度上與 MySQL 5.1 相同,但包括了一些額外的特性和改進,這些在 MySQL 中並不存在。隨著時間的推移,MariaDB 開始引入更多的獨立特性和改進,逐漸與 MySQL 的後續版本產生更多的差異。

MySQL 三大分支

Oracle MySQL

由 Oracle Corporation 維護的官方 MySQL 分支。在 Oracle 收購 Sun 公司後,Oracle MySQL 成為了最官方的 MySQL 版本。它提供社區版和企業版,其中企業版含有一些額外的特性和支持。

官網:https://www.mysql.com/

MariaDB

MariaDB 是 MySQL 的一個流行分支,由 MySQL 的原始開發者之一 Michael Widenius 創建。它致力於保持與 MySQL 的相容性,同時加入了一些新的特性和改進。MariaDB 被設計為 MySQL 的直接替代品,且許多 Linux 發行版已經將 MariaDB 作為預設的資料庫系統。

官網:https://mariadb.org/

Percona Server

Percona Server 是另一個流行的 MySQL 分支,由 Percona LLC 維護。它與 Oracle MySQL 和 MariaDB 都高度相容,但專註於提供更高的性能和可靠性,特別適合高負載的生產環境。Percona Server 提供了一些獨特的性能優化和特性,這些在標準 MySQL 中並不可用。

官網:https://www.percona.com/

MySQL 特點說明

MySQL 架構

MySQL是基於C/S架構開發而來,由客戶端和服務端組成。

服務端: 它負責存儲數據、處理數據操作請求(如查詢、更新、刪除等),並維護數據的完整性和安全性。

客戶端: 以是任何用於與 MySQL 伺服器交互的軟體。這包括命令行客戶端(如 mysql 命令行工具)、圖形界面工具,或者通過資料庫連接庫(如 JDBC, ODBC)集成在各種應用程式中的客戶端。

MySQL 賬號

在MySQL中,賬號是由兩部分組成的,即用戶名和主機名字,通過 @ 符號分隔用戶名和主機名

user_name@host_name

通過主機名限制此用戶可通過哪些遠程主機連接mysql伺服器,在創建用戶或者給用戶授權時,通常需要使用引號將用戶名和主機名括起來,尤其是在用戶名或主機名包含特殊字元或是保留字,用於確保 MySQL 正確解析這些字元串

在給MySQL賬號指定主機名的時候,主機名可以指定為一個具體的IP地址也可以通過通配符來指定一個網段或者其它。(標準SQL常用的兩個通配符 _ 和 % 它都是支持的)


例如:

tom@'192.168.2.1'

tom@'192.168.%.%'

MySQL SQL方言

SQL 方言指的是特定於資料庫系統的 SQL 語言變種。雖然大多數資料庫系統遵循 SQL 的核心標準,但它們通常會添加一些特定於系統的命令和功能,這些就構成了“方言”。

列出所有資料庫

show databases;

切換當前資料庫上下文

# 選擇一個特定的資料庫作為後續操作的目標資料庫

use 資料庫名稱;

查看當前所處的資料庫中所有表

show tables

查看當前 MySQL 伺服器上的所有活動線程(即客戶端連接)

show processlist;

查看表結構,顯示列的屬性信息:

desc table_name;

刷新許可權:

FLUSH PRIVILEGES

該命令在 MySQL 中用於重新載入授權表(即用戶和許可權相關的表),以便立即應用對這些表所做的任何更改。當直接修改 MySQL 的授權表,如 mysql.user、mysql.db 等來更改用戶許可權或添加新用戶時,這些更改不會立即生效。FLUSH PRIVILEGES 命令強制 MySQL 伺服器重新讀取授權表,使更改立即生效。

基於標準SQL的擴展

資料庫系統通常會在標準 SQL 的基礎上引入特定的擴展和變體,以提供額外的功能和優化,使其更適合於該資料庫管理系統(DBMS)的特定需求和功能。

創建用戶:

create user 'username'@'host' identified by  'password'

創建用戶的時候需要使用引號將用戶名以及主機名部分括起來,確保 MySQL 正確解析這些字元串

修改用戶名:

rename user@'host' newuser@'host'

刪除用戶

drop user username@'host'

用戶授權

創建一個用戶後,預設只有一個 USAGE 許可權,此時僅僅能登錄資料庫系統

GRANT
    [許可權類型]     # 可以指定各種許可權,如 SELECT, INSERT, UPDATE, DELETE 等。也可以使用 ALL PRIVILEGES 表示授予所有許可權。
ON
    [資料庫對象]  # 可以是資料庫、表或者其他資料庫對象。格式通常為 資料庫名.表名。授予許可權到所有資料庫和表,可以使用 *.*。
TO
    [用戶名]     # 格式通常為 '用戶名'@'主機名'。

例如:

GRANT ALL PRIVILEGES ON *.* TO ehigh@'localhost';

說明: 在MySQL5.7.6之前的版本,可以在授權的時候創建用戶

GRANT 許可權 ON 資料庫對象 TO 用戶名 identified by 'password'

查看指定用戶的全部許可權:

SHOW GRANTS FOR username@'hostname'

取消用戶指定許可權:

EVOKE
    [許可權類型]
ON
    [資料庫對象]
FROM
    [用戶名];

例如:

REVOKE SELECT ON db1.* FROM 'ehigh'@'localhost';

修改用戶密碼:

不同版本的MySQL修改密碼的方式有所不同。

MySQL5.6版本及其以下

mysql5.6不能使用alter user命令來修改密碼。可一使用update何set password來修改密碼。

update mysql.user set password=password('123456') where User="xxx" and Host = "xxx";

set password for xxx@xxx = password('xxx');

MySQL 5.7 版本及其以上

從 MySQL 5.7 開始,推薦使用 ALTER USER 命令來修改密碼。這是因為 MySQL 5.7 做了很多安全性方面的改進,包括如何處理密碼。

ALTER USER 'username'@'hostname' IDENTIFIED BY 'newpassword';

例如:

alter user ehigh@'localhost' identified by 'eHIGH2014'

MySQL 服務端

查看版本信息

除了使用一些客戶端工具可以查看版本信息外,還可以直接用mysqld的-V參數來查看版本信息

mysqld -V

使用 mysqld --verbose --help | less 可以查看mysqld的更多選項信息,mysqld是mysql服務端的主程式。

MySQL 預設資料庫

在安裝好MySQL服務端後,會預設提供四個資料庫。

information_schema:MySQL 5.0之後增加,一個虛擬資料庫(存在於記憶體中)且只讀,包含了 MySQL 伺服器的元數據,如資料庫、表、列、索引等的信息。

performance_schema:MySQL 5.5開始新增的資料庫,存儲了關於 MySQL 伺服器性能的詳細數據,包括各種性能指標和內部執行統計信息。

mysql:MySQL的核心資料庫,存儲了資料庫的用戶賬戶、許可權、系統配置等關鍵數據。

sys 資料庫:MySQL5.7之後新增,提供了一個更易於理解和使用的視圖層,以訪問和解釋 performance_schema 數據。它旨在簡化資料庫管理員對性能數據的查詢和分析。

例如: 如果我們要備份一個資料庫中的用戶信息,備份mysql這個資料庫就行了。

服務端組成

總的來說MySQL服務端可以理解為由兩大部分組成:核心的 mysqld 守護進程和輔助的管理腳本或工具

服務端主程式: mysqld不管是舊版本(MySQL5.5)還是新版本(MySQL8.0),它都是服務端的主程式,是用於處理資料庫操作(如連接請求、SQL 查詢等)的守護進程。


輔助程式:

1、 舊版本(MySQL5.5)啟動mysqld這個進程的時候,會通過一個封裝的腳本(mysqld_safe)來啟動,目的是安全地啟動 mysqld 併在出現問題時嘗試重啟它。在新版本的 MySQL 中,由於 mysqld 自身已經集成了更多的安全和穩定性特性,可以直接運行mysqld進程。

2、 如果想在一個物理伺服器上啟動多個mysql實例,可以通過mysqld_multi工具來進行管理,因為每個實例都有自己的數據目錄、埠號和配置文件。

服務端初始化

比如在重置了MySQL服務端的數據目錄後,需要初始化MySQL的一些基本數據,才能正常啟動MySQL服務端。

舊版本初始化數據

在一些舊版本中(MySQL5.6及以下),是通過mysql_install_db工具來初始化基本數據,用於創建必要的系統表和目錄。(mysql_install_db 是 MySQL 的一個輔助腳本,它通常與 MySQL 伺服器一起分發)

新版本初始化數據

MySQL5.7.6及其以上的版本中,mysqld提供了兩個參數來初始化基本數據。

--initialize-insecure  # 初始化得root用戶無密碼,可以無密碼登錄

--initialize  # 這個命令會為root用戶創建一個臨時隨機密碼 在MySQL錯誤日誌中找到這個隨機生成的臨時密碼

初始化數據的時候有以下註意點:

1、需要確保MySQL的數據目錄是空的,即裡面沒有任何內容,否則可能沒法初始化成功

2、需要確保MySQL服務的進行是停止狀態,不然只會再數據目錄生成部分文件。例如:只會生成一個auto.conf文件

3、需要確保MyQL配置文件中的innodb_force_recovery選項不是啟用狀態

4、用戶必須有足夠的許可權來創建、寫入和修改MySQL的數據目錄中的文件和子目錄,所以可以用root用戶身份來執行,如果不成功就用mysql用戶來下執行。sudo -u mysql mysqld --initialize-insecure

MySQL 客戶端

MySQL 是一個基於客戶端-伺服器(C/S)架構的資料庫管理系統。在這種架構中,數據存儲和管理由位於伺服器端的 MySQL 資料庫伺服器負責。要對這些數據進行管理或執行操作,需要通過客戶端應用程式連接到 MySQL 伺服器。

1、客戶端工具通過網路(使用 TCP/IP 協議)或本地 socket 套接字連接到 MySQL 伺服器。這個連接過程涉及到認證和授權,確保只有擁有適當憑證的用戶才能訪問資料庫。

2、建立連接後,客戶端可以發送SQL命令到服務端進行數據管理,在MySQL中,有很多SQL方言或者對標準SQL的一些擴展命令。

3、服務端接收到客戶端的請求後,進行相應的響應。

客戶端可以是多種形式,例如命令行工具(如 mysql 客戶端)、圖形用戶界面工具(如 MySQL Workbench)、程式語言中的資料庫連接庫(如 Java 中的 JDBC)等。這些客戶端提供了與 MySQL 伺服器交互的不同方式和界面。

mysql

在Linux操作系統中連接到MySQL服務端,最常用的就是命令行工具mysql了(這個命令行客戶端工具的名字就叫作mysql),它提供了許多參數選項來和服務端進行交互。

互動式操作

這種方法事互動式連接到服務端,成功連接到服務端後,用戶可以直接在命令行界面輸入 SQL 命令,然後 MySQL 伺服器會處理這些命令並返回結果。這個過程是實時的,允許用戶根據需要執行各種 SQL 語句,從而與資料庫進行直接的交互。

如果不指定主機地址,預設是localhost,在大多數情況下,連接到 localhost 會使用本地 socket 文件(可以配置),而不是 TCP/IP。如果不指定埠號。預設是3306埠

mysql -h ip_host -u username -p passeord -P port

在這個界面就可以輸入相關的SQL語句來和服務端進行交互了,如果要退出連接,輸入exit或者quit即可退出。

非互動式操作

非互動式和服務端操作,這種方式一般用在腳本或程式自動執行 SQL 命令。通常需要使用 -e 參數來指定要執行的 SQL 命令,如果SQL語句中沒有顯式指定資料庫,就需要在在用戶名和密碼參數之後加上資料庫名來實現。


例如:

# 沒有顯示指定資料庫
mysql -u username -p students -e "SELECT * FROM table1"

# SQL語句中顯示指定資料庫就不用加資料庫名字
mysql -u username -p database -e "SELECT * FROM stutens.table"

資料庫名稱.表名稱 這種格式是標準 SQL 的一部分,這種格式被稱為完全限定的表名,它明確指定了表所屬的資料庫。


在shell腳本中,經常用到的還有 -B 和 -s 這兩個選項。

  • -s 選項可以減少輸出的冗餘信息,如提示、進度條和一些格式化字元。

  • -B 選項用於將格式化輸出的信息,讓其更適合程式處理


例如:預設的輸出內容是這樣的

添加了 -s 選項,讓其較少輸出一些格式化和額外信息(在某些情況下,仍然會包含列名。所以列名Database跟著輸出了)

再添加 -B 選項,可以讓輸出的內容格式化為適合非互動式程式處理的形式(沒有顯示列名,直接列出了資料庫名稱)

單獨使用 -B 選項(批處理模式)確實會影響輸出格式,使其更適合程式處理,但可能仍然包括列名。而 -s 選項(靜默模式)會進一步簡化輸出,通常會移除列名和其他額外的格式化,所以這就是鏡像需要 -B選項和-s選項需要結合使用的原因。


在非互動式模式下使用 mysql 客戶端時,自動補全功能並不適用,也不會被觸發。非互動式模式意味著命令或腳本是預先定義好的,直接被 mysql 客戶端執行,而不是由用戶在互動式命令行中實時輸入。因此,自動補全功能在這種模式下沒有用處。-A 選項用於禁用自動補全功能,其主要目的是為了減少 mysql 客戶端啟動時讀取和構建資料庫、表名等信息所需的時間。


例如: 某個非互動式的SQL命令包含了大量的庫和表,自動補全功能的初始化可能會顯著延長客戶端的啟動時間。這個時候使用 -A 選項效果很好。


所以綜上所述,在shell腳本中使用mysql和服務端交互時一般是這樣的:

mysql -A -hx.x.x.x -uusername -ppassword -P3306 -Bse "SQL語句"

mysqladmin

mysqladmin這個客戶端工具主要是執行一些管理相關的操作,主要用於資料庫的維護、監控和管理任務。

資料庫狀態查看

mysqladmin -h host -u username -p password -P port  status

檢查伺服器是否正常運行

該命令會試圖連接到 MySQL 伺服器,並且在成功連接後返回一個響應,通常用於監控和腳本中以確認 MySQL 服務的狀態。如果伺服器正在運行並且可以接受連接,命令通常會輸出 mysqld is alive

mysqladmin -h host -u username -p password -P port  ping

查看伺服器版本等信息信息

mysqladmin -h host -u username -p password -P port  version

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • scipy.signal模塊主要用於處理和分析信號。它提供了大量的函數和方法,用於濾波、捲積、傅里葉變換、雜訊生成、周期檢測、譜分析等信號處理任務。 此模塊的主要作用是提供一套完整的信號處理工具,從而幫助用戶對各種連續或者離散的時間序列數據、音頻信號、電信號或其他物理信號進行操作和分析。它支持許多標 ...
  • 回調賦予我們很好的函數處理能力,那麼非同步回調則是在非同步編程中的靈魂,這是不可缺少的存在,本章主要是關於Rust中的trait的說明,希望對你有所幫助 ...
  • Welcome to YARP - 1.認識YARP並搭建反向代理服務 Welcome to YARP - 2.配置功能 2.1 - 配置文件(Configuration Files) 2.2 - 配置提供者(Configuration Providers) 2.3 - 配置過濾器(Configur ...
  • 引言 如題,如何以Binding的方式動態隱藏DataGrid列? 預想方案 像這樣: 先在ViewModel創建數據源 People 和控制列隱藏的 IsVisibility,這裡直接以 MainWindow 為 DataContext public partial class MainWindo ...
  • Calendar是Java中常用的時間處理工具之一,它提供了很多日曆類型常見方法,下麵是一些常用的方法及對應的代碼和運行結果。 ...
  • 咱們在玩arduino或stm32、esp8266時,有時會遇到板子模擬口不夠用的情況,這個時候CD74HC4067就派上用場了,它可以將16路數字/模擬信號通過4數字+1模擬=5口來讀取。 ...
  • 這篇繼續介紹遙控小車的驅動端, 即電機驅動板, 分別介紹整體流程, 基於74HC595的IO擴展和麥克納姆輪運動控制計算等. ...
  • 1. 什麼是資料庫 資料庫是結構化信息或數據(一般以電子形式存儲在電腦系統中)的有組織的集合,通常由資料庫管理系統 (DBMS) 來控制。在現實中,數據、DBMS 及關聯應用一起被稱為資料庫系統,通常簡稱為資料庫。 為了提高數據處理和查詢效率,當今最常見的資料庫通常以行和列的形式將數據存儲在一系列 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...