mysql進(jìn)階~01—mySql的架構(gòu)介紹

1、MySql簡(jiǎn)介

1-1、概述

MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB公司開發(fā),目前屬于Oracle公司。

MySQL是一種關(guān)聯(lián)數(shù)據(jù)庫管理系統(tǒng),將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉庫內(nèi),這樣就增加了速度并提高了靈活性。

Mysql是開源的,所以你不需要支付額外的費(fèi)用。

Mysql支持大型的數(shù)據(jù)庫。可以處理擁有上千萬條記錄的大型數(shù)據(jù)庫。

MySQL使用標(biāo)準(zhǔn)的SQL數(shù)據(jù)語言形式。

Mysql可以允許于多個(gè)系統(tǒng)上,并且支持多種語言。這些編程語言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。

Mysql對(duì)PHP有很好的支持,PHP是目前最流行的Web開發(fā)語言。

MySQL支持大型數(shù)據(jù)庫,支持5000萬條記錄的數(shù)據(jù)倉庫,32位系統(tǒng)表文件最大可支持4GB,64位系統(tǒng)支持最大的表文件為8TB。

Mysql是可以定制的,采用了GPL協(xié)議,你可以修改源碼來開發(fā)自己的Mysql系統(tǒng)。

1-2、MySql高級(jí)

mysql內(nèi)核

sql優(yōu)化

mysql服務(wù)器優(yōu)化

各種參數(shù)常量設(shè)定

查詢語句優(yōu)化

主從復(fù)制

軟硬件升級(jí)

容災(zāi)備份

sql編程

2、MySql Linux版的安裝

2-1、下載地址

官網(wǎng)下載地址:http://dev.mysql.com/downloads/mysql/


2-2、檢查當(dāng)前系統(tǒng)是否安裝過mysql

查詢命令:rpm -qa|grep -i mysql?


刪除命令:rpm -e RPM軟件包名(該名字是上一個(gè)命令查出來的名字)

rpm -e --nodeps mysql-libs-5.1.73-7.el6.x86_64

2-3、安裝mysql服務(wù)端


2-4、安裝mysql客戶端


2-5、查看mysql安裝時(shí)創(chuàng)建的mysql用戶和mysql組

2-6、mysql服務(wù)的啟動(dòng)和停止


2-7、mysql服務(wù)啟動(dòng)后,開始連接

1、首次啟動(dòng)成功

注意這里,因?yàn)镸ySQL默認(rèn)沒有密碼,所以這里我們沒有輸入密碼就直接連上了。


2、按照安裝Server? ? -中的提示修改登錄密碼


2-8、自啟動(dòng)mysql服務(wù)


2-9、修改配置文件的位置


版本默認(rèn)配置文件

5.5? ? ?/usr/share/mysql/my-huge.cnf

5.6? ? ?/usr/share/mysql/my-default.cnf

2-10、修改字符集和數(shù)據(jù)存儲(chǔ)路徑

1、查看字符集


默認(rèn)的是客戶端和服務(wù)器都用了latin1,所以會(huì)亂碼。

2、修改配置文件 my.cnf


[client]

#password = your_password

port = 3306

socket = /var/lib/mysql/mysql.sock

default-character-set=utf8

# The MySQL server

[mysqld]

port = 3306

character_set_server=utf8

character_set_client=utf8

collation-server=utf8_general_ci

socket = /var/lib/mysql/mysql.sock

skip-external-locking

key_buffer_size = 384M

max_allowed_packet = 1M

table_open_cache = 512

sort_buffer_size = 2M

read_buffer_size = 2M

read_rnd_buffer_size = 8M

myisam_sort_buffer_size = 64M

thread_cache_size = 8

query_cache_size = 32M

# Try number of CPU's*2 for thread_concurrency

thread_concurrency = 8

[mysql]

no-auto-rehash

default-character-set=utf8

3、重啟mysql

