mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能

本篇文章給大家主要講的是關(guān)于MySQL數(shù)據(jù)庫(kù)的特性以及參數(shù)性能的內(nèi)容,感興趣的話(huà)就一起來(lái)看看這篇文章吧,相信看完mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能對(duì)大家多少有點(diǎn)參考價(jià)值吧。                

成都創(chuàng)新互聯(lián)公司主營(yíng)土默特右旗網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶App定制開(kāi)發(fā),土默特右旗h5微信小程序定制開(kāi)發(fā)搭建,土默特右旗網(wǎng)站營(yíng)銷(xiāo)推廣歡迎土默特右旗等地區(qū)企業(yè)咨詢(xún)

一:mysql與其他數(shù)據(jù)庫(kù)的比較

MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),開(kāi)發(fā)者為瑞典MySQL AB公司,現(xiàn)在已經(jīng)被Sun公司收購(gòu),支持FreeBSD、Linux、MAC、Windows等多種操作系統(tǒng)與其他的大型數(shù)據(jù)庫(kù)例如Oracle、DB2、SQL Server等相比功能稍弱一些

1、可以處理?yè)碛猩锨f(wàn)條記錄的大型數(shù)據(jù)

2、支持常見(jiàn)的SQL語(yǔ)句規(guī)范

3、可移植行高,安裝簡(jiǎn)單小巧

4、良好的運(yùn)行效率,有豐富信息的網(wǎng)絡(luò)支持

5、調(diào)試、管理,優(yōu)化簡(jiǎn)單(相對(duì)其他大型數(shù)據(jù)庫(kù))

易用性比較

   從安裝方面來(lái)說(shuō),MySQL安裝包大小僅100MB左右,與那幾大商業(yè)數(shù)據(jù)庫(kù)相比完全不是一個(gè)數(shù)量級(jí)。它的安裝也比Oracle等商業(yè)數(shù)據(jù)庫(kù)容易很多,不論是通過(guò)已經(jīng)編譯好的二進(jìn)制分發(fā)包,還是通過(guò)源碼編譯安裝,都非常簡(jiǎn)單。

性能比較

   MySQL一直以來(lái)奉行一個(gè)原則,那就是在保證足夠穩(wěn)定性的前提下,盡可能地提高自身的處理能力。也就是說(shuō),在性能和功能方面,MySQL第一考慮的要素主要還是性能,MySQL希望能夠在滿(mǎn)足客戶(hù)99%的需求的前提下,將剩余的所有精力都用來(lái)努力提高系統(tǒng)性能,而不希望自己是一個(gè)比其他任何數(shù)據(jù)庫(kù)的功能都要強(qiáng)大的產(chǎn)品。

總體來(lái)說(shuō),MySQL數(shù)據(jù)庫(kù)在發(fā)展過(guò)程中一直追求三項(xiàng)原則:簡(jiǎn)單、高效、可靠。

 

二:mysql架構(gòu)組成

 mysql物理文件組成:

1)日志文件:主要包含{錯(cuò)誤日志、查詢(xún)?nèi)罩尽⒙樵?xún)?nèi)罩?、事物日志、二進(jìn)制日志}

日志是mysql數(shù)據(jù)庫(kù)的重要組成部分。記錄mysql數(shù)據(jù)庫(kù)運(yùn)行期間發(fā)生的變化,如mysql數(shù)據(jù)庫(kù)的客戶(hù)端連接狀況、sql語(yǔ)句執(zhí)行情況和錯(cuò)誤信息。當(dāng)數(shù)據(jù)庫(kù)遭到損壞時(shí),可以通過(guò)日志查看文件記錄的出錯(cuò)的原因,并且可以通過(guò)日志文件進(jìn)行數(shù)據(jù)恢復(fù)。

首先挨個(gè)介紹日志的功能:

錯(cuò)誤日志:Error Log

在mysql數(shù)據(jù)庫(kù)中,錯(cuò)誤日志功能是默認(rèn)開(kāi)啟的。默認(rèn)情況下,錯(cuò)誤日志存儲(chǔ)在mysql數(shù)據(jù)庫(kù)的數(shù)據(jù)目錄中。錯(cuò)誤日志文件通常的名稱(chēng)為hostname.err。其中,hostname表示云服務(wù)器主機(jī)名。

錯(cuò)誤日志所記錄的信息是可以通過(guò)log-error和log-warnings來(lái)定義的,其中l(wèi)og-error是定義是否啟用錯(cuò)誤日志的功能和錯(cuò)誤日志的存儲(chǔ)位置,log-warnings是定義是否將警告信息也定義至錯(cuò)誤日志中。記錄的內(nèi)容信息包括:云服務(wù)器啟動(dòng)和關(guān)閉過(guò)程中的信息(未必是錯(cuò)誤信息,如mysql如何啟動(dòng)InnoDB的表空間文件的、如何初始化自己的存儲(chǔ)引擎的等等)、云服務(wù)器運(yùn)行過(guò)程中的錯(cuò)誤信息、事件調(diào)度器運(yùn)行一個(gè)事件時(shí)產(chǎn)生的信息、在從云服務(wù)器上啟動(dòng)云服務(wù)器進(jìn)程時(shí)產(chǎn)生的信息

