如何緊急恢復(fù)SQL Server數(shù)據(jù)庫(kù)文件
導(dǎo)讀:很多公司都在開(kāi)發(fā)自己的分布式數(shù)據(jù)庫(kù)架構(gòu),且不少公司都可能使用上了,也有很多人在講分布式數(shù)據(jù)庫(kù)架構(gòu),這些是真正意義上的分布式數(shù)據(jù)庫(kù)嗎?
若要我加一個(gè)詞的話(huà), 我一般說(shuō)偽分布式或者說(shuō)所謂的分布式數(shù)據(jù)庫(kù)架構(gòu),是跟陳國(guó)慶分享的NoSQL一樣,只是起一個(gè)簡(jiǎn)單且好聽(tīng)點(diǎn)的名字,之所以談這個(gè)話(huà)題,就是想與大家分享一下個(gè)人對(duì)偽分布式數(shù)據(jù)庫(kù)架構(gòu)的理解及所實(shí)踐的。
PPT主要的內(nèi)容主要有幾點(diǎn):什么是分布式數(shù)據(jù)庫(kù);什么是偽分布式數(shù)據(jù)庫(kù);分布式和偽分布式數(shù)據(jù)庫(kù)架構(gòu)的優(yōu)缺點(diǎn);偽分布式數(shù)據(jù)庫(kù)架構(gòu)適用的場(chǎng)景;二種偽分布式數(shù)據(jù)庫(kù)架構(gòu)的設(shè)計(jì)思路,一類(lèi)適用于電子商務(wù)等領(lǐng)域,另外一類(lèi)適合于SNS游戲等領(lǐng)域。
首先申明二個(gè)要點(diǎn):第一點(diǎn)不支持分布式事務(wù)的,肯定不是分布式數(shù)據(jù)庫(kù);第二點(diǎn)分布式強(qiáng)調(diào)的是強(qiáng)調(diào)可用性、可靠性和數(shù)據(jù)一致性,數(shù)據(jù)一致性又分松散一致性和嚴(yán)密一致性,因?yàn)榉植际綌?shù)據(jù)庫(kù)有不同的實(shí)現(xiàn)算法,為此數(shù)據(jù)一致性都有各種差異。
接下來(lái),我們看一下分布式數(shù)據(jù)庫(kù)的定義:由一組存儲(chǔ)在網(wǎng)絡(luò)中不同服務(wù)器上的數(shù)據(jù)組成,網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)具有獨(dú)立執(zhí)行局部應(yīng)用的能力,也可以通過(guò)網(wǎng)絡(luò)通信系統(tǒng)執(zhí)行全局應(yīng)用的能力。
為什么需要偽分布式數(shù)據(jù)庫(kù)產(chǎn)品?是因?yàn)榧惺綌?shù)據(jù)庫(kù),當(dāng)數(shù)據(jù)量越來(lái)越大,數(shù)據(jù)的讀寫(xiě)量也越來(lái)越大,且無(wú)法通過(guò)垂直增加或升級(jí)硬件設(shè)備而滿(mǎn)足的,以及越來(lái)越成為業(yè)務(wù)增長(zhǎng)的瓶頸,我們就不得不考慮革新,適用一種更加有效、可行的方案解決。
偽分布式數(shù)據(jù)庫(kù)的應(yīng)用場(chǎng)景,稍微羅列了下:電子商務(wù)平臺(tái)(C2C、B2B、B2C) 、SNS平臺(tái)、IM即時(shí)通信軟件、電子郵件系統(tǒng)、日志分析系統(tǒng)、SNS游戲、其他平臺(tái)型網(wǎng)站。
大致總結(jié)了下,使用偽分布式數(shù)據(jù)庫(kù)架構(gòu)場(chǎng)景的三要素:
- 大數(shù)據(jù)容量,且垂直升級(jí)擴(kuò)展受限的;
- 高并發(fā)事務(wù)型的;
- 數(shù)據(jù)更新量遠(yuǎn)大于數(shù)據(jù)讀取,且數(shù)據(jù)更新量非常大;
接下來(lái)我們看一下分布式數(shù)據(jù)庫(kù)一個(gè)最獨(dú)特的架構(gòu)圖,但是看之前,先了解下分布式數(shù)據(jù)庫(kù)的四個(gè)是核心模塊。我們把四個(gè)名詞解釋一下:
什么叫局部數(shù)據(jù)庫(kù)管理系統(tǒng);
什么是全局?jǐn)?shù)據(jù)庫(kù)管理系統(tǒng);
什么是全局?jǐn)?shù)據(jù)字典;
什么是通信管理;
l LDBMS
建立和管理局部數(shù)據(jù)庫(kù),提供場(chǎng)地自治能力,執(zhí)行局部應(yīng)用及全局查詢(xún)的子查詢(xún);
l GDBMS
提供分布透明性,協(xié)調(diào)全局事務(wù)執(zhí)行,協(xié)調(diào)各局部DBMS完成全局應(yīng)用,保證數(shù)據(jù)庫(kù)全局一致性、執(zhí)行并發(fā)控制、實(shí)現(xiàn)更新同步和提供全局恢復(fù)等功能;
l 全局?jǐn)?shù)據(jù)字典
存放全局概念模式、分片模式、分布模式的定義以及各模式之間映像的定義,存放有關(guān)用戶(hù)存取權(quán)限的定義,保證全局用 戶(hù)的權(quán)限和數(shù)據(jù)庫(kù)的安全,存放數(shù)據(jù)完整性約束條件定義;
l 通信管理
實(shí)現(xiàn)分布式數(shù)據(jù)庫(kù)各場(chǎng)地之間消息和數(shù)據(jù)傳遞;
這是分布式數(shù)據(jù)庫(kù)最復(fù)雜的一種結(jié)構(gòu),每個(gè)節(jié)點(diǎn)都有一個(gè)全局?jǐn)?shù)據(jù)字典和全局?jǐn)?shù)據(jù)庫(kù)管理系統(tǒng),但市場(chǎng)上的產(chǎn)品中都不會(huì)使用這種架構(gòu)。因?yàn)榇思軜?gòu)的分布式數(shù)據(jù)庫(kù)產(chǎn)品的實(shí)現(xiàn)技術(shù)難度高,各個(gè)節(jié)點(diǎn)之間通信和管理成本高,好處就是全局?jǐn)?shù)據(jù)庫(kù)管理系統(tǒng)和全局?jǐn)?shù)據(jù)字典不會(huì)成為單點(diǎn),為此市場(chǎng)上的產(chǎn)品多是采用多個(gè)全局?jǐn)?shù)據(jù)庫(kù)管理系統(tǒng)和全局?jǐn)?shù)據(jù)字典解決單點(diǎn)的問(wèn)題,但不是每個(gè)節(jié)點(diǎn)都用。
接下來(lái)回到我們的重點(diǎn):什么是偽分布數(shù)數(shù)據(jù)庫(kù)架構(gòu),大家千萬(wàn)不要像迷戀NoSQL一樣迷戀偽分布式這個(gè)名字,同一個(gè)道理。偽分布式我簡(jiǎn)單的理解就是多個(gè)集中式數(shù)據(jù)庫(kù),再加上數(shù)據(jù)庫(kù)自身復(fù)制,最外層再加上開(kāi)發(fā)的軟件和一些其他的組件;
分布式數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)蠻多的,大致羅列了四點(diǎn):
1>.數(shù)據(jù)獨(dú)立性:數(shù)據(jù)邏輯獨(dú)立性、物理獨(dú)立性、分布獨(dú)立惡性;
2>.適當(dāng)數(shù)據(jù)的冗余,實(shí)現(xiàn)高可用性;
3>.集中和自治相結(jié)合的控制結(jié)構(gòu);
4>.全局的一致性、可串行性、可恢復(fù)性;
一個(gè)產(chǎn)品有優(yōu)點(diǎn),其自然也會(huì)存在一些負(fù)面的,大致如下:
1>.部署復(fù)雜,對(duì)硬件、網(wǎng)絡(luò)等環(huán)境要求更高;
2>.事務(wù)、數(shù)據(jù)查詢(xún)性能相比較下降;
3>.商業(yè)產(chǎn)品費(fèi)用較貴,開(kāi)源產(chǎn)品暫時(shí)存在瑕疵;
4>.技術(shù)實(shí)現(xiàn)復(fù)雜,開(kāi)發(fā)成本高;
那接下來(lái)我們繼續(xù)談下偽分布數(shù)據(jù)庫(kù)架構(gòu)的優(yōu)缺點(diǎn)。偽分布式的優(yōu)點(diǎn)就是提供了類(lèi)似分布式數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)透明性;解決集中式數(shù)據(jù)庫(kù)的擴(kuò)展局限性;能夠提高數(shù)據(jù)的訪(fǎng)問(wèn)性能、可用性和可靠性,因?yàn)榘押芏鄶?shù)據(jù)拆到很多不同的服務(wù)器上,數(shù)據(jù)被打散了,而且現(xiàn)在PC服務(wù)器的處理能力非常不錯(cuò),可以通過(guò)偽分布式數(shù)據(jù)庫(kù)架構(gòu)提供的自動(dòng)切換功能,使得可用性和可靠性有保障。
偽分布式數(shù)據(jù)庫(kù)架構(gòu)的實(shí)現(xiàn)技術(shù)也不難,有很多現(xiàn)成的方案,開(kāi)發(fā)成本也不高。而且我拆分了數(shù)據(jù)庫(kù)之后,可以用一些自動(dòng)化的工具模塊,使對(duì)數(shù)據(jù)庫(kù)的維護(hù)成本可控的。
偽分布式數(shù)據(jù)庫(kù)架構(gòu)也有其缺陷:
1>.不支持分布式事務(wù) ;
2>.數(shù)據(jù)拆分之后出現(xiàn)數(shù)據(jù)合并難度與部分功能限制 ;
3>.數(shù)據(jù)庫(kù)設(shè)計(jì)技巧難度加大 ;
二種通用偽分布式數(shù)據(jù)庫(kù)架構(gòu)都大致有組建,信息如下:
u 前端通信協(xié)議:MySQL通信協(xié)議、JSON協(xié)議;
u 后端通信協(xié)議:MySQL通信協(xié)議;
u 存取路由算法控制器:HASH值法、數(shù)據(jù)庫(kù)路由表法;
u 連接池:數(shù)據(jù)庫(kù)連接池、應(yīng)用程序連接池(可選);
u 負(fù)載均衡:客戶(hù)端調(diào)用API接口;
u 解析器:SQL解析器、JSON字符串解析器;
u 查詢(xún)結(jié)果集合并緩沖區(qū);
u 序列生成器;
u JSON字符串操作合并隊(duì)列服務(wù);
u MemCache管理模塊;
u 第三方平臺(tái)ID轉(zhuǎn)換器;
u 數(shù)據(jù)庫(kù)可用性探測(cè)模塊;
u 命令行管理接口;
稍微解釋幾個(gè)模塊,及重點(diǎn)解釋數(shù)據(jù)存取的路由法則和序列生成器,我們先說(shuō)下應(yīng)用程序與偽分布式數(shù)據(jù)庫(kù)架構(gòu)的通信模塊,前段應(yīng)用程序都是連接到這個(gè)數(shù)據(jù)中間件上,然后通過(guò)數(shù)據(jù)中間件訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),完成數(shù)據(jù)的讀寫(xiě)操作。
數(shù)據(jù)庫(kù)可用性探測(cè)器就是通過(guò)做一個(gè)UPDATE操作的方式檢測(cè)數(shù)據(jù)庫(kù)服務(wù)是否正常,使用修改命令的原因是MySQL HANG會(huì)有很多種情況,但是一定無(wú)法完成寫(xiě)操作。
命令行管理接口,可以根據(jù)數(shù)據(jù)庫(kù)可用性探測(cè)器或人為發(fā)送的命令,完成一些操作,比如數(shù)據(jù)庫(kù)服務(wù)從A服務(wù)器轉(zhuǎn)移到B服務(wù)器,那么就可以發(fā)送一個(gè)強(qiáng)制切換命令。
查詢(xún)結(jié)果集合并緩沖區(qū)主要為彌補(bǔ)因數(shù)據(jù)打散而存在數(shù)據(jù)合并的需求,比如一個(gè)查詢(xún)操作需要操作多個(gè)庫(kù),那么SQL解析器會(huì)拆分成多條SQL執(zhí)行,然后結(jié)果集在此緩沖區(qū)合并,甚至還可以再做一些如排序、分組統(tǒng)計(jì)等操作。
負(fù)載均衡模塊,我們需要提供前端應(yīng)用程序訪(fǎng)問(wèn)數(shù)據(jù)中間件的驅(qū)動(dòng)模塊,那么我們可以把負(fù)載均衡的模塊集成進(jìn)去,前端只需要配置數(shù)據(jù)中間件服務(wù)器的IP及連接信息即可,尤其自動(dòng)完成命令發(fā)送到哪臺(tái)中間件服務(wù)器。
……
我們?cè)偕钊氲街罢f(shuō)的二個(gè)模塊,第一個(gè)是數(shù)據(jù)路由的存取算法,第一類(lèi)我們是:HASH值法;第二類(lèi)是:路由表法。
HASH值法,一般是根據(jù)用戶(hù)UID算出一個(gè)0~1023的值,根據(jù)用戶(hù)ID好處就是可以把一個(gè)用戶(hù)的數(shù)據(jù)盡量存儲(chǔ)在一塊,方便讀寫(xiě)操作。我們要根據(jù)現(xiàn)有數(shù)據(jù)容量、數(shù)據(jù)庫(kù)服務(wù)器負(fù)載、業(yè)務(wù)數(shù)據(jù)增長(zhǎng)等信息,預(yù)先確定要?jiǎng)澐譃槎嗌俣危热缥覀儼?~1023劃分為128段,也就是把用戶(hù)數(shù)據(jù)劃分到128個(gè)數(shù)據(jù)庫(kù)中存儲(chǔ)起來(lái),然后每次數(shù)據(jù)的存取,就根據(jù)SQL語(yǔ)句中的擁護(hù)ID計(jì)算及存儲(chǔ)的位置,把SQL語(yǔ)句或事務(wù)發(fā)送到對(duì)應(yīng)的服務(wù)器上執(zhí)行;
路由表法,一般是有一張表存儲(chǔ)用戶(hù)ID,及存儲(chǔ)其的數(shù)據(jù)庫(kù)ID,還有一張存儲(chǔ)數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)信息的表,大致如下圖:
稍微解釋下,為啥uid_dbid_map表中還有一個(gè)字段:third_uid,主要是因?yàn)橄馭NS游戲,多是接入到第三平臺(tái),而各個(gè)平臺(tái)為不使外界通過(guò)此猜測(cè)出其有多少注冊(cè)用戶(hù)及`安全,給我們的ID都是非常奇怪的,為了程序通用、性能等,我們對(duì)第三的ID一律作MD5運(yùn)算,然后存儲(chǔ)起來(lái),在玩家操作過(guò)程中,使用內(nèi)部ID進(jìn)行數(shù)據(jù)的操作。
接下來(lái)我們繼續(xù)深入談下自增序列器模塊的作用,想實(shí)現(xiàn):
l 實(shí)現(xiàn)MySQL自帶的字段值自動(dòng)增長(zhǎng)等效的功能;
l 同一應(yīng)用集群中數(shù)據(jù)庫(kù)表的自增類(lèi)型字段值具有全局唯一性;
l 支持?jǐn)?shù)據(jù)庫(kù)級(jí)別的水平拆分表,同時(shí)還需要支持?jǐn)?shù)據(jù)庫(kù)內(nèi)部的表再次水平
拆分,其ID值都來(lái)源于同一條配置記錄;
其表的結(jié)構(gòu)如下:
對(duì)于涉及自增類(lèi)型的表,在此配置一條記錄,主要有表明成、表在一個(gè)數(shù)據(jù)庫(kù)內(nèi)部拆分的數(shù)量,自增起始值,增長(zhǎng)的步長(zhǎng)。有些情況下,需要內(nèi)部再分表主要是考慮到一些表的數(shù)據(jù)容量可能會(huì)變成很大,而MySQL做表的變更會(huì)阻塞數(shù)據(jù)的寫(xiě)操作,若是較小的表,就可以更快完成變更操作。前端應(yīng)用程序可以選擇啟動(dòng)或用完之后一次性向中間服務(wù)器申請(qǐng)10000個(gè)ID值域,這樣可以避免每用一次都取 而提高效率。
上文中詳細(xì)給大家介紹了關(guān)于如何緊急恢復(fù)SQL Server數(shù)據(jù)庫(kù)文件,由于SQL Server數(shù)據(jù)庫(kù)中的數(shù)據(jù)都是非常重要的,具有高度保密性,一旦丟失會(huì)造成很大的損失,希望大家能熟練掌握緊急恢復(fù)SQL Server數(shù)據(jù)庫(kù)文件的方法,能幫到大家我就很高興啦。
【編輯推薦】