1.MySQL 入門

1.安裝目錄

在mac中mysql 安裝目錄為/usr/local/mysql飒箭,以mysql8.0.25版本為例 衫樊,該目錄下文件如下:

├── bin  //可執(zhí)行文件  
├── data //數(shù)據(jù)庫文件槐脏、日志文件、表空間等
├── docs
├── include
├── keyring
├── lib
├── man
├── share
└── support-files

其中data文件夾是核心庭呜,后續(xù)筆記會涉及這塊

2.mysql 架構(gòu)

mysql 分為客戶端和服務(wù)器端譬嚣,用戶通過客戶端程序發(fā)送請求給服務(wù)端钢颂,服務(wù)端收到請求后處理,并把處理結(jié)果返回給客戶端拜银,架構(gòu)詳情可參考:MySQL基礎(chǔ)架構(gòu)

3.啟動服務(wù)器

(1)mysqld

mysqld:mysqld可執(zhí)行文件 即我們所理解的mysql服務(wù)端殊鞭,運行這個可執(zhí)行文件即可啟動mysql服務(wù)器進程,但一般不直接使用該方式啟動

(2)mysqld_safe

mysqld_safe:mysql啟動腳本尼桶。會調(diào)用mysqld并監(jiān)控服務(wù)器運行狀態(tài)

(3)mysql.server

mysql.server:mysql啟動腳本操灿。會調(diào)用mysqld_safe

(4)mysqld_multi

mysqld_multi:多服務(wù)器端啟動

4.啟動mysql客戶端

mysql -h主機名 -u用戶名 -p密碼

5.客戶端服務(wù)器連接方式

(1)TCP/IP

mysql采用TCP/IP協(xié)議作為服務(wù)端和客戶端的網(wǎng)絡(luò)通信協(xié)議。 mysql服務(wù)器默認(rèn)使用3306端口號泵督,也可以通過啟動服務(wù)端改變端口號(ex:mysqld -P3307

(2)命名管道和共享內(nèi)存

windows進程間通信方式趾盐。只適合 Windows 系統(tǒng)下用來連接本機的 MySQL

啟用方式:啟動服務(wù)器加命令/配置加上--enable-named-pipe,啟動客戶端命令加--pipe

(3)UNIX套接字

MySQL服務(wù)器程序默認(rèn)監(jiān)聽/tmp/mysql.sock套接字幌蚊,客戶端程序也默認(rèn)連接到該套接字谤碳,也可以在啟動服務(wù)端時更改(mysqld --socket=/tmp/a.txt)溃卡。 該方式只適合服務(wù)器程序和客戶端程序都在本機上的類UNIX操作系統(tǒng)溢豆。

啟用方式:mysql -h主機名 -u用戶名 --socket -p密碼 / mysql -uroot -S /tmp/mysql.sock -p

可通過命令mysql -u root -p密碼 -h 127.0.0.1 -e "select @@socket"查詢socket文件位置)

6.MySQL啟動配置

我們都知道一個服務(wù)啟動,會需要讀一些配置瘸羡,除了在命令行中制定啟動選項漩仙,還可以通過配置文件進行配置。對于MySQL來說犹赖,配置位置可以通過以下方式獲榷铀:

$ mysql --help | grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf

MySQL會按照位置順序讀取,因此位置越靠后優(yōu)先級越高

MySQL中可以沒有配置文件峻村,沒有的情況下MySQL會按照編譯時的默認(rèn)參數(shù)設(shè)置麸折。

6.1 MySQL配置文件內(nèi)容

配置文件中的啟動選項被劃分為若干個組,每個組下面可以定義多個啟動選項粘昨,不同的選項組是給不同的程序使用的垢啼。如果選項組名稱與程序名相同,則組中的選項將專門應(yīng)用于該程序张肾。

注意:mysqld_safe芭析,mysql.server啟動時都會讀取[mysqld]內(nèi)容

[server] //作用于所有的服務(wù)器程序
...
[mysqld]//應(yīng)用于mysqld服務(wù)器程序
port=3306
socket=/tmp/mysql.sock
key_buffer_size=16M
max_allowed_packet=128M

[mysqld_safe]
...
[client] //作用于所有客戶端程序
port=3306
socket=/tmp/mysql.sock

[mysql]//應(yīng)用于mysql客戶端程序
...
[mysqladmin]
force

[mysqldump]
quick

[mysqld-8.0] ///特定MySQL版本選項組
sql_mode=TRADITIONAL

7.MySQL運行時系統(tǒng)變量

系統(tǒng)變量作用范圍:

  • GLOBAL:影響服務(wù)器整體操作
  • SESSION:影響某個客戶端連接操作
## 查詢系統(tǒng)變量
## 不加GLOBAL|SESSION修飾符查詢=SESSION范圍查詢
SHOW  [GLOBAL|SESSION] VARIABLES [LIKE 匹配模式];

##設(shè)置系統(tǒng)變量
SET [GLOBAL|SESSION] 系統(tǒng)變量名 = 值;