mysql有很多的系統(tǒng)變量可以設(shè)置,系統(tǒng)的變量設(shè)置不同,會(huì)導(dǎo)致系統(tǒng)運(yùn)行狀態(tài)不同

mysql兩組命令:分別查看系統(tǒng)設(shè)置和運(yùn)行狀態(tài):

1、查看系統(tǒng)設(shè)置: 
SHOW [GLOBAL | SESSION] VARIABLES [like_or_where] 
SHOW VARIABLES:shows the values of MySQL system variables. 

2、運(yùn)行狀態(tài): 
SHOW [GLOBAL | SESSION] STATUS [like_or_where] 
SHOW STATUS:provides server status information.

那么接下來(lái)修改系統(tǒng)配置:在主配置文件中

vi /etc/my.cnf

    例如:log_bin=/usr/local/mysql/data/

查看mysql的版本

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

一般而言,日志級(jí)別的定義沒(méi)有會(huì)話(huà)變量都只是在全局級(jí)別下進(jìn)行定義

錯(cuò)誤日志的狀態(tài):

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

log-error定義為錯(cuò)誤日志文件路徑

log-error-verbosity

The MySQL error log has received some attention in MySQL 5.7, with a new setting called log_error_verbosity.

更改錯(cuò)誤日志位置可以使用log-error來(lái)設(shè)置如下:

在主配置文件中: vi /etc/my.cnf

log-error = /usr/local/mysql/data/mysqld.err

查看mysql的錯(cuò)誤日志內(nèi)容:

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

在工作中有時(shí)候希望將錯(cuò)誤日志做備份,并且重新記錄,這時(shí)候可以使用mysql的flush logs刷新日志進(jìn)行生成新的日志文件。備份文件為.beifen結(jié)尾

刪除錯(cuò)誤日志:

在mysql5.5.7之前:數(shù)據(jù)庫(kù)管理員可以刪除很長(zhǎng)時(shí)間之前的錯(cuò)誤日志,以保證mysql云服務(wù)器上的硬盤(pán)空間。mysql數(shù)據(jù)庫(kù)中,可以使用mysqladmin命令開(kāi)啟新的錯(cuò)誤日志。mysqladmin命令的語(yǔ)法如下:mysqladmin –u root –pflush-logs也可以登錄mysql數(shù)據(jù)庫(kù)中使用FLUSHLOGS語(yǔ)句來(lái)開(kāi)啟新的錯(cuò)誤日志。

在mysql5.5.7之后:云服務(wù)器將關(guān)閉此項(xiàng)功能。只能使用重命名原來(lái)的錯(cuò)誤日志文件,手動(dòng)沖洗日志創(chuàng)建一個(gè)新的:方式如下:

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

更多信息請(qǐng)查閱官方文檔:http://dev.mysql.com/doc/refman/5.5/en/error-log.html

http://dev.mysql.com/doc/refman/5.6/en/error-log.html

http://dev.mysql.com/doc/refman/5.7/en/error-log.html

二進(jìn)制日志:Binary Log & Binary Log Index

二進(jìn)制日志,俗稱(chēng)Binary Log,主要用于記錄修改數(shù)據(jù)或有可能引起數(shù)據(jù)改變的mysql語(yǔ)句;并且記錄語(yǔ)句的發(fā)生時(shí)間、執(zhí)行時(shí)長(zhǎng)、操作數(shù)據(jù)。。。。一般情況下大小體積上限為1G

當(dāng)我們通過(guò)“l(fā)og-bin=file_name”打開(kāi)了記錄的功能之后,MySQL 會(huì)將所有修改數(shù)據(jù)庫(kù)數(shù)據(jù)的query 以二進(jìn)制形式記錄到日志文件中。當(dāng)然,日志中并不僅限于query 語(yǔ)句這么簡(jiǎn)單,還包括每一條query 所執(zhí)行的時(shí)間,所消耗的資源,以及相關(guān)的事務(wù)信息,所以binlog是事務(wù)安全的。

主:如果log-bin日志不開(kāi)啟的話(huà)那么將無(wú)法做mysql主從復(fù)制

和錯(cuò)誤日志一樣,binlog記錄功能同樣需要“l(fā)og-bin=file_name”參數(shù)的顯式指定才能開(kāi)啟,如果未指定file_name,則會(huì)在數(shù)據(jù)目錄下記錄為mysql-bin.******(*代表0~9 之間的某一個(gè)數(shù)字,來(lái)表示該日志的序號(hào))。

二進(jìn)制的開(kāi)啟:

當(dāng)前是關(guān)閉狀態(tài)

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

可以通過(guò)直配置文件開(kāi)啟:

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

之后重啟mysql服務(wù)

再次查看mysql服務(wù)已經(jīng)啟動(dòng):

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能

binlog還有其他一些附加選項(xiàng)參數(shù):

