MySQL:主從相關知識點盤點

本篇內容包括:MySQL 主從復制簡介、主從復制的原理以及主從搭建

一、MySQL 主從復制簡介

在實際的生產中,為了解決Mysql的單點故障已經提高MySQL的整體服務性能,一般都會采用**「主從復制」**。

比如:在復雜的業務系統中,有一句sql執行后導致鎖表,并且這條sql的的執行時間有比較長,那么此sql執行的期間導致服務不可用,這樣就會嚴重影響用戶的體驗度。

主從復制中分為「主服務器(master)「和」從服務器(slave)」,「主服務器負責寫,而從服務器負責讀」,Mysql的主從復制的過程是一個**「異步的過程」**。

這樣讀寫分離的過程能夠是整體的服務性能提高,即使寫操作時間比較長,也不影響讀操作的進行。

mysql主從同步的過程:

  1. master提交完事務后,寫入binlog
  2. slave連接到master,獲取binlog
  3. master創建dump線程,推送binglog到slave
  4. slave啟動一個IO線程讀取同步過來的master的binlog,記錄到relay log中繼日志中
  5. slave再開啟一個sql線程讀取relay log事件并在slave執行,完成同步
  6. slave記錄自己的binglog

二、主從復制的原理

首先放一張Mysql主從復制的原理圖,總的來說Mysql的主從復制原理還是比較好理解的,原理非常的簡單。

img

Mysql的主從復制中主要有三個線程:master(binlog dump thread)、slave(I/O thread 、SQL thread),Master一條線程和Slave中的兩條線程。

master(binlog dump thread)主要負責Master庫中有數據更新的時候,會按照binlog格式,將更新的事件類型寫入到主庫的binlog文件中。

并且,Master會創建log dump線程通知Slave主庫中存在數據更新,這就是為什么主庫的binlog日志一定要開啟的原因。

I/O thread線程在Slave中創建,該線程用于請求Master,Master會返回binlog的名稱以及當前數據更新的位置、binlog文件位置的副本。

然后,將binlog保存在 「relay log(中繼日志)」 中,中繼日志也是記錄數據更新的信息。

SQL線程也是在Slave中創建的,當Slave檢測到中繼日志有更新,就會將更新的內容同步到Slave數據庫中,這樣就保證了主從的數據的同步。

以上就是主從復制的過程,當然,主從復制的過程有不同的策略方式進行數據的同步,主要包含以下幾種:

  1. 「同步策略」:Master會等待所有的Slave都回應后才會提交,這個主從的同步的性能會嚴重的影響。****
  2. 「半同步策略」:Master至少會等待一個Slave回應后提交。
  3. 異步策略:Master不用等待Slave回應就可以提交。
  4. 延遲策略:Slave要落后于Master指定的時間。

對于不同的業務需求,有不同的策略方案,但是一般都會采用最終一致性,不會要求強一致性,畢竟強一致性會嚴重影響性能。


三、主從搭建

待完善…

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535510.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535510.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535510.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

oracle導出expdp

expdp/impdp 是 oracle 10g 版本后推出的服務器端工具--數據泵,作用是為了將數據庫中的邏輯對象,比如表、用戶、全庫、表空間進 行導入,導出 命令解析 ATTACH ATTACH [[schema_name.]job_name] schema_name 表示用戶名,job_name 表示導出的作…

oracle導入impdp

expdp/impdp 是 oracle 10g 版本后推出的服務器端工具--數據泵,作用是為了將數據庫中的邏輯對象,比如表、用戶、全庫、表空間進 行導入,導出REMAP_DATAFILE 該選項用于將源數據文件名轉變為目標數據文件名, 在不同平臺之間搬移表空間時可能需…

oracle高水位線

ORACLE在邏輯存儲上分4個粒度: 表空間, 段, 區 和 塊. 1.1 塊: 是粒度最小的存儲單位,現在標準的塊大小是8K,ORACLE每一次I/O操作也是按塊來操作的,也就是說當ORACLE從數據文件讀數據時,是讀取多少個塊,而不是多少行. 每一個Block里可以包含多個row. 1.2 區:…

oracle檢查點

檢 查 點 概述 ■l當修改數據時,需要首先將數據讀入內存中(Buffer Cache),修改數據的同時,Oracle會記錄重做信息(Redo)用于恢復。因 為有了重做信息的存在,Oracle不需要在提交時…

文獻翻譯:Java theory and practice: Fixing the Java Memory Model, Part 2

Java theory and practice: Fixing the Java Memory Model, Part 2 譯:Java 理論與實踐:修復 Java 內存模型,第 2 部分 翻譯自:http://www.ibm.com/developerworks/library/j-jtp03304/(原文寫于2004年3月&#xff0…

oracle的buffercache

LRU空閑或者干凈的鏈,可以從這里找到未修改的數據LRUW臟鏈,一個臟塊同時掛到了lruw和檢查點隊列,LRUW分冷端和熱端,冷端即為更新頻率較低的一端,熱端為更新頻率較高的一端,dbwn寫入數據文件時從冷端開始寫入…

