咱們知道單個Mysql引用的性能是有極限的,隨着應用業務數據不斷的增大,隨之讀寫操做併發量巨大,致使應用的響應速度不斷降低,甚至會形成數據庫直接不可用。咱們知道數據寫操做會形成表鎖,或者行鎖來實現數據庫的事務隔離。單個Mysql應用要同時處理讀、寫操做,勢必會形成數據庫的性能更進一步的降低。在使用大多數應用中咱們發現大多數的請求都是查詢操做。此時,咱們能夠將數據庫擴展成主從複製模式 ,將讀操做和寫操做分離開來,多臺數據庫分攤請求,從而減小單庫的訪問壓力,進而應用獲得優化,響應速度提高。mysql
MySQL數據庫的主從複製方案,使用的是scp/rsync等命令進行的文件級別複製相似,都是數據的遠程傳輸,只不過MySQL的主從複製是其自帶的功能,無需藉助第三方工具。並且,MySQL的主從複製並非數據庫磁盤上的文件直接拷貝,而是經過邏輯的binlog日誌複製到要同步的服務器本地,而後由本地的線程讀取日誌裏面的SQL語句從新應用到MySQL數據庫中。linux
MySQL同步操做經過3個線程實現,其基本步驟以下:sql
詳細文檔見同目錄文件:Mysql主從複製集羣搭建-基於DockerCompose.md數據庫
詳細文檔見同目錄文件:Mysql主從複製集羣搭建-Linux版.md安全
一般狀況下,會使用 主服務器 對數據進行 更新、刪除 和 新建 等操做,而將 查詢 工做落到 從庫 頭上。服務器
能夠將主服務器上的數據同步到 異地從服務器 上,極大地提升了 數據安全性。併發
數據庫的複製功能實現了 主服務器 與 從服務器間 的數據同步,一旦主服務器出了 故障,從服務器當即擔當起主服務器的角色,保障系統持續穩定運做。負載均衡
主從複製 模式支持 2
種擴展方式:工具
向上擴展或者 縱向擴展,主要是提供比如今服務器 性能更好 的服務器,好比 增長 CPU
和 內存 以及 磁盤陣列等,由於有多臺服務器,因此可擴展性比單臺更大。性能
向外擴展或者 橫向擴展,是指增長 服務器數量 的擴展,這樣主要能分散各個服務器的壓力。
搭建主從確定會增長成本,畢竟一臺服務器和兩臺服務器的成本徹底不一樣,另外因爲主從必需要開啓 二進制日誌,因此也會形成額外的 性能消耗。
從庫從主庫 複製數據確定是會有必定的 數據延遲 的。因此當剛插入就出現查詢的狀況,可能查詢不出來。固然若是是插入者本身查詢,那麼能夠直接從 主庫 中查詢出來,固然這個也是須要用代碼來控制的。
主從複製 主要是針對 讀遠大於寫 或者對 數據備份實時性 要求較高的系統中。由於 主服務器 在寫中須要更多操做,並且 只有一臺 能夠寫入的 主庫,因此寫入的壓力並不能被分散。
MySQL的主從複製並不完美,存在着幾個由來已久的問題,首先一個問題是複製方式:
混合方式就是有mysql自動選擇RBR方式和SBR方式,可以充分發揮兩種方式的優勢,通常狀況下都使用該種方式實現主從複製
server_id
在局域網內必須 惟一