“max_binlog_size”設(shè)置binlog的最大存儲(chǔ)上限,一般設(shè)置為512M或1G,一般不能超過(guò)1G當(dāng)日志達(dá)到該上限時(shí),MySQL 會(huì)重新創(chuàng)建一個(gè)日志開(kāi)始繼續(xù)記錄。不過(guò)偶爾也有超出該設(shè)置的binlog產(chǎn)生,一般都是因?yàn)樵诩磳⑦_(dá)到上限時(shí),產(chǎn)生了一個(gè)較大的事務(wù),為了保證事務(wù)安全,MySQL 不會(huì)將同一個(gè)事務(wù)分開(kāi)記錄到兩個(gè)binlog中。

 

“binlog-do-db=db_name”參數(shù)明確告訴MySQL,需要對(duì)某個(gè)(db_name)數(shù)據(jù)庫(kù)記錄binlog,如果有了“binlog-do-db=db_name”參數(shù)的顯式指定,MySQL 會(huì)忽略針對(duì)其他數(shù)據(jù)庫(kù)執(zhí)行的query,而僅僅記錄針對(duì)指定數(shù)據(jù)庫(kù)執(zhí)行的query。

 

“binlog-ignore-db=db_name”與“binlog-do-db=db_name”完全相反,它顯式指定忽略某個(gè)(db_name)數(shù)據(jù)庫(kù)的binlog記錄,當(dāng)指定了這個(gè)參數(shù)之后,MySQL 會(huì)記錄指定數(shù)據(jù)庫(kù)以外所有的數(shù)據(jù)庫(kù)的binlog。

 

mysql-bin.index文件(binary log index)的功能是記錄所有Binary Log 的絕對(duì)路徑,保證MySQL 各種線(xiàn)程能夠順利的根據(jù)它找到所有需要的Binary Log 文件。

 

binlog_cache_size =32768   #默認(rèn)值32768 binlog_cache_size:一個(gè)事務(wù),在沒(méi)有提交(uncommitted)的時(shí)候,產(chǎn)生的日志,記錄到Cache中;等到事務(wù)提交(committed)需要提交的時(shí)候,則把日志持久化到磁盤(pán)。一般來(lái)說(shuō),如果我們的數(shù)據(jù)庫(kù)中沒(méi)有什么大事務(wù),寫(xiě)入也不是特別頻繁,2MB~4MB是一個(gè)合適的選擇。但是如果我們的數(shù)據(jù)庫(kù)大事務(wù)較多,寫(xiě)入量比較大,可與適當(dāng)調(diào)高binlog_cache_size。

binlog_cache_size :一個(gè)事務(wù),在沒(méi)有提交(uncommitted)的時(shí)候,產(chǎn)生的日志,記錄到Cache中;等到事務(wù)提交(committed)需要提交的時(shí)候,則把日志持久化到磁盤(pán)。 

接著,binlog_cache_size設(shè)置多大呢?答案是:根據(jù)公司生產(chǎn)的實(shí)際情況而定 
設(shè)置太大的話(huà),會(huì)比較消耗內(nèi)存資源(Cache本質(zhì)就是內(nèi)存),更加需要注意的是:binlog_cache不是全局的,是按SESSION為單位獨(dú)享分配的,也就是說(shuō)當(dāng)一個(gè)線(xiàn)程開(kāi)始一個(gè)事務(wù)的時(shí)候,Mysql就會(huì)為這個(gè)SESSION分配一個(gè)binlog_cache (備注:我想之所以以SESSION為單位分配binlog_cache是有道理的,因?yàn)椴煌膍ysql請(qǐng)求,產(chǎn)生的binlog數(shù)量不一樣的,批量插入數(shù)據(jù)必然產(chǎn)生大量的binlog,而簡(jiǎn)單注冊(cè)一個(gè)用戶(hù),產(chǎn)生的binlog有限,那么JDBC連接上能否設(shè)置binlog_cache_size呢?)。 
設(shè)置太小的話(huà),如果用戶(hù)提交一個(gè)“長(zhǎng)事務(wù)(long_transaction)”,比如:批量導(dǎo)入數(shù)據(jù)。那么該事務(wù)必然會(huì)產(chǎn)生很多binlog,這樣cache可能不夠用(默認(rèn)binlog_cache_size是32K),不夠用的時(shí)候mysql會(huì)把uncommitted的部分寫(xiě)入臨時(shí)文件(臨時(shí)文件cache的效率必然沒(méi)有內(nèi)存cache高),等到committed的時(shí)候才會(huì)寫(xiě)入正式的持久化日志文件。 

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

概念解釋?zhuān)?/p>

事務(wù)表支持將批處理當(dāng)做一個(gè)完整的任務(wù)統(tǒng)一提交或回滾,即對(duì)包含在事務(wù)中的多條語(yǔ)句要么全執(zhí)行,要么全部不執(zhí)行
非事務(wù)表則不支持此種操作,批處理中的語(yǔ)句如果遇到錯(cuò)誤,在錯(cuò)誤前的語(yǔ)句執(zhí)行成功,之后的則不執(zhí)行。

 

log-bin = mysql-bin#指定binlog的位置,默認(rèn)在數(shù)據(jù)目錄下。

 

binlog-format= {ROW|STATEMENT|MIXED}#指定二進(jìn)制日志的類(lèi)型,默認(rèn)為MIXED。