oracle的undo

Undo段中區的狀態free expiredinactiveactive 顯示UNDO區信息 SELECT extent_ id, bytes, status FROM dba_ _undo_ _extentsWHERE segment_ name SYSSMU1S ; 圖解一一個事務的操作流程 Undo段的組成:段頭、回滾塊 事務ID …

SQLPlus命令詳細說明

SQLPlus命令詳細說明 2011-10-19 17:23:01 分類: Oracle 1. 執行一個SQL腳本文件 SQL>start file_name SQL> file_name 2. 對當前的輸入進行編輯 SQL>edit 3. 重新運行上一次運行的sql語句 SQL>/ 4. 將顯示的內容輸出到指定文件 SQL> S…

oracle的EMCTL

Microsoft Windows [版本 6.1.7601] 版權所有 (c) 2009 Microsoft Corporation。保留所有權利。 C:\Users\Administrator>emctl start dbconsole Environment variable ORACLE_UNQNAME not defined. Please set ORACLE_UNQNAME to da tabase unique name. C:\Users\Administ…

RHEL7 修改SSH默認端口

1.查詢seliunx [roottest10597 ~]# getenforce Enforcing [roottest10597 ~]# semanage port -l|grep ssh ssh_port_t tcp 222.設置selinux端口 [roottest10597 ~]# semanage port -a -t ssh_port_t -p tcp 10022 [roottest10597 ~]# semanage …

oracle預定義異常

NO_DATA_FOUND:執行查詢無數據、引用一個末初使化的表、通過UTL_FILE包調用到尾的文件TOO_MANY_ROWS:采用SELECT INTO語句,但返回的記錄超過了1條DUP_VAL_ON_INDEX:插入或者更新語句,與唯一索引相沖突TIMEOUT_ON_RESOURCE:等待資源…

常用系統函數oracle

單行函數日期函數ADD_MONTHS(date, n):用于從一個日期值增加或減少一些月份 MONTHS_BETWEEN(date1, date2):判斷兩個日期之間相差的月份 LAST_DAY(date): 函數返回包含日期的月份的最后一天 ROUND(date[,fmt]): 將日期d按照fmt指定的格式舍入,fmt為字符串 TRU…

oracle游標

游標(cursor )是一個私有的SQL工作區域,是一個指向上下文區的句柄或指針,位于內存中的 "臨時表"。 游標是SQL的一個內存工作區,由系統或用戶以變量的形式定義。游標的作用就是用于臨時存儲從數據庫中提取的數據塊。在某…

找出占用cpu最高的線程

ps -eo %cpu,pid |sort -n -k1 -r | head -n 1| awk {print $2}| xargs top -b -n1 -Hp | grep COMMAND -A1 |tail -n 1 |awk {print $1}| xargs printf 0x%x ? 在命令行輸入top,然后shiftp查看占用CPU最高的進程,記下進程號 ? 在命令行輸入top -Hp…

系統學習SpringFramework:Spring 概述

本篇內容包括:Spring/SpringFrame 概述、Spring IOC 和 AOP 概述、Spring 全家桶內容概述(包括:Spring Boot、Spring Cloud、Spring Cloud data flow …)等內容! 一、Spring/SpringFrame 概述 Spring 是一個生態體系&…

存儲過程與函數oracle

存儲在數據庫中供所有用戶程序調用的子程序叫做存儲過程,存儲函數。 存儲過程是在大型數據庫系統中,用PL/SQL語言編寫的能完成一定處理功能的存儲在數據庫字典中的程序,它是一個命名的 PL/SQL 塊,經編譯后存儲在數據庫中&#xff…

系統學習SpringFramework:Spring IOC

本篇內容包括:IOC 和 DI 的概念、Spring 容器,即 BenaFactory 與 AplicationConext 等 IOC 相關內容。 一、IOC 和 DI 的概念 1、IOC IoC(Inversion of control )即“控制反轉”,它是一種設計思想而非一個技術實現。…

徹底卸載oracle

linux刪除Oracle安裝目錄下的所有文件和文件夾即可。windows 1.關閉oracle所有的服務。可以在windows的服務管理器中關閉 2.打開注冊表:regedit 打開路徑: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ 刪除該路徑下的所有以oracle開始的服務…

系統學習SpringFramework:Spring AOP

本篇內容包括:Spring AOP 概述(AOP 簡介、AOP 為什么叫面向切面編程、AOP 主要用來解決的問題 和 AOP 的相關術語)、Spring AOP Demo(xml 方式、注解方式)以及相關知識點(JDK 動態代理和 CGLIB 代理、Sprin…

rowid

ROWID的格式rowidOOOOOOFFFBBBBBBRRR說明數據對象號相對文件號數據塊號行號 上述表格是Oracle 9i及以上版本數據庫中的rowid格式: 6位對象號3位相對文件號6位數據塊號3位行號,是一個18位的64進制值。這個18位的64進制值在數據庫內卻是以10個bytes合計80個bit的二進制…