第一個就是使用優化查詢的方法。這個在前期的內容中有具體說明,這裡不再做說明。 第二、這裡簡要說明一個以下幾個方法: 主從複製、讀寫分離、負載均衡 目前,大部分的主流關係型資料庫都提供了主從複製的功能,通過配置兩台(或多台)資料庫的主從關係,可以將一臺資料庫伺服器的數據更新同步到另一臺伺服器上。網站可 ...
第一個就是使用優化查詢的方法。這個在前期的內容中有具體說明,這裡不再做說明。
第二、這裡簡要說明一個以下幾個方法:
主從複製、讀寫分離、負載均衡
目前,大部分的主流關係型資料庫都提供了主從複製的功能,通過配置兩台(或多台)資料庫的主從關係,可以將一臺資料庫伺服器的數據更新同步到另一臺伺服器上。網站可以利用資料庫的這一功能,實現資料庫的讀寫分離,從而改善資料庫的負載壓力。一個系統的讀操作遠遠多於其寫操作,因此寫操作發向master,讀操作發向slaves進行操作(簡單的輪循演算法來決定使用哪個slave)。
利用資料庫的讀寫分離,web伺服器在寫數據的時候,訪問著資料庫(Master),主資料庫通過主從複製機制將數據更新同步到從資料庫(Slave),這樣web伺服器讀數據的時候,就可以通過從資料庫獲得數據。這一方案使得在大量讀操作的web應用可以輕鬆地讀取數據,而主資料庫也只會承受少量的寫入操作,還可以實現數據熱備份,可謂是一舉兩得的方案。
1.複製的基本原則
MySQL複製是非同步的且串列化的;
每個Slave只有一個Master;
每個Slave只有一個唯一的伺服器ID;
每個Master可以有多個Slave;
2.一主一從常見配置:
MySQL版本一致且後臺以服務運行;
主從都配置在[mysqld]結點下,都是小寫,主機修改my.ini配置文件,從機修改my.cnf配置文件,因修改過配置文件,請主機+從機都重啟後臺MySQL服務;
主機從機都關閉防火牆;
在Windows主機上建立賬戶並授權slave;
在Linux從機上配置需要複製的主機;
主機新建庫,新建表,insert記錄,從機複製;
通過stop slave 停止從機複製;
主從複製的原理:
影響MySQL-A資料庫的操作,在資料庫執行後,都會寫入本地的日誌系統A中。假設,實時的將變化了的日誌系統中的資料庫事件操作,通過網路發給MySQL-B。MySQL-B收到後,寫入本地日誌系統B,然後一條條地將資料庫事件在資料庫中完成。那麼MySQL-A的變化,MySQL-B也會變化,這樣就是所謂的MySQL的複製。
在上面的模型中,MySQL-A就是主伺服器,即master,MySQL-B就是從伺服器,即slave。
日誌系統A,其實它是MySQL的日誌類型的二進位日誌,也就是專門用來保存修改資料庫的所有動作,即bin log。【註意MySQL會在執行語句之後,釋放鎖之前,寫入二進位日誌,確保事務安全。】
日誌系統B,並不是二進位日誌,由於它是從MySQL-A的二進位日誌複製過來的,並不是自己的資料庫變化產生的,有點接力的感覺,稱為中繼日誌,即relay log。
可以發現,通過上面的機制,可以保證MySQL-A和MySQL-B的資料庫數據一致,但是時間上肯定有延遲,即MySQL-B的數據是滯後的。
簡化版:
MySQL主(稱master)從(稱slave)複製的原理:
1.master將數據改變記錄到二進位日誌(binary log)中,也即是配置文件log-bin指定的文件(這些記錄叫做二進位日誌事件,binary log events)
PS:從圖中可以看出,Slave伺服器中有一個I/O線程(I/O Thread)在不停地監聽Master的二進位日誌(binary log)是否有更新:如果沒有,它會睡眠等待Master產生新的日誌事件;如果有新的日誌事件(log events),則會將其拷貝至Slave伺服器中的中繼日誌(relay log)。
2.slave將master的二進位日誌事件(binary log events)拷貝到它的中繼日誌(relay log)。
3.slave重做中繼日誌中的事件,將Master上的改變反映到它自己的資料庫中。所以兩端的數據是完全一樣的。
PS:從圖中可以看出,Slave伺服器有一個SQL線程(SQL Thread)從中繼日誌讀取事件,並重做其中的事件,從而更新Slave的數據,使其與Master中的數據一致。只要該線程與I/O線程保持一致,中繼日誌通常會位於OS的緩存中,所以中繼日誌的開銷很小。
主從複製的幾種方式:
1.同步複製
主伺服器在將更新的數據寫入它的二進位日誌(binlog)文件中後,必須等待驗證所有的從伺服器的更新數據是否已經複製到其中,之後才可以自由處理其他進入的事務處理請求。
2.非同步複製
主伺服器在將更新的數據寫入它的二進位日誌(binlog)文件中後,無需等待驗證更新數據是否複製到從伺服器中,就可以自由處理其他進入的事務處理請求。
3.半非同步複製
主伺服器在將更新的數據寫入它的二進位日誌(binlog)文件中後,只需等待驗證其中一臺從伺服器的更新數據是否已經複製到其中,就可以自由處理其他進入的事務處理請求,其他的從伺服器不用管。
資料庫分表、分區、分庫
分表見上期描述。
分區就是把一張表的數據分成多個區塊,這些區塊可以在一個磁碟上,也可以在不同的磁碟上,分區後,錶面上還是一張表,但數據散列在多個位置,這樣一來,多塊硬碟同時處理不同請求,從而提高磁碟IO讀寫性能,實現比較簡單。包括水平分區和垂直分區。
分庫是根據業務不同把相關的表且分到不同的資料庫中,比如web、bbs、blog等庫。