啟動選項和系統(tǒng)變量區(qū)別:

  • 啟動選項是在程序啟動時由用戶傳遞的參數(shù),系統(tǒng)變量影響服務(wù)器程序運行的變量
  • 大部分系統(tǒng)變量可以當(dāng)作啟動選項傳入吞瞪。但有些系統(tǒng)變量是在程序運行過程中自動生成馁启,不能當(dāng)作啟動選項傳入,如character_set_client
  • 有些啟動選項不是系統(tǒng)變量芍秆,如defaults-file

8.字符集和比較規(guī)則

8.1 字符集

字符集主要需要注意MySQL中utf8并不是真的utf8惯疙,是utf8mb3(使用1~3個字節(jié)表示一個字符)翠勉,utf8mb4才是utf8

## MySQL查看字符集
show charset;

8.2 比較規(guī)則

## MySQL查看比較規(guī)則
show collation [like 匹配模式];

utf8字符集下的比較規(guī)則如下所示:

mysql> show collation like 'utf8\_%';
+--------------------------+---------+-----+---------+----------+---------+---------------+
| Collation                | Charset | Id  | Default | Compiled | Sortlen | Pad_attribute |
+--------------------------+---------+-----+---------+----------+---------+---------------+
| utf8_bin                 | utf8    | 83  |         | Yes      | 1       | PAD SPACE     |
| utf8_croatian_ci         | utf8    | 213 |         | Yes      | 8       | PAD SPACE     |
| utf8_czech_ci            | utf8    | 202 |         | Yes      | 8       | PAD SPACE     |
| utf8_danish_ci           | utf8    | 203 |         | Yes      | 8       | PAD SPACE     |
| utf8_esperanto_ci        | utf8    | 209 |         | Yes      | 8       | PAD SPACE     |
| utf8_estonian_ci         | utf8    | 198 |         | Yes      | 8       | PAD SPACE     |
| utf8_general_ci          | utf8    | 33  | Yes     | Yes      | 1       | PAD SPACE     |
| utf8_general_mysql500_ci | utf8    | 223 |         | Yes      | 1       | PAD SPACE     |
| utf8_german2_ci          | utf8    | 212 |         | Yes      | 8       | PAD SPACE     |
| utf8_hungarian_ci        | utf8    | 210 |         | Yes      | 8       | PAD SPACE     |
| utf8_icelandic_ci        | utf8    | 193 |         | Yes      | 8       | PAD SPACE     |
| utf8_latvian_ci          | utf8    | 194 |         | Yes      | 8       | PAD SPACE     |
| utf8_lithuanian_ci       | utf8    | 204 |         | Yes      | 8       | PAD SPACE     |
| utf8_persian_ci          | utf8    | 208 |         | Yes      | 8       | PAD SPACE     |
| utf8_polish_ci           | utf8    | 197 |         | Yes      | 8       | PAD SPACE     |
| utf8_romanian_ci         | utf8    | 195 |         | Yes      | 8       | PAD SPACE     |
| utf8_roman_ci            | utf8    | 207 |         | Yes      | 8       | PAD SPACE     |
| utf8_sinhala_ci          | utf8    | 211 |         | Yes      | 8       | PAD SPACE     |
| utf8_slovak_ci           | utf8    | 205 |         | Yes      | 8       | PAD SPACE     |
| utf8_slovenian_ci        | utf8    | 196 |         | Yes      | 8       | PAD SPACE     |
| utf8_spanish2_ci         | utf8    | 206 |         | Yes      | 8       | PAD SPACE     |
| utf8_spanish_ci          | utf8    | 199 |         | Yes      | 8       | PAD SPACE     |
| utf8_swedish_ci          | utf8    | 200 |         | Yes      | 8       | PAD SPACE     |
| utf8_tolower_ci          | utf8    | 76  |         | Yes      | 1       | PAD SPACE     |
| utf8_turkish_ci          | utf8    | 201 |         | Yes      | 8       | PAD SPACE     |
| utf8_unicode_520_ci      | utf8    | 214 |         | Yes      | 8       | PAD SPACE     |
| utf8_unicode_ci          | utf8    | 192 |         | Yes      | 8       | PAD SPACE     |
| utf8_vietnamese_ci       | utf8    | 215 |         | Yes      | 8       | PAD SPACE     |
+--------------------------+---------+-----+---------+----------+---------+---------------+

比較規(guī)則名稱后綴英文釋義及描述

后綴 英文釋義 描述
_ai Accent-insensitive 不區(qū)分重音
_as Accent-sensitive 區(qū)分重音
_ci Case-insensitive 不區(qū)分大小寫
_cs Case-sensitive 區(qū)分大小寫
_bin Binary 以二進制方式比較

8.3 字符集和比較規(guī)則應(yīng)用

(1)作用范圍

MySQL有4個級別的字符集和比較規(guī)則:服務(wù)器級別、數(shù)據(jù)庫級別螟碎、表級別眉菱、列級別

