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)變量指定的字符集對返回給客戶端的字符串進行編碼 |
參考:
[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