service mysql stop

service mysql start

重新連接后重新create databse并使用新建庫,然后再重新建表試試

2-11、mysql的安裝位置

路徑解釋備注

/var/lib/mysql/mysql? ? ? 數(shù)據(jù)庫文件的存放路徑/var/lib/mysql/db1

/usr/share/mysql? ? ? ? ? 配置文件目錄mysql.server命令及配置文件

/usr/bin? ? ? ? ? ? ? ? ? ? ? ?相關(guān)命令目錄mysqladmin mysqldump等命令

/etc/init.d/mysql? ? ? ? ? 啟停相關(guān)腳本

3、MySql主要配置文件

3-1、二進(jìn)制日志log-bin?? ?

用于主從復(fù)制


3-2、錯(cuò)誤日志log-error

默認(rèn)是關(guān)閉的,記錄嚴(yán)重的警告和錯(cuò)誤信息,每次啟動(dòng)和關(guān)閉的詳細(xì)信息等。

3-3、查詢?nèi)罩緇og

默認(rèn)關(guān)閉,記錄查詢的sql語句,如果開啟會(huì)減低mysql的整體性能,

因?yàn)橛涗浫罩疽彩切枰南到y(tǒng)資源的

3-4、數(shù)據(jù)文件

1、兩個(gè)系統(tǒng)默認(rèn)路徑

windows:? ? ? D:\MySQL Server 5.1\data\目錄下可以挑選很多庫

Linux:? ? ? ? /var/lib/mysql

2、frm文件:存放表結(jié)構(gòu)

3、myd文件:存放表數(shù)據(jù)

4、myi文件:存放表索引

3-5、如何配置

1、Windows:my.ini文件

2、Linux: /etc/my.cnf文件

4、MySql邏輯架構(gòu)介紹

4-1、總體概覽

和其它數(shù)據(jù)庫相比,MySQL有點(diǎn)與眾不同,它的架構(gòu)可以在多種不同場(chǎng)景中應(yīng)用

并發(fā)揮良好作用。主要體現(xiàn)在存儲(chǔ)引擎的架構(gòu)上。

插件式的存儲(chǔ)引擎架構(gòu)將查詢處理和其它的系統(tǒng)任務(wù)以及數(shù)據(jù)的存儲(chǔ)提取相分離。

這種架構(gòu)可以根據(jù)業(yè)務(wù)的需求和實(shí)際需要選擇合適的存儲(chǔ)引擎。


1.連接層

最上層是一些客戶端和連接服務(wù),包含本地sock通信和大多數(shù)基于客戶端/服務(wù)端工具

實(shí)現(xiàn)的類似于tcp/ip的通信。

主要完成一些類似于連接處理、授權(quán)認(rèn)證、及相關(guān)的安全方案。在該層上引入了線程池的概念,

為通過認(rèn)證安全接入的客戶端提供線程。同樣在該層上可以實(shí)現(xiàn)基于SSL的安全鏈接。

服務(wù)器也會(huì)為安全接入的每個(gè)客戶端驗(yàn)證它所具有的操作權(quán)限。

2.服務(wù)層

第二層架構(gòu)主要完成大多數(shù)的核心服務(wù)功能,如SQL接口,并完成緩存的查詢,

SQL的分析和優(yōu)化及部分內(nèi)置函數(shù)的執(zhí)行。

所有跨存儲(chǔ)引擎的功能也在這一層實(shí)現(xiàn),如過程、函數(shù)等。在該層,服務(wù)器會(huì)解析

查詢并創(chuàng)建相應(yīng)的內(nèi)部解析樹,并對(duì)其完成相應(yīng)的優(yōu)化如確定查詢表的順序,是否

利用索引等,最后生成相應(yīng)的執(zhí)行操作。如果是select語句,服務(wù)器還會(huì)查詢內(nèi)部的緩存。