概念解釋?zhuān)簃ysql復(fù)制主要有三種方式:基于SQL語(yǔ)句的復(fù)制(statement-based replication, SBR),基于行的復(fù)制(row-based replication, RBR),混合模式復(fù)制(mixed-based replication, MBR)。對(duì)應(yīng)的,binlog的格式也有三種:STATEMENT,ROW,MIXED。

STATEMENT模式(SBR)

每一條會(huì)修改數(shù)據(jù)的sql語(yǔ)句會(huì)記錄到binlog中。優(yōu)點(diǎn)是并不需要記錄每一行的數(shù)據(jù)變化,減少了binlog日志量,節(jié)約IO,提高性能。

缺點(diǎn):

某些情況下會(huì)導(dǎo)致master-slave中的數(shù)據(jù)不一致(如sleep()函數(shù),last_insert_id(),以及user-defined functions(udf)等會(huì)出現(xiàn)問(wèn)題)

 

ROW模式(RBR)

不記錄每條sql語(yǔ)句的信息,僅需記錄哪條數(shù)據(jù)被修改了,修改成什么樣了。

缺點(diǎn):

是會(huì)產(chǎn)生大量的日志,讓日志暴漲。

③ MIXED模式(MBR)

以上兩種模式的混合使用,一般的復(fù)制使用STATEMENT模式保存binlog,對(duì)于STATEMENT模式無(wú)法復(fù)制的操作使用ROW模式保存binlog,MySQL會(huì)根據(jù)執(zhí)行的SQL語(yǔ)句選擇日志保存方式。即交替使用行和語(yǔ)句、由mysql云服務(wù)器自行判斷。

其中基于行的定義格式數(shù)據(jù)量會(huì)大一些但是可以保證數(shù)據(jù)的精確性

注:在生產(chǎn)環(huán)境下多使用MBR模式,雖然I/O使用增大,但對(duì)數(shù)據(jù)安全性比較高

 

sync_binlog = 10#設(shè)定多久同步一次二進(jìn)制日志至磁盤(pán)文件中,0表示不同步,任何正數(shù)值都表示對(duì)二進(jìn)制每多少次寫(xiě)操作之后同步一次。當(dāng)autocommit的值為1時(shí),每條語(yǔ)句的執(zhí)行都會(huì)引起二進(jìn)制日志同步,否則,每個(gè)事務(wù)的提交會(huì)引起二進(jìn)制日志同步

 

通過(guò)編輯my.cnf中的log-bin選項(xiàng)可以開(kāi)啟二進(jìn)制日志;形式如下:

log-bin = /usr路徑

其中,DIR參數(shù)指定二進(jìn)制文件的存儲(chǔ)路徑;filename參數(shù)指定二級(jí)制文件的文件名,其形式為filename.number,number的形式為000001、000002等。每次重啟mysql服務(wù)或運(yùn)行mysql> flush logs;都會(huì)生成一個(gè)新的二進(jìn)制日志文件,這些日志文件的number會(huì)不斷地遞增。除了生成上述的文件外還會(huì)生成一個(gè)名為filename.index的文件。這個(gè)文件中存儲(chǔ)所有二進(jìn)制日志文件的清單又稱(chēng)為二進(jìn)制文件的索引

 

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

 

查看二進(jìn)制日志:

二進(jìn)制日志的定義方式為二進(jìn)制格式;使用此格式可以存儲(chǔ)更多的信息,并且可以使寫(xiě)入二進(jìn)制日志的效率更高。但是不能直接使用查看命令打開(kāi)并查看二進(jìn)制日志。

 

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

當(dāng)前使用的二進(jìn)制文件及所處位置

 

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能

 

查看當(dāng)前二進(jìn)制文件的信息:

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

查看二進(jìn)制日志信息的命令:

語(yǔ)法格式:SHOW BINLOG EVENTS[IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]

#查看所有的二進(jìn)制信息

mysql> show binlog events\G;

#查看指定日志的二進(jìn)制信息

#從指定的事件位置開(kāi)始

mysql> show binlog events in 'log.000002' from 1215\G;

 

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

由于無(wú)法使用cat等方式直接打開(kāi)并查看二進(jìn)制日志;所以必須使用mysqlbinlog命令。但是當(dāng)正在執(zhí)行mysql讀寫(xiě)操作時(shí)建議不要使用此打開(kāi)正在使用的二進(jìn)制日志文件;若非要打開(kāi)可flush logs。mysqlbinlog命令的使用方式:

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能

刪除二進(jìn)制日志信息:

二進(jìn)制日志會(huì)記錄大量的信息(其中包含一些無(wú)用的信息)。如果很長(zhǎng)時(shí)間不清理二進(jìn)制日志,將會(huì)浪費(fèi)很多的磁盤(pán)空間。但是,刪除之后可能導(dǎo)致數(shù)據(jù)庫(kù)崩潰時(shí)無(wú)法進(jìn)行恢復(fù),所以若要?jiǎng)h除二進(jìn)制日志首先將其和數(shù)據(jù)庫(kù)備份一份,其中也只能刪除備份前的二進(jìn)制日志,新產(chǎn)生的日志信息不可刪。也不可在關(guān)閉mysql云服務(wù)器之后直接刪除因?yàn)檫@樣可能會(huì)給數(shù)據(jù)庫(kù)帶來(lái)錯(cuò)誤的。若非要?jiǎng)h除二進(jìn)制日志需要做如下操作:導(dǎo)出備份數(shù)據(jù)庫(kù)和二進(jìn)制日志文件進(jìn)行壓縮歸檔存儲(chǔ)。刪除二進(jìn)制文件的方法如下:

