侵權投訴

MySQL是如何保證數據不會丟的

39度創意研究所 ? 2020-10-10 15:30 ? 次閱讀

  MySQL作為當下最流行的開源關系型數據庫,有一個很關鍵和基本的能力,就是必須能夠保證數據不會丟。那么在這個能力背后,MySQL是如何設計才能保證不管在什么時間崩潰,恢復后都能保證數據不會丟呢?有哪些關鍵技術支撐了這個能力?本文將為我們一一揭曉。

  一、前言

  MySQL 保證數據不會丟的能力主要體現在兩方面:

  能夠恢復到任何時間點的狀態;

  能夠保證MySQL在任何時間段突然奔潰,重啟后之前提交的記錄都不會丟失;

  對于第一點將MySQL恢復到任何時間點的狀態,相信很多人都知道,只要保留有足夠的binlog,就能通過重跑binlog來實現。

  對于第二點的能力,也就是本文標題所講的crash-safe。即在 InnoDB 存儲引擎中,事務提交過程中任何階段,MySQL突然奔潰,重啟后都能保證事務的完整性,已提交的數據不會丟失,未提交完整的數據會自動進行回滾。這個能力依賴的就是redo log和unod log兩個日志。

  

  因為crash-safe主要體現在事務執行過程中突然奔潰,重啟后能保證事務完整性,所以在講解具體原理之前,先了解下MySQL事務執行有哪些關鍵階段,后面才能依據這幾個階段來進行解析。下面以一條更新語句的執行流程為例,話不多說,直接上圖:

  從上圖可以清晰地看出一條更新語句在MySQL中是怎么執行的,簡單進行總結一下:

  從內存中找出這條數據記錄,對其進行更新;

  將對數據頁的更改記錄到redo log中;

  將邏輯操作記錄到binlog中;

  對于內存中的數據和日志,都是由后臺線程,當觸發到落盤規則后再異步進行刷盤;

  上面演示了一條更新語句的詳細執行過程,接下來咱們通過解答問題,帶著問題來剖析這個crash-safe的設計原理。

  二、WAL機制

  問題:為什么不直接更改磁盤中的數據,而要在內存中更改,然后還需要寫日志,最后再落盤這么復雜?

  這個問題相信很多同學都能猜出來,MySQL更改數據的時候,之所以不直接寫磁盤文件中的數據,最主要就是性能問題。因為直接寫磁盤文件是隨機寫,開銷大性能低,沒辦法滿足MySQL的性能要求。所以才會設計成先在內存中對數據進行更改,再異步落盤。但是內存總是不可靠,萬一斷電重啟,還沒來得及落盤的內存數據就會丟失,所以還需要加上寫日志這個步驟,萬一斷電重啟,還能通過日志中的記錄進行恢復。

  寫日志雖然也是寫磁盤,但是它是順序寫,相比隨機寫開銷更小,能提升語句執行的性能(針對順序寫為什么比隨機寫更快,可以比喻為你有一個本子,按照順序一頁一頁寫肯定比寫一個字都要找到對應頁寫快得多)。

  這個技術就是大多數存儲系統基本都會用的WAL(Write Ahead Log)技術,也稱為日志先行的技術,指的是對數據文件進行修改前,必須將修改先記錄日志。保證了數據一致性和持久性,并且提升語句執行性能。

  三、核心日志模塊

  問題:更新SQL語句執行流程中,總共需要寫3個日志,這3個是不是都需要,能不能進行簡化?

  更新SQL執行過程中,總共涉及MySQL日志模塊其中的三個核心日志,分別是redo log(重做日志)、undo log(回滾日志)、binlog(歸檔日志)。這里提前預告,crash-safe的能力主要依賴的就是這三大日志。

  接下來,針對每個日志將單獨介紹各自的作用,然后再來評估是否能簡化掉。

  1、重做日志 redo log

  redo log也稱為事務日志,由InnoDB存儲引擎層產生。記錄的是數據庫中每個頁的修改,而不是某一行或某幾行修改成怎樣,可以用來恢復提交后的物理數據頁(恢復數據頁,且只能恢復到最后一次提交的位置,因為修改會覆蓋之前的)。

  前面提到的WAL技術,redo log就是WAL的典型應用,MySQL在有事務提交對數據進行更改時,只會在內存中修改對應的數據頁和記錄redo log日志,完成后即表示事務提交成功,至于磁盤數據文件的更新則由后臺線程異步處理。由于redo log的加入,保證了MySQL數據一致性和持久性(即使數據刷盤之前MySQL奔潰了,重啟后仍然能通過redo log里的更改記錄進行重放,重新刷盤),此外還能提升語句的執行性能(寫redo log是順序寫,相比于更新數據文件的隨機寫,日志的寫入開銷更小,能顯著提升語句的執行性能,提高并發量),由此可見redo log是必不可少的。

  redo log是固定大小的,所以只能循環寫,從頭開始寫,寫到末尾就又回到開頭,相當于一個環形。當日志寫滿了,就需要對舊的記錄進行擦除,但在擦除之前,需要確保這些要被擦除記錄對應在內存中的數據頁都已經刷到磁盤中了。在redo log滿了到擦除舊記錄騰出新空間這段期間,是不能再接收新的更新請求,所以有可能會導致MySQL卡頓。(所以針對并發量大的系統,適當設置redo log的文件大小非常重要?。。。?/p>

  2、回滾日志 undo log

  undo log顧名思義,主要就是提供了回滾的作用,但其還有另一個主要作用,就是多個行版本控制(MVCC),保證事務的原子性。在數據修改的流程中,會記錄一條與當前操作相反的邏輯日志到undo log中(可以認為當delete一條記錄時,undo log中會記錄一條對應的insert記錄,反之亦然,當update一條記錄時,它記錄一條對應相反的update記錄),如果因為某些原因導致事務異常失敗了,可以借助該undo log進行回滾,保證事務的完整性,所以undo log也必不可少。

  3、歸檔日志 binlog

  binlog在MySQL的server層產生,不屬于任何引擎,主要記錄用戶對數據庫操作的SQL語句(除了查詢語句)。之所以將binlog稱為歸檔日志,是因為binlog不會像redo log一樣擦掉之前的記錄循環寫,而是一直記錄(超過有效期才會被清理),如果超過單日志的最大值(默認1G,可以通過變量 max_binlog_size 設置),則會新起一個文件繼續記錄。但由于日志可能是基于事務來記錄的(如InnoDB表類型),而事務是絕對不可能也不應該跨文件記錄的,如果正好binlog日志文件達到了最大值但事務還沒有提交則不會切換新的文件記錄,而是繼續增大日志,所以 max_binlog_size 指定的值和實際的binlog日志大小不一定相等。

  正是由于binlog有歸檔的作用,所以binlog主要用作主從同步和數據庫基于時間點的還原。

  那么回到剛才的問題,binlog可以簡化掉嗎?這里需要分場景來看:

  如果是主從模式下,binlog是必須的,因為從庫的數據同步依賴的就是binlog;

  如果是單機模式,并且不考慮數據庫基于時間點的還原,binlog就不是必須,因為有redo log就可以保證crash-safe能力了;但如果萬一需要回滾到某個時間點的狀態,這時候就無能為力,所以建議binlog還是一直開啟;

  根據上面對三個日志的詳解,我們可以對這個問題進行解答:在主從模式下,三個日志都是必須的;在單機模式下,binlog可以視情況而定,保險起見最好開啟。

  四、兩階段提交

  問題:為什么redo log要分兩步寫,中間再穿插寫binlog呢?

  從上面可以看出,因為redo log影響主庫的數據,binlog影響從庫的數據,所以redo log和binlog必須保持一致才能保證主從數據一致,這是前提。

  相信很多有過開發經驗的同學都知道分布式事務,這里的redo log和binlog其實就是很典型的分布式事務場景,因為兩者本身就是兩個獨立的個體,要想保持一致,就必須使用分布式事務的解決方案來處理。而將redo log分成了兩步,其實就是使用了兩階段提交協議(Two-phase Commit,2PC)。

  下面對更新語句的執行流程進行簡化,看一下MySQL的兩階段提交是如何實現的:

  

  從圖中可看出,事務的提交過程有兩個階段,就是將redo log的寫入拆成了兩個步驟:prepare和commit,中間再穿插寫入binlog。

  如果這時候你很疑惑,為什么一定要用兩階段提交呢,如果不用兩階段提交會出現什么情況,比如先寫redo log,再寫binlog或者先寫binlog,再寫redo log不行嗎?下面我們用反證法來進行論證。

  我們繼續用update T set c=c+1 where id=2這個例子,假設id=2這一條數據的c初始值為0。那么在redo log寫完,binlog還沒有寫完的時候,MySQL進程異常重啟。由于redo log已經寫完了,系統重啟后會通過redo log將數據恢復回來,所以恢復后這一?c的值是1。但是由于binlog沒寫完就crash?,這時候binlog?面就沒有記錄這個語?。因此,不管是現在的從庫還是之后通過這份binlog還原臨時庫都沒有這一次更新,c的值還是0,與原庫的值不同。

  同理,如果先寫binlog,再寫redo log,中途系統crash了,也會導致主從不一致,這里就不再詳述。

  所以將redo log分成兩步寫,即兩階段提交,才能保證redo log和binlog內容一致,從而保證主從數據一致。

  兩階段提交雖然能夠保證單事務兩個日志的內容一致,但在多事務的情況下,卻不能保證兩者的提交順序一致,比如下面這個例子,假設現在有3個事務同時提交:

  T1 (--prepare--binlog---------------------commit) T2 (-----prepare-----binlog----commit) T3 (--------prepare-------binlog------commit) 解析: redo log prepare的順序:T1 --》T2 --》T3 binlog的寫入順序:T1 --》 T2 --》T3 redo log commit的順序:T2 --》 T3 --》T1

  結論:由于binlog寫入的順序和redo log提交結束的順序不一致,導致binlog和redo log所記錄的事務提交結束的順序不一樣,最終導致的結果就是主從數據不一致。

  因此,在兩階段提交的流程基礎上,還需要加一個鎖來保證提交的原子性,從而保證多事務的情況下,兩個日志的提交順序一致。所以在早期的MySQL版本中,通過使用prepare_commit_mutex鎖來保證事務提交的順序,在一個事務獲取到鎖時才能進入prepare,一直到commit結束才能釋放鎖,下個事務才可以繼續進行prepare操作。通過加鎖雖然完美地解決了順序一致性的問題,但在并發量較大的時候,就會導致對鎖的爭用,性能不佳。除了鎖的爭用會影響到性能之外,還有一個對性能影響更大的點,就是每個事務提交都會進行兩次fsync(寫磁盤),一次是redo log落盤,另一次是binlog落盤。大家都知道,寫磁盤是昂貴的操作,對于普通磁盤,每秒的QPS大概也就是幾百。

  五、組提交

  問題:針對通過在兩階段提交中加鎖控制事務提交順序這種實現方式遇到的性能瓶頸問題,有沒有更好的解決方案呢?

  答案自然是有的,在MySQL 5.6 就引入了binlog組提交,即BLGC(Binary Log Group Commit)。binlog組提交的基本思想是,引入隊列機制保證InnoDB commit順序與binlog落盤順序一致,并將事務分組,組內的binlog刷盤動作交給一個事務進行,實現組提交目的。具體如圖:

  

  第一階段(prepare階段):

  持有prepare_commit_mutex,并且write/fsync redo log到磁盤,設置為prepared狀態,完成后就釋放prepare_commit_mutex,binlog不作任何操作。

  第二個階段(commit階段):這里拆分成了三步,每一步的任務分配給一個專門的線程處理:

  Flush Stage(寫入binlog緩存)

 ?、?持有Lock_log mutex [leader持有,follower等待]

 ?、?獲取隊列中的一組binlog(隊列中的所有事務)

 ?、?寫入binlog緩存

  Sync Stage(將binlog落盤)

 ?、籴尫臠ock_log mutex,持有Lock_sync mutex[leader持有,follower等待]

 ?、趯⒁唤Mbinlog落盤(fsync動作,最耗時,假設sync_binlog為1)。

  Commit Stage(InnoDB commit,清楚undo信息)

 ?、籴尫臠ock_sync mutex,持有Lock_commit mutex[leader持有,follower等待]

 ?、?遍歷隊列中的事務,逐一進行InnoDB commit

 ?、?釋放Lock_commit mutex

  每個Stage都有自己的隊列,隊列中的第一個事務稱為leader,其他事務稱為follower,leader控制著follower的行為。每個隊列各自有mutex保護,隊列之間是順序的。只有flush完成后,才能進入到sync階段的隊列中;sync完成后,才能進入到commit階段的隊列中。但是這三個階段的作業是可以同時并發執行的,即當一組事務在進行commit階段時,其他新事務可以進行flush階段,實現了真正意義上的組提交,大幅度降低磁盤的IOPS消耗。

  針對組提交為什么比兩階段提交加鎖性能更好,簡單做個總結:組提交雖然在每個隊列中仍然保留了prepare_commit_mutex鎖,但是鎖的粒度變小了,變成了原來兩階段提交的1/4,所以鎖的爭用性也會大大降低;另外,組提交是批量刷盤,相比之前的單條記錄都要刷盤,能大幅度降低磁盤的IO消耗。

  六、數據恢復流程

  問題:假設事務提交過程中,MySQL進程突然奔潰,重啟后是怎么保證數據不丟失的?

  下圖就是MySQL重啟后,提供服務前會先做的事 -- 恢復數據的流程:

  

  對上圖進行簡單描述就是:奔潰重啟后會檢查redo log中是完整并且處于prepare狀態的事務,然后根據XID(事務ID),從binlog中找到對應的事務,如果找不到,則回滾;找到并且事務完整則重新commit redo log,完成事務的提交。

  下面我們根據事務提交流程,在不同的階段時刻,看看MySQL突然奔潰后,按照上述流程是如何恢復數據的。

  時刻A(剛在內存中更改完數據頁,還沒有開始寫redo log的時候奔潰):

  因為內存中的臟頁還沒刷盤,也沒有寫redo log和binlog,即這個事務還沒有開始提交,所以奔潰恢復跟該事務沒有關系;

  時刻B(正在寫redo log或者已經寫完redo log并且落盤后,處于prepare狀態,還沒有開始寫binlog的時候奔潰):

  恢復后會判斷redo log的事務是不是完整的,如果不是則根據undo log回滾;如果是完整的并且是prepare狀態,則進一步判斷對應的事務binlog是不是完整的,如果不完整則一樣根據undo log進行回滾;

  時刻C(正在寫binlog或者已經寫完binlog并且落盤了,還沒有開始commit redo log的時候奔潰):

  恢復后會跟時刻B一樣,先檢查redo log中是完整并且處于prepare狀態的事務,然后判斷對應的事務binlog是不是完整的,如果不完整則一樣根據undo log回滾,完整則重新commit redo log;

  時刻D(正在commit redo log或者事務已經提交完的時候,還沒有反饋成功給客戶端的時候奔潰):

  恢復后跟時刻C基本一樣,都會對照redo log和binlog的事務完整性,來確認是回滾還是重新提交。

  七、總結

  至此對MySQL 的crash-safe原理細節就基本講完了,簡單回顧一下:

  首先簡單介紹了WAL日志先行技術,包括它的定義、流程和作用。WAL是大部分數據庫系統實現一致性和持久性的通用設計模式。;

  接著對MySQL的日志模塊,redo log、undo log、binlog、兩階段提交和組提交都進行了詳細介紹;

  最后講解了數據恢復流程,并從不同時刻加以驗證。

收藏 人收藏
分享:

評論

相關推薦

常見的幾種MySQL數據優化方式分享

選取最適合的字段屬性 2、盡可能的把字段設置成NOT NULL,這樣在執行查詢的時候,數據庫不用去比....
的頭像 39度創意研究所 發表于 10-11 10:17 ? 121次 閱讀
常見的幾種MySQL數據優化方式分享

Github上的所有新庫都將用中性詞“main”命名,而不是“master”

項目地址:https://www.zdnet.com/article/github-to-repla....
的頭像 算法與數據結構 發表于 10-10 17:02 ? 118次 閱讀
Github上的所有新庫都將用中性詞“main”命名,而不是“master”

MySQL數據庫:如何操作禁止重復插入數據

在MySQL進行數據插入操作時,總是會考慮是否會插入重復數據,之前的操作都是先根據主鍵或者唯一約束條....
的頭像 如意 發表于 10-08 14:15 ? 261次 閱讀
MySQL數據庫:如何操作禁止重復插入數據

最有用的mysql問答

想進大廠,mysql不會那可不行,來接受mysql面試挑戰吧,看看你能堅持到哪里? 1. 能說下my....
的頭像 數據分析與開發 發表于 09-30 17:43 ? 242次 閱讀
最有用的mysql問答

更進一步學習MySQL

138 張圖帶你 MySQL 入門 中主要介紹了基本的 SQL 命令、數據類型和函數,在具備以上知識....
的頭像 數據分析與開發 發表于 09-24 16:04 ? 192次 閱讀
更進一步學習MySQL

數據庫瓶頸及分庫分表示例

一、數據庫瓶頸 不管是IO瓶頸,還是CPU瓶頸,最終都會導致數據庫的活躍連接數增加,進而逼近甚至達到....
的頭像 數據分析與開發 發表于 09-24 15:52 ? 216次 閱讀
數據庫瓶頸及分庫分表示例

在Repeatable Read的隔離級別下使用select for update可能引發的死鎖問題

本文針對MySQL InnoDB中在Repeatable Read的隔離級別下使用select fo....
的頭像 數據分析與開發 發表于 09-24 15:47 ? 220次 閱讀
在Repeatable Read的隔離級別下使用select for update可能引發的死鎖問題

關于MySQL事務一個多小時的面試 太難了

迎面走來了一個風塵仆仆的身穿格子衫的男子,手里拿著一個MacBook Pro,看著那稀少的發量,和那....
的頭像 數據分析與開發 發表于 09-24 15:39 ? 241次 閱讀
關于MySQL事務一個多小時的面試  太難了

阿里巴巴Java開發手冊的PDF電子書免費下載

《阿里巴巴 Java 開發手冊》是阿里巴巴集團技術團隊的集體經驗總結,經歷了多次大規模一線實戰的檢驗....
發表于 09-21 08:00 ? 44次 閱讀
阿里巴巴Java開發手冊的PDF電子書免費下載

如何使用python將txt文件導入到mysql的應用實例

實現思想: 1、python 自動完成在txt 文件中加入自定義標簽(簡單的txt 文件可以不需要)....
發表于 09-09 17:50 ? 50次 閱讀
如何使用python將txt文件導入到mysql的應用實例

數據庫40年發展史:NoSQL和NewSQL誰將登上“鐵王座”?

起初有文件,后來有基于結構化文件的導航數據庫,然后出現了IMS和CODASYL。大概40年前,出現了....
的頭像 如意 發表于 09-04 10:47 ? 476次 閱讀
數據庫40年發展史:NoSQL和NewSQL誰將登上“鐵王座”?

干貨:38個MySQL數據庫的必備知識和小技巧

干貨:38個MySQL數據庫的必備知識和小技巧
的頭像 如意 發表于 08-31 13:08 ? 276次 閱讀
干貨:38個MySQL數據庫的必備知識和小技巧

干貨:20個MySQL開源數據庫架構設計原則

干貨:20個MySQL開源數據庫架構設計原則
的頭像 如意 發表于 08-28 10:57 ? 481次 閱讀
干貨:20個MySQL開源數據庫架構設計原則

EditUltra是什么?

EditUltra完全使用C用純WIN32API編寫而成(v1.0.0.3大約有近2萬行代碼),又加....
的頭像 數據分析與開發 發表于 08-27 15:14 ? 317次 閱讀
EditUltra是什么?

分析解決MySQL數據庫的數據延遲跳動

今天分析了另外一個關于數據庫延遲跳動的問題,也算是比較典型,這個過程中也有一些分析問題的方法和技巧工....
的頭像 如意 發表于 08-20 14:18 ? 389次 閱讀
分析解決MySQL數據庫的數據延遲跳動

MySQL數據庫:drop、truncate和delete的區別

delete是DML(data maintain Language,這個操作會被放到 rollbac....
的頭像 如意 發表于 08-19 17:22 ? 455次 閱讀
MySQL數據庫:drop、truncate和delete的區別

探究華為云數據庫戰略,分析其市場的發展前景

一次偶然的機會,筆者與國內某著名酒店集團信息主管有過一次關于企業數據庫上云的深入交流。這位信息主管介....
的頭像 如意 發表于 08-17 09:29 ? 496次 閱讀
探究華為云數據庫戰略,分析其市場的發展前景

Linux系統升級MySQL數據庫的步驟和難題

對于商業數據庫而言,數據庫升級是一個優先級很高的事情,有版本升級路線圖,有相應的補丁,而且對于方案還....
發表于 08-10 16:26 ? 110次 閱讀
Linux系統升級MySQL數據庫的步驟和難題

走進解讀Oracle、MySQL個DB2的并發控制機制

數據庫的并發控制機制,顧名思義,是用來控制數據庫的并發操作的機制??刂频哪康氖菫榱吮WC數據完整和數據....
發表于 08-10 16:18 ? 69次 閱讀
走進解讀Oracle、MySQL個DB2的并發控制機制

MySQL必知必會的PDF電子書

《MySQL必知必會》MySQL是世界上最受歡迎的數據庫管理系統之一。書中從介紹簡單的數據檢索開始,....
發表于 08-03 08:00 ? 67次 閱讀
MySQL必知必會的PDF電子書

Mysql的字段類型

Mysql字段類型
發表于 07-18 12:04 ? 0次 閱讀
Mysql的字段類型

如何用labview對數據庫進行備份/如何在MySql中使用命令的方式進行數據庫備份(非cmd窗口非手動保存)

想要使用labview對數據庫進行備份,但是不清楚語句,在網上查找的信息中,顯示如果要備份數據庫 有兩個方法1:使用命令mysqldum...
發表于 07-15 16:48 ? 116次 閱讀
如何用labview對數據庫進行備份/如何在MySql中使用命令的方式進行數據庫備份(非cmd窗口非手動保存)

基于MySQL的超市管理信息系統的設計方案

超市管理系統工作流程為:系統啟動并進入登錄界面,系統管理員輸入正確的用戶名及密碼后,登陸系統主操作界....
發表于 07-09 09:09 ? 61次 閱讀
基于MySQL的超市管理信息系統的設計方案

PHPWind二次開發寶典的PDF電子書免費下載

數據查詢描述軟件系統中數據庫或者持久層的基本操作功能, 主要包括增加(Create)、查詢(Retr....
發表于 07-03 08:00 ? 20次 閱讀
PHPWind二次開發寶典的PDF電子書免費下載

虛擬機:CentOS 7安裝MySQL5.7的步驟

虛擬機:CentOS 7安裝MySQL5.7的步驟
的頭像 如意 發表于 07-02 18:00 ? 536次 閱讀
虛擬機:CentOS 7安裝MySQL5.7的步驟

MySQL數據庫:理解MySQL的性能優化、優化查詢

最近一直在為大家更新MySQL相關學習內容,可能有朋友不懂MySQL的重要性。在程序,語言,架構更新....
的頭像 如意 發表于 07-02 17:18 ? 547次 閱讀
MySQL數據庫:理解MySQL的性能優化、優化查詢

整理剖析,只為教你創建MySQL存儲過程

簡單地說,存儲過程就是一條或者多條SQL語句的集合,可視為批文件,但是其作用不僅限于批處理。本篇主要....
的頭像 如意 發表于 07-02 17:11 ? 659次 閱讀
整理剖析,只為教你創建MySQL存儲過程

詳談MySQL數據庫的不同日志和源碼

任何一種數據庫,都會擁有各種各樣的日志,mysql也不例外。
的頭像 如意 發表于 07-02 16:52 ? 906次 閱讀
詳談MySQL數據庫的不同日志和源碼

虛擬機:為icescrum 配置MySQL

虛擬機:為icescrum 配置MySQL
的頭像 如意 發表于 06-22 16:57 ? 433次 閱讀
虛擬機:為icescrum 配置MySQL

Java通過驅動包連接MySQL數據庫的步驟總結及驗證

Java通過驅動包(jar包)連接MySQL數據庫---步驟總結及驗證...
發表于 06-15 16:57 ? 54次 閱讀
Java通過驅動包連接MySQL數據庫的步驟總結及驗證

MySQL索引使用優化和規范

MySQL - 索引使用優化和規范
發表于 06-15 16:01 ? 36次 閱讀
MySQL索引使用優化和規范

PHP+MySQL數據庫編程步驟是怎樣

PHP+MySQL數據庫編程的步驟
發表于 06-15 15:51 ? 29次 閱讀
PHP+MySQL數據庫編程步驟是怎樣

MySQL的索引、事務、視圖介紹

MySQL--索引、事務、視圖
發表于 06-15 07:05 ? 25次 閱讀
MySQL的索引、事務、視圖介紹

c#如何連接mysql數據庫

(visual studio)c#連接mysql數據庫
發表于 06-13 20:56 ? 32次 閱讀
c#如何連接mysql數據庫

MySQL的基礎知識總結

MySQL基礎總結(sqlyog中詢問語句)
發表于 06-13 14:05 ? 29次 閱讀
MySQL的基礎知識總結

基于MySQL索引的壓力測試

MySQL - 基于索引的壓力測試
發表于 06-13 07:57 ? 27次 閱讀
基于MySQL索引的壓力測試

MySQL的學習筆記

MySQL學習筆記之一
發表于 06-12 12:55 ? 34次 閱讀
MySQL的學習筆記

PHP7的內核剖析資料免費下載

PHP是一種非常流行的高級腳本語言,尤其適合Web開發,快速、靈活和實用是PHP最重要的特點。PHP....
發表于 05-20 17:37 ? 89次 閱讀
PHP7的內核剖析資料免費下載

MySQL實現延時復制

公司有一套mysqlAB復制架構的生產庫,一主一從的架構, 每周一凌晨0天都自動做全備。
的頭像 汽車玩家 發表于 05-05 22:20 ? 581次 閱讀
MySQL實現延時復制

淺析MySQL中的各類運算符

MySQL支持多種運算符,我們在寫SQL腳本時經常會需要用到各種各樣的運算符,這些運算符可以用來連接....
的頭像 汽車玩家 發表于 05-03 17:41 ? 382次 閱讀
淺析MySQL中的各類運算符

MySQL為字段選擇合適數據類型

在使用MySQL創建數據表時,經常會遇到如何為字段選擇合適的數據類型的問題,接下來我們一起分析字符串....
的頭像 汽車玩家 發表于 05-03 17:38 ? 572次 閱讀
MySQL為字段選擇合適數據類型

Windows10下安裝MySQL8.0.18的五個步驟

在命令行窗口輸入mysql -u root -p,因為我們初始化的時候加了insecure,所以初始....
的頭像 汽車玩家 發表于 05-03 17:37 ? 2995次 閱讀
Windows10下安裝MySQL8.0.18的五個步驟

MySQL支持的三種數據類型

MySQL支持所有標準SQL數字數據類型。這些類型包括整數類型、定點類型、浮點類型和位置類型
的頭像 汽車玩家 發表于 05-03 17:33 ? 444次 閱讀
MySQL支持的三種數據類型

理解MySQL體系結構的數據庫和實例

在面試中經常會問MySQL的體系結構,接下來詳細分析MySQL的體系結構之前先理解數據庫和實例兩個概....
的頭像 汽車玩家 發表于 05-03 17:28 ? 514次 閱讀
理解MySQL體系結構的數據庫和實例

MySQL流程函數的操作方法

流程函數是一類很常用的函數,我們可以通過流程函數在SQL語句中實現條件選擇,能實現我們想要的條件判斷....
的頭像 汽車玩家 發表于 04-16 17:17 ? 1221次 閱讀
MySQL流程函數的操作方法

MySQL查詢幫助的使用

在使用MySQL過程中,當遇到操作語法、數據類型的取值范圍、功能是否支持等問題時,可以使用MySQL....
的頭像 汽車玩家 發表于 04-16 17:14 ? 474次 閱讀
MySQL查詢幫助的使用

MySQL字符集的設置修改和排序規則

大家都知道,計算機只能識別二進制碼,為了讓計算機能處理文字,人們給每個文字進行編碼,這個編碼就是計算....
的頭像 汽車玩家 發表于 04-16 17:10 ? 1678次 閱讀
MySQL字符集的設置修改和排序規則

MySQL常用的三類函數

經常編寫程序或者使用數據庫的同學一定體會到函數的重要性,豐富的函數往往能使用戶的工作事半功倍。函數能....
的頭像 汽車玩家 發表于 04-16 17:05 ? 543次 閱讀
MySQL常用的三類函數

MySQL中utf8和utf8mb4有什么區別

MySQL在5.5.3之后增加了這個utf8mb4的編碼,mb4就是most bytes 4的意思,....
的頭像 汽車玩家 發表于 04-12 19:21 ? 738次 閱讀
MySQL中utf8和utf8mb4有什么區別

mysql數據庫的五種索引類型

如果是字符串字段,還可以指定索引的長度,在列命令后面加上索引長度就可以了(例如:name(11))
的頭像 汽車玩家 發表于 04-12 18:11 ? 842次 閱讀
mysql數據庫的五種索引類型

MariaDB數據庫管理系統如何安裝和使用

本文講解Centos7默認的數據MariaDB,由于是入門系列文章因此不會深入講解,后面有機會再單獨....
的頭像 Wildesbeast 發表于 04-06 17:29 ? 705次 閱讀
MariaDB數據庫管理系統如何安裝和使用

數據庫到底要不要上Docker

近2年Docker非常的火熱,各位開發者恨不得把所有的應用、軟件都部署在Docker容器中,但是您確....
的頭像 Wildesbeast 發表于 04-06 09:59 ? 794次 閱讀
數據庫到底要不要上Docker

Navicat for MySQL如何才能設置HTTP屬性

HTTP通道是一種連接到服務器的方法,與網絡服務器使用相同的通訊協定(http://)和端口(端口8....
發表于 03-26 16:46 ? 121次 閱讀
Navicat for MySQL如何才能設置HTTP屬性

MySQL數據庫如何安裝和使用說明

MySQL數據庫開發 基礎概念 1.數據:描述事物特征的符號,屬性 2.數據庫的概....
的頭像 Wildesbeast 發表于 02-13 16:13 ? 1018次 閱讀
MySQL數據庫如何安裝和使用說明

Docker是什么?有什么用途?及理論知識詳細說明

Docker是一個虛擬環境容器,可以將你的開發環境、代碼、配置文件等一并打包到這個容器中,并發布和應....
的頭像 Wildesbeast 發表于 02-07 12:34 ? 1462次 閱讀
Docker是什么?有什么用途?及理論知識詳細說明

MYSQL中讀寫分離有什么作用及基本架構說明

現在絕大部分軟件項目,都會使用到關系型數據庫,比如MySQL、Oracle、DB2等等,目前這些數據....
的頭像 Wildesbeast 發表于 02-05 14:40 ? 1337次 閱讀
MYSQL中讀寫分離有什么作用及基本架構說明

Navicat for MySQL 11.0.10應用程序和破解補丁免費下載

本文檔的主要內容詳細介紹的是Navicat for MySQL 11.0.10應用程序和破解補丁免費....
發表于 01-17 08:00 ? 194次 閱讀
Navicat for MySQL 11.0.10應用程序和破解補丁免費下載

如何使用Socket實現網絡聊天系統的設計與實現

隨著Internet的飛速發展,網絡聊天以其操作簡單、方便快捷、私密性好等優點已經迅速發展成為最普遍....
發表于 01-16 11:35 ? 296次 閱讀
如何使用Socket實現網絡聊天系統的設計與實現

數據庫MySQL邏輯結構的設計資料總結

在需求分析的基礎上按照ER圖的方法把現實世界抽象為一個不依賴于任何機器的概念模型。邏輯結構設計的任務....
發表于 01-15 11:34 ? 169次 閱讀
數據庫MySQL邏輯結構的設計資料總結

BS架構及其運行原理的詳細資料說明

在公司做B/S 開發與維護三年啦, 對B/S架構的了解也是只知大概,對于這種基礎知識還是很有必要理一....
發表于 01-02 08:00 ? 969次 閱讀
BS架構及其運行原理的詳細資料說明
山东十一选五彩乐乐