『壹』 如何把3DMAX文件變為MDL格式的工具啊
格式轉換器
『貳』 你好,這次來是想求.mdl格式文件的打開軟體,不好意思,知識太貧酸了,沒有積分了
千千靜聽或WINAMP就可以打開
數字化樂器介面
我們如今的MIDI音樂製作全都要靠這個介面,在這個介面之間傳送的信息也就叫MIDI信息。 MIDI最早是應用在電子合成器——一種用鍵盤演奏的電子樂器上,由於早期的電子合成器的技術規范不統一,不同的合成器的鏈接很困難,在1983年8月,YAMAHA、ROLAND、KAWAI等著名的電子樂器製造廠商聯合指定了統一的數字化樂器介面規范,這就是MIDI1.0技術規范。此後,各種電子合成器以及電子琴等電子樂器都採用了這個統一的規范,這樣,各種電子樂器就可以互相鏈接起來,傳達MIDI信息,形成一個真正的合成音樂演奏系統。
由於多媒體計算機技術的迅速發展,計算機對數字信號的強大的處腔升理能力,使得計算機處理MIDI信息成為順理成章的事情了,所以,現在不少人把MIDI音樂稱之為電腦音樂。事實上,利用多媒體計算機不但可以播放、創作和實時地演奏MIDI音樂。甚至可以把MIDI音樂轉變成看的見的樂譜(五線譜或簡譜)列印出來,反之,也可以把樂譜變成美妙的音樂。利用MIDI的這個性質,可以用於音樂教學(尤其是識譜),讓學生利用計算機學習音樂知識和創作音樂。
文件性質
所謂MIDI文件實質上是指計算機中記錄的MIDI信息的數據,MID文件的擴展名是*.mid。它和另外一種計算機中常用的聲音波形文件(*.wav文件)有什麼不同呢?表面上,兩種文件都可以產生聲響效果或音樂,但它們的本質是完全不同的。普通的聲音文件(*.wav文件)是計算機直接把聲音信號的模擬信號經過取樣——量化處理,變成與聲音波形對應的數字信號,記錄在計算機的儲存介質(硬碟或光碟)中。通常,聲音文件都比較大,如記錄一分鍾的聲音(立體聲、CD音質),大概需要10.5M的儲存空間。一首幾分鍾的歌曲需要幾十兆的硬碟,一張CD光碟只能容納十來首歌曲。為了減少聲音文件儲存的空間,近年來在計算機技術上採用了壓縮技術,把聲音文件經過處理,在不太影像播放質量的前提下,把文件的大小壓縮到原來的10~12分之一,這就是近年流行的MP3文件格式。而MIDI文件則不是直接記錄樂器的發音,而是記錄了演奏樂器的各種信息或指令,如用哪一種樂器,什麼時候按某個鍵,力度怎麼樣等等,至於播放時發出的聲音,那是通過播放軟體或者音源的轉換而成的。因此MIDI文件通常比聲音文件小得多,一首樂曲,只有十幾K或幾十K,只有聲音文
件的千分之一左右,便於儲存和攜帶。
解析
可以把MIDI理解成是一種協議、一種標准、或是一種技術,但不要把它看作是某個硬體設備。
當然硬體也是MIDI的媒體。還是先從它的硬體將講起吧,MIDI不是首先出現在計算機裡面的,它是由電子樂器生產廠家為了不同型號的電子猛陪樂器的「交流」而產生的,由於它採用的是數字化技術,當然自然而然的很容易的與計算機掛上了關系。所以伍知老我們要講MIDI樂器的介面,有三種,MIDI OUT、MIDI IN、MIDI THRU。這些可以在你家裡的MIDI樂器或帶有MIDI的電子琴(現在的很多電子琴上都有MIDI介面)上找到的。MIDI OUT是將樂器中的數據(MIDI消息)向外發送;MIDI IN就是接收數據啦;至於MIDI THRU嘛,是將收到的數據再傳給另一個MIDI樂器或設備,可以說是若干個樂器連接的介面。可以這樣說,MIDI所描述的是將MIDI樂器彈奏出的音變成01010一樣的數據輸出,也可以將計算機中的軟體將要表示的音變成01010的二進制數據通過音效卡輸出,或者接收一些01010的數據進行處理。以下對這個問題談一談。
MIDI(midi)音樂是一個很復雜的東西,如果它很簡單,那麼它可能就不美妙了。用人的方式,比如用五線譜來描述就已經讓人望塵莫及了,何況把它變成了一些數字信號呢。然而,就有那麼一幫傻子對數字感興趣,就是可以讓你用方便的工具很容易的把復雜的音樂描述出來,中國的傻子們還不夠努力,在我所見到的中文MIDI製作軟體還沒有一個稍微稱得上專業式的,也沒有真正傻瓜式的。其實傻子也不好當,你既要精通音樂,又要有很好的軟體開發經驗,要深入了解MIDI。言歸正傳,看看音樂家是如何描述音樂的吧。音樂家在彈鋼琴的時候,當他按下琴鍵的時候發出聲音,松下琴鍵的時候停止這個音,這個音的高低是可以用數字表示的,按下與送開琴鍵可以用一個標志來表示,當然還有顫音、滑音、這個音的強度、這個音在我的什麼位置(是靠近我的左耳還是右耳發音)等等一系列復雜的信息都是可以用數字來表示的,至於具體發音是由音源來處理了,它可以固化在音效卡里(看你的音效卡怎麼樣了),這還不是最復雜的地方,當幾種樂器同時發音的時候,我們就要有處理的方法,這就有通道(Channel)的概念了,在一個通道里可以用一種樂器,在另一個通道可以用另一種樂器,將兩個通道同步演奏,你就可以聽到兩種樂器的演奏了,在一個通道內部的一個樂器可以同時發幾個音,組成一個和弦很容易的了。通常一個標準的MIDI有16個通道,GM標准里的第10通道是專為打擊樂設定的。
早期的MIDI設備除了都能接受MIDI信號之外沒有統一的標准,尤其是在音色排列的方式上更是「隨心所欲」的。也就是說您在這台琴上製作完成的音樂拿到另一台不同型號的琴上播放時會變得面目全非,小提琴可能會變成小號,長笛可能會變成吉他,鋼琴可能會變成大鼓……這對於專業音樂人士的工作並不會產生太大的影響,畢竟他們製作一次灌成唱片也就完事兒了,但是對於音樂愛好者之間的交流,尤其是多媒體的發展卻極為不利。
於是著名的日本ROLAND公司於1990年制定出它稱之為GS的標准。GS標準是在ROLAND的早期產品MT-32和CM-32/64的基礎之上,規定了MIDI設備的最大同時發音數不得少於24個、鼓鑔等打擊樂器作為一組單獨排列、128種樂器音色有統一的排列方式等。在這幾項規定中,最重要的就是這128種音色的統一排列方式。有了這種排列方式,只要是在支持GS標準的設備上製作的音樂,拿到任何一台支持同樣標準的設備上都能正常播放。
GS標準的制定本來是一件天大的好事,它使得全世界的電子樂器有了一個「全方位接觸」的機會。可是,也許是由於這個標准真的是過於復雜,更可能是由於眾多的MIDI設備製造商不願意形成ROLAND的獨霸世界標準的局面,總之最後世界各國的MIDI設備製造商並沒有全盤接受這個標准,而是將之稍作改變,泡製出了一個GM標准。
GM標準的全稱應該是「通用MIDI標准系統第一級」(General MIDI system Level1),這個標准制定於1991年,在GS標准基礎上,主要規定了音色排列、同時發音數和鼓組的鍵位,而把GS標准中重要的音色編輯和音色選擇部分去掉了。GM的音色排列方式基本上沿襲了GS標准,只是在名稱上進行了無關痛癢的修改,如把GS的Piano 1改名為Acoustic Grand Piano等。
雖然GM標准不如GS那樣功能強大,但是它畢竟是世界第一種通用的MIDI樂器排列的標准,而且正因為它將ROLAND GS標准作了簡化,也使得更多的MIDI設備廠商可以製造符合此標準的MIDI設備。所以GM標准剛一制定,就得到了MIDI廠商,尤其是多媒體設備廠商的熱烈響應。此後,各大MIDI廠商的設備紛紛被敲上GM的標制,MIDI設備之間實現了比以往更深層次的交流,為多媒體時代的真正到來作好了准備。對於現在的MIDI設備,GM標準是最基本的了。
另一個MIDI巨頭YAMAHA也不甘示弱,他當然不甘於這樣一個要求很低的標准,所以YAMAHA於1994年9月提出了自己的音源標准--XG。XG同樣在兼容GM的基礎上做了大幅度的擴展,如加入了「音色編輯」的功能,使得作曲家可以在MIDI樂曲中實時地改變樂器的音色;還加入了「音色選擇」功能,在每一個XG音色上可以疊加若干種音色。
所以我們目前常見的MIDI標准由GM、GS、XG,它們之間競爭還會繼續,當然這指的是GS與XG。
發展歷程
八十年代初,電腦音樂迎來了第一個真正的繁榮時期,同時也迎來了一個難以解決的問題,那就是各種電子樂器之間的通訊問題:各生產廠家都按照自己的規格生產電子樂器,當您單獨使用某一廠家的產品時,您還不會遇到什麼問題,可是當您同時使用幾家公司的設備構成一個電腦音樂系統的時候,麻煩就來了,您怎麼能使一台美國E-MU的音源發出您在日本ROLAND鍵盤上彈奏的一個標准A呢?
為了解決電子樂器的通訊問題,1982年,國際樂器製造者協會的十幾家廠商(其中主要是美國和日本的廠商)會聚一堂,各抒己見。會議通過了美國Sequential Circuits公司的大衛.史密斯提出的「通用合成器介面」的方案,並改名為「音樂設備數字介面」,即「Musical Instrument Digital Interface」縮寫為「MIDI」,公布於世。1983年,MIDI協議 1.0版正式制定出來。此後,所有的商業用電子樂器的背後都出現了幾個五孔的MIDI插座,樂器之間不再存在「語言障礙」,它們同裝上MIDI介面的電腦一起,構成了一個更加繁榮昌盛的電腦音樂大家庭。
實際上, MIDI 本身只是MusicalInstrument Digital Interface 的縮寫,意思是音樂設備數字介面。這種介面技術的作用就是使電子樂器與電子樂器,電子樂器與電腦之間通過一種通用的通訊協議進行通訊,這種協議自然就是MIDI協議了。
對於搞計算機的人來說,不妨把MIDI理解成一種區域網,網路的各個部分通過專用的串列電纜(MIDI線)連接,並以 31.25 KBPS 的速度傳送著數字音樂信息。
MIDI 標准制定以後,開始只是在專業的電腦音樂圈兒里受到重視,但是隨著電子技術的不斷發展,尤其是近幾年多媒體技術的突飛猛進,MIDI 作為多媒的一個重要組成部分,被炒得沸沸揚揚,幾乎達到了婦孺皆知的地步。而大家也已經把這種介面技術當作了電腦音樂的代名詞,常有「做MIDI」,「玩兒MIDI」的說法,使一些正統的「電腦音樂人」 覺得莫名其妙, 啼笑皆非。
因此,我們倒不妨將MIDI劃分為「狹義MIDI」和「廣義MIDI」兩種概念,狹義MIDI就是上面所說的音樂設備數字介面,而廣義MIDI則是大家已經約定俗成的整個電腦音樂的統稱,這樣即不會造成概念上的進一步混亂,也不會使得MIDI一詞失去其本質的含義。
1985年11月,國際樂器製造者協會公布了《MIDI 1.0版的細節規定》(2.0版至今仍在制定中),重新定義了一些控制器號碼。此外,為保證MIDI的健康發展,還專門成立了「MIDI廠商協會」和「日本MIDI標准委員會」等組織,MIDI標准從成長階段步入了成熟階段。
MIDI標準的成熟使各電子樂器生產廠商更加信心百倍,它們絞盡腦汁、挖空心思,以空前的熱情生產出各種電子樂器,有鍵盤式的(合成器、主控鍵盤)、的(MIDI吉他)、敲擊式的(鼓機)甚至還有吹奏式的(呼吸控制器),除此之外,還有五花八門的各種音源模塊(就是把沒有鍵盤的電子合成器)供人選購。
關於MIDI軟體
MIDI由微軟公司和IBM共同開發的PC標准聲音格式。MIDI軟體有多種類型,有MIDI播放軟體、演奏軟體和創作軟體幾類。通常,大多數的媒體播放器都可以播放MIDI音樂,如WINDOWS95的媒體播放器(Windows Media Player)就可以播放MIDI,而且通常是系統的默認播放器,這類播放器在使用中不能對MIDI音樂的參數進行調節。除了媒體播放器以外,MIDI演奏軟體和創作軟體都可以作為MIDI的播放器使用,這些軟體在播放MIDI音樂時,還可以選擇不同的音源(波表)播放方式,以獲得最佳的播放效果,而且還可以改變MIDI的參數產生出新的播放效果,如改變播放速度、改變樂器音色(如把鋼琴演奏小提琴演奏)、升降調等,大部分軟體還可以顯示MIDI音樂所對應的樂譜(五線譜或簡譜)甚至歌詞內容等信息,還可以把樂譜列印出來。
音樂製作軟體
1、軟體合成器
軟體合成器,俗稱軟波表,是我們這些窮人唯一的選擇。話雖這么說,但是實際上很多專業音樂製作也脫離不了軟體合成器,當然,不會是Yamaha S-YXG100或VSC88那樣的玩具,也不是VA合成器那種同時只能發一個音的廢物。專業的軟體合成器要求的是沒有延遲,可以無限擴展的音色庫。我聽過很多人的MIDI作品,說實話,他們的東西實在少了那一份靈性,音色乾巴巴的讓人一聽就覺得難受,不知道是什麼音效卡上的爛波表還是電子琴弄出來的。這些人大概只知道General MIDI 的128種音色。真正的電腦音樂,要讓人聽不出來它是用電腦做的。我可以去做Urban R&B, Metal, Country, Jazz, Folk, Electric, Alternative,但絕對不能讓人說這是ComputerMusic。
2、 Gigasampler
有人說Gigasampler的出現足可以端掉一大堆音源生產廠家的飯碗。雖然有點言過其實,但當你手邊放著數張Gigasampler音色庫光碟時,你絕對不會再想聽近萬元的電子琴的自帶音色。PII以上電腦,一塊支持ASIO驅動的音效卡,一個帶力度的MIDI鍵盤,加上Gigasampler的完美演出,Cubase/Cakewalk的傑出創作,你就獲得了一套價值數萬元的個人電腦音樂製作系統。
Gigasampler的主要特點是使用硬碟載入數Gbytes的音色庫。在正式版光碟中,自帶了一個1G的鋼琴音色庫。也就是說,「人有多大膽,地有多高產」,你所要做的只是不斷購買新的音色光碟喂給它就行了。當然,由於要讀這么大的音色庫,一塊7200轉的硬碟還是少不了的,Raid系統的話就會更好一些。不然漫長的等待是很煩人的。
GigaSampler的基本思路是擺脫小容量RAM方式的限制,我們現在可以徹底採取一些全新的思路做采樣,每一件樂器的音色都不可能是「靜止」的,而這恰恰是傳統采樣設備的致命之處。GigaSampler採用的Dimensions技術(最大可到5維)可以動態地「勾畫」出一個音色該有的種種活力,從而避免了這一數年來始終懸而未決的弊端。以小軍鼓(Snare Drum)音色為例,即使在同一小軍鼓上,小軍鼓的音色都會由於演奏技巧、鼓棒與鼓皮接觸位置、角度、鼓棒深入鼓面的長度、力度等諸多音素影響而表現出豐富的色彩,這也正是樂器的生命。Dimensions技術也由此而來。通過Dimensions,可以描繪出一件樂器夢幻般的表現力和個性,並且所有的這些還可以被反復「篡改」。 GigaSampler力圖展示的是一個真實與完美充分融合的采樣音色世界。
3、 Reality
很羨慕SBLive!嗎?Soundfont 的技術讓SBLive!的MIDI回放效果看起來永無止境。但是Reality讓這一切在普通音效卡上成為了現實,Reality支持Soundfont 2.0,可以在90塊錢的爛音效卡上放出和SBLive!一樣的效果。網上有那麼多的,下載幾款試試吧!我見過的最大的只有70多兆,3個小時就下載完了(56K)。畢竟GigaSampler的音色光碟國內很少能買的到的。而且Gbytes…你下載的起嗎?如果說Gigasampler里的航空母艦的話,Reality就是用商船改造的炮艦,真正的窮人的選擇。有人用過Reality後就說SBLive!根本是在騙錢,可是他沒想過SBLive!上先進的技術,不可思議的信噪比,數碼輸出,EAX,又怎麼是一款小小的軟體可以做出來的呢?Reality給我們一個使用Soundfont的機會,但是它不能代替一塊半專業的音效卡。
MIDI音序軟體
1. Anvil Studio
說實話,Anvil Studio實在不能算作一個專業的音序軟體。它本身是免費的,但是如果想使用那些專業功能你就必須要支出99美金了。不過它的編輯功能實在不賴,比Cakewalk還好用。而且這個軟體只有2,相比之下,國產的那些什麼作曲大師之類的東西真是垃圾。Anvil Studio的升級速度極快,一年以前的版本和現在真的差了十萬八千里。而且它默認你的PC鍵盤就是輸入設備,這簡直是太方便了。初學者用它比較好。
2. Cakewalk
最終我還是不能不說Cakewalk。這個東西的影響力實在是太大了。當初我用Cakewalk 3.0時就已經徹底的投降了。不過這么多年,Cakewalk似乎除了版本號以外基本功能改變並不是很大。Cakewalk正在發展它的錄音和音頻處理能力,但是相距Cubase來說還差得很遠。Cakewalk 8.0以前的版本中有Virtual Piano,但是現在9.0中沒有了,不知是不是因為盜版盜的不好的原因。不過Pro Audio 9中多了一個可以直接輸吉他和弦的方式,可算有所創新。
3. Cubase VST
Cubase VST是Steinberg公司的得意作品。有PC 和MAC兩種版本。Steinberg公司定義了ASIO驅動模式,使得Cubase與音源之間的通信延遲降低到了10ms左右。Cubase與Cakewalk相比,其音軌處理能力要強大的多。MIDI製作方面不分伯仲,但是一般人用慣了Cakewalk,我只能說蘿卜白菜,各有所愛了。Cubase 還有一個兄弟,叫Cubasis VST,主要做後期處理和錄音的。
Cubase VST的最新版本是5.0,可以去它的網站上下載一個DEMO版來試試。這個版本不能存檔,但是可以導入導出MIDI文件,所以並不影響一般使用。把Cakewalk中的虛擬鋼琴作為MIDI輸入,你就可以開始體驗Cubase VST 5.0的威力了。
另類MIDI軟體
Guitar Pro
Guitar Pro 是個吉他專用音序器及譜面列印軟體。提供的音序器軌道數8軌,具備了音序器的絕大多數功能。Cakewalk Pro Audio 9中的吉他輸入與它比起來真是小巫見大巫。Guitar Pro對吉他演奏技巧的詮釋,使你只需點一下它的演奏技巧按鈕,它就會使原本呆板的MIDI變得較有人性化(如果用好的音源,效果將非常逼真)。它對於一個想製作MIDI但又不知從何入手的吉他手來說無疑是個好助手,而對於專業MIDI製作者來說也是個吉他聲部極佳的輔助軟體,因為它可以將製作好的文件轉換成標准MIDI文件。Guitar Pro的樂譜列印輸出也做得非常好。
采樣軟體
采樣軟體使得我們可以使用無限的音色。甚至於馬桶你都可以把它采樣進你的音色庫。當然,采樣的效果有好有壞,這就要看你的采樣源的聲音質量、你的錄入設備質量等等了。但是,一個好的采樣軟體可以把工作變得更簡單一些。
160
這也是出Gigasampler的公司的作品。說實話這個軟體已經很難用普通的「采樣軟體」來衡量了。正如它的名字,簡直是一間音樂工作室。它包含了GigaSampler的所有功能,但讀取音色庫文件的速度是GigaSampler的5倍。共有 96/160兩種版本。GigaStudio支持64個MIDI通道(一般人只聽說過16個),160復音,延遲在3-10ms之間。提供多種控制器和DSP處理效果。可以直接將所有效果錄製成WAVE文件(WYHIWYG),支持24Bit/96Khz硬體采樣。32個音頻通道,支持DirectSound。采樣出來的音色庫可以轉換為各種格式,包括SoundFont。用這個玩意兒我把跳舞機里的Wave歌曲都做成了一個一個音色,結果Cakewalk里做的MIDI聽起來就像DJ在混音。當然,正確的設置是十分必要的,不然它根本不出聲。在我的機器上(PIII 500 256M RAM SB Live!)按鍵時真的感覺不到一點延遲。根本不象軟音源。NemeSys推薦使用PIII800或K7,256兆以上內存,UDMA66/UWSCSI-2的6.4G空餘硬碟,GSIF標准音效卡。聽起來和天書差不多。
Windows 2000 與軟波表
Windows 2000的最大毛病就是和軟波表有點水火不容。剛才介紹的專門用來製作音樂的兩款軟體合成器就根本不能安裝。軟波表大部分都是For Win9x的。目前,只有Yamaha S-YXG50 for Windows 和 Roland VSC-88 3.x可以在Windows2000上用。GigaStudio的2000版還在製作中。另外Windows 2000也不支持APS音效卡。Windows 2000默認的實際上是Microsoft GSWavetableSW Synth,是一種支持DLS音色庫的格式。可是很可惜,DLS最大隻有8兆(自帶),而且目前做這種音色庫的專業公司幾乎沒有。所以Windows 2000絕對不是可以用來製作音樂的好平台。
『叄』 MySQL 常用備份工具流程解析
下面我們就看一下常見的備份工具,以及目前最流行的 Percona XtraBackup 的備份流程。
MySQL 常見的備份工具主要分為三種:
這里先說一下 binlog 備份,它只是把 binlog 又復制了一份,並且需要在邏輯備份或者物理備份的基礎上才能進行數據恢復,無法單獨進行數據恢復。
mysqlmp 備份出的文件就是 sql 文件,其核心就是對每個表執行 select ,然後轉化成相應的 insert 語句。mysqlmp 的備份流程大致如下:
從上面可以看出在 mysqlmp 備份期間,備份到某個資料庫時,該資料庫下的表都會處於只讀狀態,無法對表進行任何變更,直到該庫下的表備份完畢,這對於線上環境一般是無法接受的。若是指定了--master-data或者 --mp-slave 則會在備份開始時加全局讀鎖(FLUSH TABLES WITH READ LOCK),直到備份結束。當然我們可以選一個從庫進行備份,這樣就不會影響線上業務散巧鏈。另外使用 mysqlmp 備份還有一個最大的好處,因為備份出來的是 sql 語句,所以它支持跨平台和跨版本的數據遷移或者恢復,這是物理備份無法做到的。
但是也正是因為 mysqlmp 備份出來的是 sql 語句,在使用時要更加註意,否則可能會釀成大禍。例如,使用 mysqlmp 常見的問題有:
所以使用 mysqlmp 時一定要了解各個選項的作用,以及確認備份出來的 sql 文件里會有什麼操作,會對現有數據造成什麼影響。
Mymper 原理與 Mysqlmp 原理類似,最大的區別是引入了多線程備份,沖孫每個備份線程備份一部分表,當然並發粒度可以到行級,達到多線程備份的目的。這里不再單獨介紹。
Percona XtraBackup 是 Percona 公司開發的一個用於 MySQL 資料庫物理熱備的備份工具,是基於 InnoDB 的崩潰恢復功能來實現的。它的基本工作原理如下:
Percona XtraBackup 在進行恢復時會應用拷貝的 redo log ,應用已提交的事務,回滾未提交的事物,將資料庫恢復到一致性狀態。因為 Percona XtraBackup 備份出來的是物理文件,所以在使用備份出的文件進行恢復或者遷移時,不會像 mysqlmp 那樣會存在很多問題。
使用 XtraBackup 備份時根據備份參數設置不同,對資料庫的變更會造成不同程度的影響,具體影響會在下文分析。
通過對比發現,XtraBackup 具有對資料庫影響小,且能快速恢復的優點,在日常備份中是首選;mysqlmp 使用相對更加靈活,但是使用是要注意對資料庫原有數據的影響。
備份策略主要有:全量備份和增量備份,再加上 binlog 備份。
目前去哪兒網資料庫備份主要採用 XtraBackup 全量備份 +binlog 備份。資料庫的重要級別不同,全量備份的頻率不同。備份程序主要架構如下:
說明:
Percona XtraBackup 是目前備份 MySQL 使用最廣泛的工具。在備份過程中,資料庫可以進行正常的讀寫或者其他變更操作,但是偶爾也會遇見備份引起的元數據鎖,或提交事務時發現被 binlog lock 阻塞等情況。下面我們就看一下 Percona XtraBackup 的備份流程和加鎖時機。
說明:以下對 Percona XtraBackup 的分析都是基於 2.4.23 的版本,其他版本會略有差別,但是關鍵步驟基本相同。
XtraBackup 在備份開始時,會創建一個後寬運台線程,專門用於拷貝資料庫的 redo log 。首先 XtraBackup 會掃描每組 redo log 的頭部,找出當前的 checkpoint lsn ,然後從該 lsn 後順序拷貝所有的 redo log ,包括後續新產生的 redo log 。該線程會一直持續到將非事務表完全拷貝完成,才會安全退出。備份日誌輸出中會記錄拷貝開始時的 checkpoint lsn 。日誌輸出如下:
在拷貝ibd文件之前,會先掃描資料庫的數據文件目錄,獲取ibdata1,undo tablespaces及所有的ibd文件列表,並會記錄相應的 space id,因為在恢復時需要這些 space id來找到對應 doublewrite buffer里頁面的內容,以及對應的redo log條目。然後開始循環拷貝ibdata1,undo tablespaces及所有的ibd文件。
這里可通過設置--parallel進行多線程備份,提高物理文件的拷貝效率。不設置則默認為1。
在所有ibd文件拷貝完成後,XtraBackup開始備份非ibd文件。這一部分的邏輯比較復雜,因為備份非ibd文件前需要加鎖,具體是否會加鎖主要受到--no-lock 參數設置的影響。
若是設置了--no-lock為TRUE,則不會使用"FLUSH TABLES WITH READ LOCK"去加全局讀鎖,但是若備份過程中對non-InnoDB表執行了DDL或者DML操作, 這會導致備份的不一致,恢復出來的數據就會有問題。所以是不建議將--no-lock為TRUE,默認值是FALSE,也就是在不指定該選項的情況下會在備份非ibd文件前加全局讀鎖。
下面我們結合源碼來看看判斷是否加全局鎖這部分的具體流程邏輯:
流程圖如下:
總結來看:
1)若--no-lock為FALSE(默認值),則先施加全局讀鎖,然後再進行拷貝文件,另外若 --safe-slave-backup 設置為TRUE ,則會在加全局鎖之前關閉SQL_THREAD線程;
2)若--no-lock為TRUE,則不會施加鎖,直接進行拷貝文件。
加鎖的邏輯主要由lock_tables_maybe實現,先看一下lock_tables_maybe源代碼,如下:
lock_tables_maybe 函數簡化處理流程如下:
1)若備份實例上已經加鎖( LOCK TABLES FOR BACKUP / FLUSH TABLES WITH READ LOCK)或者設置lock-ddl-per-table 則直接返回;
2)若支持備份鎖,則執行LOCK TABLES FOR BACKUP;
3)若不支持備份鎖,則執行 FLUSH TABLES WITH READ LOCK。根據相應選項設置,在執行該操作前會判斷是否有執行中的DDL/DML,以及等待超時時間,是否kill 對應的未結束的事務等。
從上文中我們還看到一個參數--safe-slave-backup ,該參數的主要作用是:
若是在從庫執行的備份操作時設置了該參數,可以防止因從庫同步主庫操作,而導致XtraBackup長時間請求不到鎖而造成備份失敗。
若是設置了 --safe-slave-backup 為TRUE,那麼會執行"STOP SLAVE SQL_THREAD",並等待Slave_open_temp_tables 為零才開始拷貝非 ibd 文件,Slave_open_temp_tables 為零說明SQL thread執行的事務都已經完成,這樣就能保證備份的一致性。並且此時也不會有在執行的事務阻塞 XtraBackup 施加全局鎖。
備份完非 ibd 文件後,將會備份 slave 和 binlog 信息。
mysql-bin.000004 2004 6b7bda9f-15f0-11ec-ba14-fa163ea367a4:1-83,9841546e-15f0-11ec-9557-fa163e736db4:1
需要注意,在支持備份鎖的實例上備份,指定了 --slave-info 或--binlog-info 均會先施加 binlog 備份鎖( LOCK BINLOG FOR BACKUP),這會阻塞任何會更改 binlog 位點的操作。
備份完資料庫的所有文件和binlog等相關信息,備份工作就基本完成了,之後主要執行的操作如下:
1)執行"FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS",將所有的redo log刷盤;
2)停止redo log復制線程;
3)釋放全局讀鎖(備份鎖),binlog鎖;
4)開啟SQL_THREAD;
5)拷貝ib_buffer_pool和ib_lru_mp文件;
6)生成配置文件backup-my.cnf;
7)列印備份信息到xtrabackup_info文件,這些信息主要包含備份時使用的參數信息,備份起止時間,binlog位點信息,以及將會回到的lsn點。
下面是xtrabackup_info記錄的部分內容:
加鎖對應的函數是 mdl_lock_tables ,釋放鎖對應的函數是 mdl_unlock_all,主要是執行COMMIT,結束 mdl_lock_tables 中開啟的顯式事務,來釋放MDL鎖。mdl_lock_tables 流程如下:
上面參數--lock-ddl和--lock-ddl-per-table是在 Percona XtraBackup 2.4.8 之後添加的,因為 MySQL 5.7 新增了一個叫做 Sorted Index Builds 的功能,這會導致某些 DDL 操作不記錄重做日誌而導致備份失敗。使用--lock-ddl或--lock-ddl-per-table 就會在備份開始時施加鎖,阻止 DDL 操作。
另外,若備份時指定了--lock-ddl或--lock-ddl-per-table,則在備份非 ibd 文件時就不是再有加鎖操作。
注意:LOCK TABLES FOR BACKUP和LOCK BINLOG FOR BACKUP 語句只有在支持備份鎖的實例上才會執行,Percona Server for MySQL已經在 5.6.16-64.0 版本開始支持這種更加輕量的備份鎖。
Q1: 使用 XtraBackup 備份的文件進行恢復時,恢復到哪個時間點? A1:恢復到執行 LOCK BINLOG FOR BACKUP 或 FLUSH TABLES WITH READ LOCK 的時間點,因為這時任何改變 binlog 位點的操作都會被阻塞,redo log和binlog 是一致的。
Q2: 在開啟 binlog 的情況下,MySQL 的奔潰恢復是同時依賴 binlog 和 redo log 這兩種日誌的,為什麼XtraBackup 不用備份binlog?
A2:因為在備份中有執行LOCK BINLOG FOR BACKUP/FLUSH TABLES WITH READ LOCK,阻止了任何改變binlog位點的操作,這樣只需要根據redo log將有commit log 的事務提交,沒有commit log的事務進行回滾即可。
Q3: 使用Percona XtraBackup備份完成後redo的位點是和binlog是一樣還是比binlog多一些?
A3:通過分析備份流程可以發現備份 binlog 位點信息(加binlog鎖)是發生在停止 redo 拷貝線程前,而釋放鎖是在停止 redo 拷貝線之後,所以 redo log 會多一些。鎖住了 binlog 保證了在該 binlog 位點前已經提交的事務的 redo log 都有 commit log 的信息,未提交的事物也就沒有對應的 commit log 的信息,即便在鎖住 binlog 後有 Innodb 表新的 DML 產生的 redo log ,但是事務無法提交,也就沒有 commit log 的信息的,最後在回放的過程中對沒有 commit log 的事務進行回滾就可以了。
Q4:Percona XtraBackup什麼時候會加鎖,以及影響加鎖時間長度的因素有哪些?
A4:上面進行了分析,加鎖操作只在備份非 ibd 文件時執行,加鎖時長主要和非事務表的數量和大小有關,非事務表的數量越多,體積越大,拷貝文件所用的時間越長,那麼加鎖時間也就越長。也會和 redo log 生成的速度有關,只是 redo log 刷盤受到多個因素的影響,未及時刷盤的 redo log 一般很小。
Q5:Percona XtraBackup 和mysqlmp選擇哪個更好?
A5:通過上面的的解析,若是整個實例備份,首先選擇 Percona XtraBackup ,因為對資料庫的影響最小。若只是備份某個庫表,這個就要視數據量而定,若數據量不大可以使用 mysqlmp 。注意,對資料庫做備份時最好選擇業務連接最少的從庫,因為備份也會消耗一定的資源,避免影響業務。
『肆』 mdl是什麼文件的後綴
MDL文件是一個文件包,裡麵包含模型,貼圖,所有動作,以及腳本。.mdl是用rational rose生成的格式文件,它支持UML用來畫此滾用例圖,序列圖,狀態圖,類圖等。
MDL文件是UML的模型文件,不能用powerdesigner打開,可以用rose、3D Expioration、war3 model editer工具打開。rationalrose和msvisualmodeler都可以生成mdl文件。
MDL文件建立:
要想差卜建立一個MDL文件是很麻煩的,可以找一個現成的MDL文件(從CS或者半條命里找),用Milkshape的插件給解壓縮,菜單tools-hl-decomp normal hl mdl file。
解完後找到裡面的後綴SMD的文件,其中一個是模型,用MS導入3DS,套用這個SMD里的骨骼,在MS里設置好權重,然後覆蓋這個SMD文件。 在菜單tools-hl-Compile qc file 選擇剛才解壓縮出來的一森慶余個後綴QC的文件把MDL重新打包就可以了。