方法1:根據(jù)文件或時(shí)間點(diǎn)來(lái)刪除二進(jìn)制日志:

語(yǔ)法形式:

mysql> PURGE { BINARY | MASTER } LOGS {TO 'log_name' | BEFORE datetime_expr }

其中TO'log_name'表示把這個(gè)文件之前的其他文件都刪除掉,也可使用BEFORE datetime_expr指定把哪個(gè)時(shí)間之前的二進(jìn)制文件刪除了。

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

刪除所有的二進(jìn)制日志(慎用):

使用RESET MASTER語(yǔ)句可以刪除所有的二進(jìn)制日志。該語(yǔ)句的形式如下:

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 


3、事務(wù)日志(或稱(chēng)redo日志)

事務(wù)日志(InnoDB特有的日志)可以幫助提高事務(wù)的效率。使用事務(wù)日志,存儲(chǔ)引擎在修改表的數(shù)據(jù)時(shí)只需要修改其內(nèi)存拷貝,再把修改行為記錄到持久在硬盤(pán)上的事務(wù)日志中,而不用每次都將修改的數(shù)據(jù)本身持久到磁盤(pán)。事務(wù)日志采用追加的方式,因此寫(xiě)日志的操作是磁盤(pán)上一小塊區(qū)域內(nèi)的順序I/O,而不像隨機(jī)I/O需要在磁盤(pán)的多個(gè)地方移動(dòng)磁頭,所以采用事務(wù)日志的方式相對(duì)來(lái)說(shuō)要快得多。事務(wù)日志持久以后,內(nèi)存中被修改的數(shù)據(jù)在后臺(tái)可以慢慢的刷回到磁盤(pán)。目前大多數(shù)的存儲(chǔ)引擎都是這樣實(shí)現(xiàn)的。

如果數(shù)據(jù)的修改已經(jīng)記錄到事務(wù)日志并持久化,但數(shù)據(jù)本身還沒(méi)有寫(xiě)回磁盤(pán),此時(shí)系統(tǒng)崩潰,存儲(chǔ)引擎在重啟時(shí)能夠自動(dòng)恢復(fù)這部分修改的數(shù)據(jù)。具有的恢復(fù)方式則視存儲(chǔ)引擎而定。

一般情況下,mysql會(huì)默認(rèn)提供多種存儲(chǔ)引擎,你可以通過(guò)下面的查看:
查看你的mysql現(xiàn)在已提供什么存儲(chǔ)引擎:
mysql> show engines;
看你的mysql當(dāng)前默認(rèn)的存儲(chǔ)引擎:
mysql> show variables like '%storage_engine%';
你要看某個(gè)表用了什么引擎(在顯示結(jié)果里參數(shù)engine后面的就表示該表當(dāng)前用的存儲(chǔ)引擎):
mysql> show create table 表名;

注:

create table 庫(kù)名.表名 engine = innodb;
這樣就可以將表的引擎變更為innodb引擎了。
也可以在創(chuàng)建表之后通過(guò)下面語(yǔ)句來(lái)變更:
alter table庫(kù)名.表名engine =innodb;

 

查看事務(wù)日志的定義:

mysql> show global variables like '%log%';

顯示結(jié)果:

| innodb_flush_log_at_timeout| 1   |

| innodb_flush_log_at_trx_commit  | 1   #在事務(wù)提交時(shí)innodb是否同步日志從緩沖區(qū)到文件中,當(dāng)這個(gè)值為1(默認(rèn)值)之時(shí),在每個(gè)事務(wù)提交時(shí),日志緩沖被寫(xiě)到日志文件,對(duì)日志文件做到磁盤(pán)操作的刷新,性能會(huì)很差造成大量的磁盤(pán)I/O但這種方式最安全;如果設(shè)為2,每次提交事務(wù)都會(huì)寫(xiě)日志,但并不會(huì)執(zhí)行刷的操作。每秒定時(shí)會(huì)刷到日志文件。要注意的是,并不能保證100%每秒一定都會(huì)刷到磁盤(pán),這要取決于進(jìn)程的調(diào)度。每次事務(wù)提交的時(shí)候?qū)?shù)據(jù)寫(xiě)入事務(wù)日志,而這里的寫(xiě)入僅是調(diào)用了文件系統(tǒng)的寫(xiě)入操作,而文件系統(tǒng)是有 緩存的,所以這個(gè)寫(xiě)入并不能保證數(shù)據(jù)已經(jīng)寫(xiě)入到物理磁盤(pán)。設(shè)置為0,日志緩沖每秒一次地被寫(xiě)到日志文件,并且對(duì)日志文件做到磁盤(pán)操作的刷新,但是在一個(gè)事務(wù)提交不做任何操作。

