mysql是數(shù)據(jù)庫系統(tǒng),它的文件是不需要用戶顯式去管理的,是由數(shù)據(jù)庫管理程序來管理,所以都是自動保存文件,而不需要手動完成,用戶從安全和數(shù)據(jù)一致性的角度來說,也不需要來管理和保存文件。
創(chuàng)新互聯(lián)專注于云陽網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供云陽營銷型網(wǎng)站建設,云陽網(wǎng)站制作、云陽網(wǎng)頁設計、云陽網(wǎng)站官網(wǎng)定制、成都小程序開發(fā)服務,打造云陽網(wǎng)絡公司原創(chuàng)品牌,更為您提供云陽網(wǎng)站排名全網(wǎng)營銷落地服務。
1.當我們請求mysql服務器的時候,MySQL前端會有一個監(jiān)聽,請求到了之后,服務器得到相關的SQL語句,執(zhí)行之前(虛線部分為執(zhí)行),還會做權限的判斷
2.通過權限之后,SQL就到MySQL內(nèi)部,他會在查詢緩存中,看該SQL有沒有執(zhí)行過,如果有查詢過,則把緩存結果返回,說明在MySQL內(nèi)部,也有一個查詢緩存.但是這個查詢緩存,默認是不開啟的,這個查詢緩存,和我們的Hibernate,Mybatis的查詢緩存是一樣的,因為查詢緩存要求SQL和參數(shù)都要一樣,所以這個命中率是非常低的(沒什么卵用的意思)。
3.如果我們沒有開啟查詢緩存,或者緩存中沒有找到對應的結果,那么就到了解析器,解析器主要對SQL語法進行解析
4.解析結束后就變成一顆解析樹,這個解析樹其實在Hibernate里面也是有的,大家回憶一下,在以前做過Hibernate項目的時候,是不是有個一個antlr.jar。這個就是專門做語法解析的工具.因為在Hibernate里面有HQL,它就是通過這個工具轉換成SQL的,我們編程語言之所以有很多規(guī)范、語法,其實就是為了便于這個解析器解析,這個學過編譯原理的應該知道.
5.得到解析樹之后,不能馬上執(zhí)行,這還需要對這棵樹進行預處理,也就是說,這棵樹,我沒有經(jīng)過任何優(yōu)化的樹,預處理器會這這棵樹進行一些預處理,比如常量放在什么地方,如果有計算的東西,把計算的結果算出來等等...
6.預處理完畢之后,此時得到一棵比較規(guī)范的樹,這棵樹就是要拿去馬上做執(zhí)行的樹,比起之前的那棵樹,這棵得到了一些優(yōu)化
7.查詢優(yōu)化器,是MySQL里面最關鍵的東西,我們寫任何一條SQL,比如SELECT * FROM USER WHERE USERNAME = toby AND PASSWORD = 1,它會怎么去執(zhí)行?它是先執(zhí)行username = toby還是password = 1?每一條SQL的執(zhí)行順序查詢優(yōu)化器就是根據(jù)MySQL對數(shù)據(jù)統(tǒng)計表的一些信息,比如索引,比如表一共有多少數(shù)據(jù),MySQL都是有緩存起來的,在真正執(zhí)行SQL之前,他會根據(jù)自己的這些數(shù)據(jù),進行一個綜合的判定,判斷這一次在多種執(zhí)行方式里面,到底選哪一種執(zhí)行方式,可能運行的最快.這一步是MySQL性能中,最關鍵的核心點,也是我們的優(yōu)化原則.我們平時所講的優(yōu)化SQL,其實說白了,就是想讓查詢優(yōu)化器,按照我們的想法,幫我們選擇最優(yōu)的執(zhí)行方案,因為我們比MySQL更懂我們的數(shù)據(jù).MySQL看數(shù)據(jù),僅僅只是自己收集到的信息,這些信息可能是不準確的,MySQL根據(jù)這些信息選了一個它自認為最優(yōu)的方案,但是這個方案可能和我們想象的不一樣.
8.這里的查詢執(zhí)行計劃,也就是MySQL查詢中的執(zhí)行計劃,比如要先執(zhí)行username = toby還是password = 1
9.這個執(zhí)行計劃會傳給查詢執(zhí)行引擎,執(zhí)行引擎選擇存儲引擎來執(zhí)行這一份傳過來的計劃,到磁盤中的文件中去查詢,這個時候重點來了,影響這個查詢性能最根本的原因是什么?就是硬盤的機械運動,也就是我們平時熟悉的IO,所以一條查詢語句是快還是慢,就是根據(jù)這個時間的IO來確定的.那怎么執(zhí)行IO又是什么來確定的?就是傳過來的這一份執(zhí)行計劃.(優(yōu)化就是制定一個我們認為最快的執(zhí)行方案,最節(jié)省IO,和執(zhí)行最快)
10.如果開了查詢緩存,則返回結果給客戶端,并且查詢緩存也放一份。
只復制data下的數(shù)據(jù)庫目錄是不行的,mysql是靠data目錄下ibdata1文件來進行來數(shù)據(jù)庫的管理的
一般的數(shù)據(jù)備份用 :mysql路徑+bin/mysqldump -u 用戶名 -p 數(shù)據(jù)庫名 導出的文件名
數(shù)據(jù)還原是:到mysql命令行下面,用:source ? 文件名;的方法。
但是這種方法對大數(shù)據(jù)量的表進行操作就非常慢。因為他不僅導出了數(shù)據(jù)還導出了表結構。
在針對大數(shù)據(jù)量的表時,我們可以用infile和 outfile來操作。
outfile導出數(shù)據(jù)庫數(shù)據(jù)的用法:
下圖我們可以看到6百多萬數(shù)據(jù)35秒就搞定了:
下面我們看看infile的語法:
在infile導入數(shù)據(jù)的時候,我們還可以做一些優(yōu)化。我們可以用
alter table table_name disable keys ? 關閉普通索引。等數(shù)據(jù)導入玩,再用:
alter table table_name enable keys ? ?來開啟普通索引。這樣就不會邊導入數(shù)據(jù),邊整理索引的二叉樹兒影響導數(shù)據(jù)的效率。
如果可以保證 數(shù)據(jù)的正確性,我們可以將表的唯一索引也關閉,之后再開啟,不是每條數(shù)據(jù)就算是唯一的他都要去檢測一遍。命令:
set unique_checks=0;?#關閉唯一校驗
set unique_checks=1;#開啟唯一校驗
如果是InnoDB存儲引擎,我們還可以set auto commit=0;關閉自動提交,來提高效率。InnoDB是按主鍵的順序保存的,我們將其主鍵順序排列也可以提高效率。
下面我們對myisam引擎的表做個測試,我們先不關索引,導入數(shù)據(jù)(用了近4分鐘):
然后我們先把索引關閉試試(只用了一分鐘多一點,快了不少啊!摸摸大!):
來源:知乎
河南-老宋(志強)
問題描述的不是非常的清晰
使用mysqldump備份時一般會會加上--single-transaction參數(shù),這里假設你是加了這個參數(shù)。
一 加速備份
1 加了single-transaction參數(shù) 備份時 需要先flush table with read lock 這個過程中會有一個鎖表的過程,如果有事務或語句正在執(zhí)行,沒有結束,那么備份進程會一直等待,并且阻塞別的事務,那么也會影響業(yè)務。所以要先確認備份的時候沒有大的事務在運行。
具體 single-transaction的加鎖可以參考 我的博客:mysqldump備份時加single-transaction會不會加鎖
2 mysqldump是單進程的,沒有辦法并行,但現(xiàn)在機器的瓶頸多是出現(xiàn)在IO方面,可以使用更了的IO設備加快速度
3 mysqldump時如果空間夠的話,不要邊壓縮邊備份
二 加速恢復
1 關閉binlog:不寫入Binlog會大大的加快數(shù)據(jù)導入的速度
2 innodb_flush_log_at_trx_commit=0
3 更好的配置
建議:
一 如果非要使用邏輯備份,可以考慮mysqldumper, mysqlpump(5.7)這兩個工具去備份,這兩個在備份的時候支持并行操作,mysqldumper還可以對單表進行恢復,在只需要恢復單表的情況下,恢復速度會大大加快
二 使用物理備份 xtrabackup (open source),MEB(oracle提供,收費): 他們的備份原理是基于mysql crash recover, 備份速度 是和邏輯備份的相差不太大。但是恢復速度卻有很大的提升。
邏輯備份 備出來的是sql語句文件,恢復時需要一條一條的執(zhí)行sql,所以恢復很慢。
而物理備份和還原的速度 相當于直接copy文件,所以恢復的時候性能有很大的提升
并且這兩個軟件還支持并行,效果更好。
邏輯備份最大的優(yōu)點是 備份好的文件經(jīng)壓縮后占用空間較小,最大缺點恢復太慢
物理備份可以很快的恢復,但是備份好的文件壓縮后占用空間比邏輯備份要大。
使用云,你做為用戶可以不用考慮這些事情。
附:xtrabackup的并行參數(shù)
Parallel local backups
Parallel compression
Parallel encryption
Parallel apply-log
Gary Chen
《MySQL DBA修煉之道》作者。從事數(shù)據(jù)庫領域10多年。
1.一般來說,你只有靠更好的硬件. 軟件沒有大的變動的情況下不可能突破硬件瓶頸;
2. mysqldump默認的導出選項已經(jīng)可以了,單進程的工具不要期望太多,TommyChiu介紹的工具可試試.;
3. 導出的時候觀察下系統(tǒng),如果是cpu瓶頸,你基本無解.如果是swap問題,看是否是因為內(nèi)存不夠;
4. 恢復的時候主要是一個參數(shù):innodb_flush_log_at_trx_commit=2
TommyChiu
mk-parallel-dump 試試
網(wǎng)站欄目:mysql怎么保存最快 mysql怎么保存數(shù)據(jù)
URL分享:http://chinadenli.net/article32/hgoisc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供虛擬主機、移動網(wǎng)站建設、微信公眾號、微信小程序、小程序開發(fā)、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)