系統(tǒng)變量 描述
character_set_server 服務(wù)器級別字符集
collation_server 服務(wù)器級別比較規(guī)則
character_set_database 數(shù)據(jù)庫級別字符集
collation_database 數(shù)據(jù)庫級別比較規(guī)則

如果創(chuàng)建數(shù)據(jù)庫不指定字符集/比較規(guī)則,將使用服務(wù)器級別字符集/比較規(guī)則掉分;創(chuàng)建表不指定字符集/比較規(guī)則俭缓,則使用數(shù)據(jù)庫級別字符集/比較規(guī)則;創(chuàng)建列不指定字符集/比較規(guī)則酥郭,則使用表級別字符集/比較規(guī)則华坦。

字符集和比較規(guī)則間相互關(guān)聯(lián),如果只修改字符集不从,比較規(guī)則會變?yōu)樽址J(rèn)的比較規(guī)則惜姐,反之亦是

(2)客戶端服務(wù)器通信過程字符集
a.客戶端發(fā)送請求

一般情況下客戶端編碼請求字符串時使用的字符集與操作系統(tǒng)當(dāng)前字符集一致

//查看操作系統(tǒng)字符集
$ echo $LC_ALL
$ echo $LC_CTYPE
$ echo $LANG
zh_CN.UTF-8
b.服務(wù)器接收請求

服務(wù)器將收到的請求當(dāng)作系統(tǒng)變量character_set_client代表的字符集進行編碼的字節(jié)序列

每個客戶端和服務(wù)器建立連接后,服務(wù)器會為該客戶端維護一個單獨的character_set_client變量椿息,變量為SESSION級別

c.服務(wù)器處理請求

服務(wù)器處理請求時歹袁,會將請求的字節(jié)序列轉(zhuǎn)換為character_set_connection對應(yīng)的字符集進行編碼的字節(jié)序列

d.服務(wù)器生成響應(yīng)

將結(jié)果集轉(zhuǎn)換為character_set_results對應(yīng)字符集編碼發(fā)送給客戶端

e.客戶端接收響應(yīng)

對于類UNIX操作系統(tǒng),會把接收到的字節(jié)序列寫入MySQL命令行界面寝优,并默認(rèn)使用當(dāng)前操作系統(tǒng)字符集解釋該字符
對于Windows系統(tǒng)条舔,會使用客戶端默認(rèn)字符集進行解釋字符

小結(jié)
系統(tǒng)變量 描述
character_set_client 服務(wù)器認(rèn)為請求是按照該系統(tǒng)變量指定的字符集來編碼的
character_set_connection 服務(wù)器在處理請求時,會把請求字節(jié)序列從character_set_client轉(zhuǎn)換為character_set_connection
character_set_results 服務(wù)器采用該系統(tǒng)變量指定的字符集對返回給客戶端的字符串進行編碼
客戶端服務(wù)器通信過程字符集.png

參考:
[1]https://dev.mysql.com/doc/refman/8.0/en/data-directory.html
[2]https://dev.mysql.com/doc/refman/8.0/en/programs-server.html
[3]MySQL是怎樣運行的-小孩子4919
[4]MySQL技術(shù)內(nèi)幕 Innodb存儲引擎-姜承堯
[5]https://dev.mysql.com/doc/refman/8.0/en/option-files.html
[6]https://dev.mysql.com/doc/refman/8.0/en/charset-collation-names.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乏矾,一起剝皮案震驚了整個濱河市孟抗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钻心,老刑警劉巖凄硼,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異捷沸,居然都是意外死亡摊沉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門痒给,熙熙樓的掌柜王于貴愁眉苦臉地迎上來说墨,“玉大人,你說我怎么就攤上這事侈玄⊥竦叮” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵序仙,是天一觀的道長突颊。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么律秃? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任爬橡,我火速辦了婚禮,結(jié)果婚禮上棒动,老公的妹妹穿的比我還像新娘糙申。我一直安慰自己,他們只是感情好船惨,可當(dāng)我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布柜裸。 她就那樣靜靜地躺著,像睡著了一般粱锐。 火紅的嫁衣襯著肌膚如雪疙挺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天怜浅,我揣著相機與錄音铐然,去河邊找鬼。 笑死恶座,一個胖子當(dāng)著我的面吹牛搀暑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播跨琳,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼自点,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了湾宙?” 一聲冷哼從身側(cè)響起樟氢,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤冈绊,失蹤者是張志新(化名)和其女友劉穎侠鳄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體死宣,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡伟恶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了毅该。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片博秫。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖眶掌,靈堂內(nèi)的尸體忽然破棺而出挡育,到底是詐尸還是另有隱情,我是刑警寧澤朴爬,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布即寒,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏母赵。R本人自食惡果不足惜逸爵,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凹嘲。 院中可真熱鬧师倔,春花似錦、人聲如沸周蹭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凶朗。三九已至致稀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間俱尼,已是汗流浹背抖单。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留遇八,地道東北人矛绘。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像刃永,于是被迫代替她去往敵國和親货矮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容