注:刷寫(xiě)的概念

刷寫(xiě)其實(shí)是兩個(gè)操作,刷(flush)和寫(xiě)(write),區(qū)分這兩個(gè)概念是很重要的。在大多數(shù)的操作系統(tǒng)中,把Innodb的log buffer(內(nèi)存)寫(xiě)入日志(調(diào)用系統(tǒng)調(diào)用write),只是簡(jiǎn)單的把數(shù)據(jù)移到操作系統(tǒng)緩存中,操作系統(tǒng)緩存同樣指的是內(nèi)存。并沒(méi)有實(shí)際的持久化數(shù)據(jù)。

所以,通常設(shè)為0和2的時(shí)候,在崩潰或斷電的時(shí)候會(huì)丟失最后一秒的數(shù)據(jù),因?yàn)檫@個(gè)時(shí)候數(shù)據(jù)只是存在于操作系統(tǒng)緩存。之所以說(shuō)“通?!?,可能會(huì)有丟失不只1秒的數(shù)據(jù)的情況,比如說(shuō)執(zhí)行flush操作的時(shí)候阻塞了。

總結(jié)

設(shè)為1當(dāng)然是最安全的,但性能頁(yè)是最差的(相對(duì)其他兩個(gè)參數(shù)而言,但不是不能接受)。如果對(duì)數(shù)據(jù)一致性和完整性要求不高,完全可以設(shè)為2,如果只最求性能,例如高并發(fā)寫(xiě)的日志云服務(wù)器,設(shè)為0來(lái)獲得更高性能

            |

| innodb_locks_unsafe_for_binlog| OFF                                      |

| innodb_log_buffer_size| 16777216                                 |

| innodb_log_checksums                    | ON                                       |

| innodb_log_compressed_pages| ON                                       |

| innodb_log_file_size| 50331648  #日志文件大小                            |

| innodb_log_files_in_group| 2 # DB中設(shè)置幾組事務(wù)日志,默認(rèn)是2                                   |

| innodb_log_group_home_dir| ./#定義innodb事務(wù)日志組的位置,此位置設(shè)置默認(rèn)為MySQL的datadir                                      |

每個(gè)事務(wù)日志都是大小為50兆的文件(不同版本的mysql有差異):

在mysql中默認(rèn)以ib_logfile0,ib_logfile1名稱(chēng)存在

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

4、慢查詢(xún)?nèi)罩荆簊low query log

顧名思義,慢查詢(xún)?nèi)罩局杏涗浀氖菆?zhí)行時(shí)間較長(zhǎng)的query,也就是我們常說(shuō)的slowquery。

慢查詢(xún)?nèi)罩静捎玫氖呛?jiǎn)單的文本格式,可以通過(guò)各種文本編輯器查看其中的內(nèi)容。其中

記錄了語(yǔ)句執(zhí)行的時(shí)刻,執(zhí)行所消耗的時(shí)間,執(zhí)行用戶(hù),連接主機(jī)等相關(guān)信息。

慢查詢(xún)?nèi)罩镜淖饔茫?/p>

慢查詢(xún)?nèi)罩臼怯脕?lái)記錄執(zhí)行時(shí)間超過(guò)指定時(shí)間的查詢(xún)語(yǔ)句。通過(guò)慢查詢(xún)?nèi)罩?,可以查找出哪些查?xún)語(yǔ)句的執(zhí)行效率很低,以便進(jìn)行優(yōu)化。一般建議開(kāi)啟,它對(duì)云服務(wù)器性能的影響微乎其微,但是可以記錄mysql云服務(wù)器上執(zhí)行了很長(zhǎng)時(shí)間的查詢(xún)語(yǔ)句??梢詭椭覀兌ㄎ恍阅軉?wèn)題的。MySQL 還提供了專(zhuān)門(mén)用來(lái)分析滿(mǎn)查詢(xún)?nèi)罩镜墓ぞ叱绦騧ysqldumpslow,用來(lái)幫助數(shù)據(jù)庫(kù)管理人員解決可能存在的性能問(wèn)題。

查看慢查詢(xún)?nèi)罩镜亩x:

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

\啟動(dòng)和設(shè)置慢查詢(xún)?nèi)罩荆?/p>

方法1:通過(guò)配置文件my.cnf開(kāi)啟慢查詢(xún)?nèi)罩荆?/p>

注:在不同的mysql版本中,開(kāi)啟慢查詢(xún)?nèi)罩緟?shù)不太一樣,不過(guò)都可以通過(guò) show variables like "%slow%" 和show variables like "%long%"查看出來(lái)。

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

其中:

slow_query_log: off關(guān)閉狀態(tài) (0) on開(kāi)啟狀態(tài)(1)
slow_query_log_file  慢查詢(xún)?nèi)罩敬娣诺攸c(diǎn)

long_query_time選項(xiàng)來(lái)設(shè)置一個(gè)時(shí)間值,時(shí)間以秒為單位,可以精確到微秒。如果查詢(xún)時(shí)間超過(guò)了這個(gè)時(shí)間值(默認(rèn)為10秒),這個(gè)查詢(xún)語(yǔ)句將被記錄到慢查詢(xún)?nèi)罩局?設(shè)置為0的話(huà)表示記錄所有的查詢(xún)。