如果緩存空間足夠大,這樣在解決大量讀操作的環(huán)境中能夠很好的提升系統(tǒng)的性能。

3.引擎層

存儲(chǔ)引擎層,存儲(chǔ)引擎真正的負(fù)責(zé)了MySQL中數(shù)據(jù)的存儲(chǔ)和提取,

服務(wù)器通過API與存儲(chǔ)引擎進(jìn)行通信。不同的存儲(chǔ)引擎具有的功能不同,

這樣我們可以根據(jù)自己的實(shí)際需要進(jìn)行選取。后面介紹MyISAM和InnoDB

4.存儲(chǔ)層

數(shù)據(jù)存儲(chǔ)層,主要是將數(shù)據(jù)存儲(chǔ)在運(yùn)行于裸設(shè)備的文件系統(tǒng)之上,并完成與存儲(chǔ)引擎的交互。


4-2、查詢說明

1、首先,mysql的查詢流程大致是:

mysql客戶端通過協(xié)議與mysql服務(wù)器建連接,發(fā)送查詢語句,

先檢查查詢緩存,如果命中,直接返回結(jié)果,否則進(jìn)行語句解析

2、有一系列預(yù)處理,比如檢查語句是否寫正確了,然后是查詢優(yōu)化

(比如是否使用索引掃描,如果是一個(gè)不可能的條件,則提前終止),

生成查詢計(jì)劃,然后查詢引擎啟動(dòng),開始執(zhí)行查詢,從底層存儲(chǔ)引擎

調(diào)用API獲取數(shù)據(jù),最后返回給客戶端。

3、怎么存數(shù)據(jù)、怎么取數(shù)據(jù),都與存儲(chǔ)引擎有關(guān)。

然后,mysql默認(rèn)使用的BTREE索引,并且一個(gè)大方向是,

無論怎么折騰sql,至少在目前來說,mysql最多只用到表中的一個(gè)索引。

5、MySql存儲(chǔ)引擎

5-1、查看命令

#看你的mysql現(xiàn)在已提供什么存儲(chǔ)引擎:

??mysql> show engines;


??#看你的mysql當(dāng)前默認(rèn)的存儲(chǔ)引擎:

??mysql> show variables like '%storage_engine%';

5-2、MyISAM和InnoDB

對(duì)比項(xiàng)? ?MyISAM? ? InnoDB

主外鍵? ? 不支持? ? ? ?支持

事務(wù)? ? ? ?不支持? ? ? ?支持

行表鎖? ?表鎖,即使操作一條記錄也會(huì)鎖住整個(gè)表,不適合高并發(fā)的操作

????????????行鎖,操作時(shí)只鎖某一行,不對(duì)其它行有影響,適合高并發(fā)的操作

緩存? ? ?只緩存索引,不緩存真實(shí)數(shù)據(jù)

????????????不僅緩存索引還要緩存真實(shí)數(shù)據(jù),對(duì)內(nèi)存要求較高,而且內(nèi)存大小對(duì)性能有決定性的影響

表空間? ?小? ? ? ? ? ? ? 大

關(guān)注點(diǎn)? ? 性能? ? ? ? ?事務(wù)

默認(rèn)安裝? Y? ? ? ? ? ? ?Y

5-3、阿里巴巴、淘寶用哪個(gè)

Percona 為 MySQL 數(shù)據(jù)庫服務(wù)器進(jìn)行了改進(jìn),在功能和性能上較 MySQL 有著很顯著的提升。

該版本提升了在高負(fù)載情況下的 InnoDB 的性能、為 DBA 提供一些非常有用的性能診斷工具;

另外有更多的參數(shù)和命令來控制服務(wù)器行為。

該公司新建了一款存儲(chǔ)引擎叫xtradb完全可以替代innodb,并且在性能和并發(fā)上做得更好,

阿里巴巴大部分mysql數(shù)據(jù)庫其實(shí)使用的percona的原型加以修改。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容