注:如果不指定存儲(chǔ)路徑,慢查詢(xún)?nèi)罩灸J(rèn)存儲(chǔ)到mysql數(shù)據(jù)庫(kù)的數(shù)據(jù)文件下,如果不指定文件名,默認(rèn)文件名為hostname-slow.log

修改my.cnf文件:

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

另外也可以通過(guò)mysql直接定義(只不過(guò)屬于臨時(shí)生效)

mysql>set globalslow_query_log=1;  #開(kāi)啟慢查詢(xún)?nèi)罩?/p>

Query OK, 0 rowsaffected (0.35 sec)

mysql>setsession long_query_time=0.0001; #更改時(shí)間(當(dāng)前session中,退出則重置)

Query OK, 0 rowsaffected (0.00 sec)

mysql>set globallong_query_time=0.0001; #更改時(shí)間(全局中,重啟服務(wù)則重置)

mysql> SHOWVARIABLES LIKE 'long%';  #查詢(xún)定義時(shí)間

查看慢查詢(xún)?nèi)罩?/p>

查看文件內(nèi)容命令如cat直接查看慢日志文件

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

數(shù)據(jù)文據(jù)  (在這里主要介紹myisam和innodb的區(qū)別以及功能)

在MySQL 中每一個(gè)數(shù)據(jù)庫(kù)都會(huì)在定義好(或者默認(rèn))的數(shù)據(jù)目錄下存在一個(gè)以數(shù)據(jù)庫(kù)名字命名的文件夾,用來(lái)存放該數(shù)據(jù)庫(kù)中各種表數(shù)據(jù)文件。不同的MySQL 存儲(chǔ)引擎有各自不同的數(shù)據(jù)文件。如MyISAM用“.MYD”作為擴(kuò)展名,Innodb用“.ibd” 

如何查看你的mysql現(xiàn)在已提供什么存儲(chǔ)引擎:
mysql> show engines;
看你的mysql當(dāng)前默認(rèn)的存儲(chǔ)引擎:
mysql> show variables like '%storage_engine%';

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能

你要看某個(gè)表用了什么引擎(在顯示結(jié)果里參數(shù)engine后面的就表示該表當(dāng)前用的存儲(chǔ)引擎):
mysql> show create table 表名;

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

另外換可以在創(chuàng)建表的時(shí)候在表名的后面跟engine=innodb 可以改變表的引擎

create table 庫(kù)名.表名 engine = innodb

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

可以在文件目錄當(dāng)中查看創(chuàng)建的文件格式

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

查看mysql存儲(chǔ)引擎命令,在mysql>提示符下搞入show engines;字段 Support為:Default表示默認(rèn)存儲(chǔ)引擎  

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能2、設(shè)置InnoDB為默認(rèn)引擎:在配置文件my.cnf中的 [mysqld] 下面加入default-storage-engine=INNODB 一句
3、重啟mysql云服務(wù)器:service mysqld restart 登錄mysql數(shù)據(jù)庫(kù),

1、“.frm”

主要存放表的數(shù)據(jù);包括定義表結(jié)構(gòu)信息,另外在每個(gè)表當(dāng)中都會(huì)有一個(gè)以表命名的.frm的文件,所有的文件存放在此文件夾下面

MyISAM數(shù)據(jù)庫(kù)表文件:.MYD文件:表數(shù)據(jù)文件;.MYI文件:索引文件

2、“.MYD”文件

myisam專(zhuān)門(mén)存放存儲(chǔ)引擎的專(zhuān)用文件

3、“.MYI”文件

“.MYI”文件也是專(zhuān)屬于MyISAM存儲(chǔ)引擎的,主要存放MyISAM表的索引相關(guān)信息。

 

InnoDB采用表空間(tablespace)來(lái)管理數(shù)據(jù),存儲(chǔ)表數(shù)據(jù)和索引。

.ibd文件:?jiǎn)伪肀砜臻g文件,每個(gè)表使用一個(gè)表空間文件(file per table),存放用戶(hù)數(shù)據(jù)庫(kù)表數(shù)據(jù)和索引。

 

InnoDB共享表空間(即InnoDB文件集,ib-file set):ibdata1、ibdata2等,存儲(chǔ)InnoDB系統(tǒng)信息和用戶(hù)數(shù)據(jù)庫(kù)表數(shù)據(jù)和索引,所有表共用。

.idb和ibdata的區(qū)別:

.id兩者之間的優(yōu)缺點(diǎn)

共享表空間:
優(yōu)點(diǎn):
可以放表空間分成多個(gè)文件存放到各個(gè)磁盤(pán)上。數(shù)據(jù)和文件放在一起方便管理。
缺點(diǎn):
所有的數(shù)據(jù)和索引存放到一個(gè)文件中,多個(gè)表及索引在表空間中混合存儲(chǔ),這樣對(duì)于一個(gè)表做了大量刪除操作后表空間中將會(huì)有大量的空隙,特別是對(duì)于統(tǒng)計(jì)分析,日值系統(tǒng)這類(lèi)應(yīng)用最不適合用共享表空間。

獨(dú)立表空間:

優(yōu)點(diǎn):
1.每個(gè)表都有自已獨(dú)立的表空間。
2.每個(gè)表的數(shù)據(jù)和索引都會(huì)存在自已的表空間中。
3.可以實(shí)現(xiàn)單表在不同的數(shù)據(jù)庫(kù)中移動(dòng)。
4.空間可以回收
b只能存放單獨(dú)的文件數(shù)據(jù),ibdata可以存放多的數(shù)據(jù)相當(dāng)一個(gè)共享文件夾

查看當(dāng)前的數(shù)據(jù)庫(kù)的表空間:

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

on代表獨(dú)立表空間;off代表共享表空間

那么修改下主配置文件來(lái)開(kāi)啟共享表空間

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

可以先 du -h ibdata1 查看下

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能

登錄mysql執(zhí)行mysql> show variables like '%innodb_file_per_table%';

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

這時(shí)新建的表就會(huì)使用共享表空間了。

創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)testdb并新建一個(gè)表

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

 

drop procedure  if exists test;  =====> 刪除之前存在的文件

create  procedure  test() ========> 創(chuàng)建test文件

begin  ================>開(kāi)始

declare i int;=========>  通告i的類(lèi)型

set  i=1  ======>  i的數(shù)值等于1

while  i < 100000 do =====> i的值如果小于100000

insert  into  lxf.ttt(id) values (i); =======>插入數(shù)據(jù)變量為i

set i = i +1 ========>  每執(zhí)行一次之后i的值加1直到為99999

end while ======>循環(huán)結(jié)束

end &&結(jié)束

調(diào)用存儲(chǔ)過(guò)程:

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

查看標(biāo)的行數(shù)

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

查看表在表空間占用情況:

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

Replication相關(guān)文件:

1)master.info 文件:

master.info 文件存在于Slave 端的數(shù)據(jù)目錄下,里面存放了該Slave 的Master 端的相關(guān)信息,包括Master 的主機(jī)地址,連接用戶(hù),連接密碼,連接端口,當(dāng)前日志位置,已經(jīng)讀取到的日志位置等信息。

 

2)relay log 和relay log index

mysql-relay-bin.xxxxxn文件用于存放Slave 端的I/O 線(xiàn)程從Master 端所讀取到的Binary Log 信息,然后由Slave 端的SQL 線(xiàn)程從該relay log 中讀取并解析相應(yīng)的日志信息,轉(zhuǎn)化成Master 所執(zhí)行的SQL 語(yǔ)句,然后在Slave 端應(yīng)用。

mysql-relay-bin.index文件的功能類(lèi)似于mysql-bin.index,同樣是記錄日志的存放位置的絕對(duì)路徑,只不過(guò)他所記錄的不是Binary Log,而是Relay Log。

3)relay-log.info 文件:

類(lèi)似于master.info,它存放通過(guò)Slave 的I/O 線(xiàn)程寫(xiě)入到本地的relay log 的相關(guān)信

息。供Slave 端的SQL 線(xiàn)程以及某些管理操作隨時(shí)能夠獲取當(dāng)前復(fù)制的相關(guān)信息。

 

其他文件:

1)system config file

MySQL 的系統(tǒng)配置文件一般都是my.cnf,默認(rèn)存放在"/etc"目錄下,my.cnf文件中包含多種參數(shù)選項(xiàng)組(group),每一種參數(shù)組都通過(guò)中括號(hào)給定了固定的組名,如“[mysqld]”組中包括了mysqld服務(wù)啟動(dòng)時(shí)候的初始化參數(shù),“[client]”組中包含著客戶(hù)端工具程序可以讀取的參數(shù)。

2)pid file

pid file 是mysqld應(yīng)用程序環(huán)境下的一個(gè)進(jìn)程文件存放自己的pid號(hào)

3)socket file

socket 文件也是在Unix/Linux 環(huán)境下才有的,用戶(hù)在Unix/Linux 環(huán)境下客戶(hù)端連接可以不通過(guò)TCP/IP 網(wǎng)絡(luò)而直接使用Unix Socket 來(lái)連接MySQL。

mysql有兩種連接方式,常用的一般是tcp
mysql–hmysql主機(jī)ip -uroot -pxxx(可以遠(yuǎn)程連接,但是速度稍慢)
mysql-S /path/mysql.sock (只能試用與本地連接,但速度快)

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能 

以上關(guān)于mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能詳細(xì)內(nèi)容,對(duì)大家有幫助嗎?如果想要了解更多相關(guān),可以繼續(xù)關(guān)注我們的行業(yè)資訊板塊。

分享標(biāo)題:mysql數(shù)據(jù)庫(kù)的特性以及參數(shù)性能
本文URL:http://bm7419.com/article34/igospe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、標(biāo)簽優(yōu)化、全網(wǎng)營(yíng)銷(xiāo)推廣關(guān)鍵詞優(yōu)化、動(dòng)態(tài)網(wǎng)站、網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站