1. 程式人生 > >MySQL資料複製原理及實踐

MySQL資料複製原理及實踐

1.資料複製概述

1.1資料複製定義

資料複製使一個服務上的資料與另一個服務上資料保持同步

1.2複製用途

  • 資料分佈
  • 負載均衡
  • 備份
  • 高可用和故障切換
  • MySQL升級測試

2.資料複製工作原理

2.1複製工作流程介紹(以主從架構為例)

MySQL複製原理比較簡單,其核心工作示意圖如下:
圖2.1

  • 主庫把更新操作記錄在二進位制日誌檔案中
  • 備庫上的I/O執行緒收到主庫的更新事件後,讀取新增的二進位制日誌並寫入自己的中繼日誌中
  • 備庫讀取中繼日誌,將事件在資料庫上重放,更新自身資料庫資料

2.2對主從複製架構的思考

看完圖2.1中MySQL主從架構,讀者會不會感覺如果去掉中繼日誌,整個複製流程會更簡單?中繼日誌究竟在複製架構中產生了什麼作用?

如果備庫去掉寫中繼日誌這個流程,那麼備庫每次只需要讀取binlog事件資料,緊接著直接重放sql事件即可。而增加了中繼日誌,不僅增加了流程的複雜性,而且多了一次寫檔案I/O的操作消耗了系統性能

其實中繼日誌對備機而言就是快取事件的buffer而已,其作用就是對備機的倆個核心操作(讀主機二進位制日誌事件、重放事件)進行非同步解耦。試想如果主機執行了一個比較耗時的修改(alter修改表字段等),如果沒有buffer存在的話,備機只能在執行完這個耗時操作之後才能繼續同步主機上的其他新增二進位制事件,這樣可能會造成很多麻煩(比如在執行耗時操作的過程中主機永久宕機無法恢復,那麼這段時間裡主機新增的大量二進位制日誌,備機將無法重放,造成大量資料丟失,後果嚴重)。

備機寫中繼日誌會有大量I/O操作,會不會影響同步效能呢?正常情況下,中繼日誌的內容都會儲存在系統快取中,所以使用者大可不必擔心

3.資料複製實操

假設如下:

  • 主機IP: 192.168.1.1 備機IP: 192.168.1.2
  • 主機上MySQL有大量實時資料更新操作(MySQL複製的就是更新操作)

3.1為備機開通複製許可權賬號

GRANT REPLICATION SLAVE ON . TO [email protected]‘192.168.1.2’ IDENTIFIED BY ‘replpwd’;```
在主機上執行上述命令便可為備機建立一個專門用於複製的使用者賬號,賬號名為: repluser、密碼為: replpwd

3.2主機開啟binlog功能

預設的mysql是沒有寫binlog的,需要我們修改配置檔案
在/etc/my.cnf的mysqld配置項中增加如下倆行配置

log_bin=/data/mysql/mysql-bin
server_id=100

配置說明:

  • log_bin指明bin_log檔名稱以及路徑(/data/mysql目錄必須存在)
  • server_id根據mysql例項不同,給一個其他例項不重複的值即可

配置完成後重啟MySQL服務,此時在MySQL終端執行如下命令檢視開啟bin_log是否生效

show master status;

圖3.1

如圖3.1此時主機bin_log已啟動,當前bin_log檔名為: mysql-bin.000001 Pos為: 154

備機想要複製主機的資料,就必須要知道主機的bin_log檔名是啥,以及主機寫binlog的pos在哪裡

此時如果你在主機上插入一條資料,再次檢視狀態就會發現bin_log pos會發生移動了

3.3配置備機中繼日誌

預設的MySQL是沒中繼日誌的,需要我們修改配置檔案
在/etc/my.cnf的mysqld配置項中增加如下配置

server_id=101
relay_log=/data/mysql/mysql-relay-bin
read_only=1

配置說明:

  • server_id根據mysql例項不同,給一個其他例項不重複的值即可(注意100已經被主機用了)
  • relay_log指明中繼日誌的名稱(/data/mysql目錄必須存在)
  • read_only備機設定為只讀,防止備機寫操作將資料寫髒
    配置完成後重啟MySQL服務即可

3.4同步克隆主機當前資料快照

MySQL同步資料的核心便是保證倆臺機器上主機bin_log任一位置pos之前的資料完全一致

由於主機在開啟bin_log之前已經有好多資料了(這些資料沒有記錄在binlog裡,所以備機通過重放binlog日誌是無法同步到這些資料的),最常用的方法便是:

  • 設定主機為只讀(主機之後便不會有資料更新了)
  • 通過mysqldump等工具將當前MySQL資料複製並匯入備機
  • 記錄下當前主機的bin_log檔案和pos位置(通過在主機執行show master status獲取)
  • 關閉主機的只讀設定

此時備機便有了和主機某個bin_log位置一樣的快照資料

本文將使用一種更為簡單的方式:
只需執行如下命令便可:

mysqldump --single-transaction  --all-databases  --master-data=2 --host 192.168.1.1 -uroot -p > all_data.sql

該方法相較前一種方法省掉了設定只讀,和記錄bin_log檔案及位置等操作,那麼我們如何獲取bin_log的位置資訊呢,其實開啟mysqldump的輸出檔案all_data.sql,我們發現如下注釋內容:
圖3.2

如圖3.2中所示,在從主機dump資料的那個時刻的主機bin_log資訊都記錄在dump的輸出檔案中了,此時我們只需記錄下紅框框住的這倆個值即可

最後將dump輸出檔案匯入資料庫

source all_data.sql;

3.5為備機配置和主機的連線通道以及bin_log資訊

在sql終端執行如下命令

change master to master_host='192.168.1.1',
master_user='repluser',
master_password='replpwd',
master_log_file='mysql-bin.000002',
master_log_pos=698;

變數說明:

  • master_host: 主機IP
  • master_user: 複製使用者名稱(前文中通過主機分配)
  • master_password: 複製的密碼
  • master_log_file: bin_log檔名(mysqldump輸出檔案中的註釋內容)
  • master_log_pos: 當前bin_log位置(mysqldump輸出檔案中的註釋內容)

此時以為備機配置好了master複製相關引數,接下來只需要在備機執行如下命令,便可跑起來主備複製

start slave;

此時在備機上執行如下命令檢查備機執行情況

show slave status\G;

其中如下倆個指標為Yes,則備機執行正常

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

4.主從一致性

MySQL提供的複製功能並不能保證100%的可靠,一些特殊情況下可能會導致MySQL主從資料發生不一致的情況,此時,我們可以通過一些第三方工具來高效的協助我們應對這樣的Case

  • pt-table-checksum: 檢查主從資料庫是否一致
  • pt-table-sync: 修復主從資料庫不一致現象

5.總結

MySQL複製功能強大,我們在生產環境中可以依據實際需求,靈活搭建:主從、主主、一主多從等多種複製模式來滿足業務需求

相關推薦

MySQL資料複製原理實踐

1.資料複製概述 1.1資料複製定義 資料複製使一個服務上的資料與另一個服務上資料保持同步 1.2複製用途 資料分佈 負載均衡 備份 高可用和故障切換 MySQL升級測試 2.資料複製工作原理 2.1複製工作流程介紹(以主從架構為例) MySQL複製原理比較

mysql主從複製原理實踐

Mysql主從複製原理及實踐 mysql主從框架       MySQL主從架構是MySQL叢集中最基本也是最常用的一種架構部署,能夠滿足很多業務需求,常見的有一主一從或者一主多從。可以防止單一主機的資料丟失,提高資料的安全性,務上可以實現讀寫分離,可以把一些讀操作在從伺服器上執行,減小主伺服器的負擔。 主從

MySQL主從複製原理搭建全過程】

目錄 準備工作 主從複製原理 開始搭建主從複製 本文將使用mariaDB資料庫實現主從複製,其步驟與MySQL資料庫無差異。 MariaDB資料庫管理系統是MySQL的一個分支,主要由開源社群在維護,採用GPL授權許可。 開發這個分支的原因之一是:甲骨文公司收購了MySQL後,有將M

MySQL 主從複製原理建立過程

前言 mysql 是我工作中常用的資料庫,不過僅限於 SQL 操作,通過阿里雲的 RDS 可以快速生成一個例項,對於其原理並不甚瞭解,所以閒暇之餘瞭解了一下,並記錄下來,與大家共享、交流。 目錄 一、MySQL複製技術 1. 複製的

學一點 mysql 雙機異地熱備份----快速理解mysql主從,主主備份原理實踐

server counter ror 位置 正在 大型 主循環 備份 配置詳解 雙機熱備的概念簡單說一下,就是要保持兩個數據庫的狀態自動同步。對任何一個數據庫的操作都自動應用到另外一個數據庫,始終保持兩個數據庫數據一致。 這樣做的好處多。 1. 可以做災備,其中一個壞了可

MySQL主從復制原理實踐

MySQL 主從復制 原理 實踐 第1章 MySQL的主從復制介紹MySQL的主從復制方案,和上述文件及文件系統級別同步是類似的,都是數據的傳輸。只不過MySQL無需借助第三方工具,而是其自帶的同步復制功能。另外一點,MySQL的主從復制並不是磁盤上文件直接同步,而是邏輯的binlog日誌同步

達觀資料王江:fastText原理實踐

fastText是Facebook於2016年開源的一個詞向量計算和文字分類工具,在學術上並沒有太大創新。但是它的優點也非常明顯,在文字分類任務中,fastText(淺層網路)往往能取得和深度網路相媲美的精度,卻在訓練時間上比深度網路快許多數量級。在標準的多核CPU上, 能夠訓練10億詞級

MySQL主從複製原理、半同步操作步驟原理

1.1 企業Linux運維場景資料同步方案 1.1.1 檔案級別的異機同步方案 1、scp/sftp/nc 命令可以實現遠端資料同步。  2、搭建ftp/http/svn/nfs 伺服器,然後在客戶端上也可以把資料同步到伺服器。  3、搭建sa

mysql 複製原理實踐

複製功能是將一個mysql資料庫上的資料復到一個或多個mysql從資料庫上。 複製的原理:在主伺服器上執行的所有DDL和DML語句都會被記錄到二進位制日誌中,這些日誌由連線到它的從伺服器獲取,並複製到從庫,並儲存為中繼日誌, 這個過程由一個稱為 IO執行緒 的執行緒負責,還有一個稱為 SQL執行緒 的則按

MySQL主從複製半同步複製原理搭建

在MySQL5.5之前的版本中,MySQL的複製是非同步複製,主庫和從庫的資料之間存在一定的延遲,比如網路故障等各種原因,這樣子容易存在隱患就是:當在主庫寫入一個事務成功後並提交了,但是由於從庫延遲沒有及時得到主庫推送的Binlog日誌時,主庫突然宕機了,那麼此時從庫就可能損失這個事務,從而造成主從不一致的狀

MySQL傳統複製與GTID複製原理操作詳解

mysql複製在業界裡有叫:mysql同步,ab複製等。專業名稱就是叫:複製 複製是單向的,只能從master複製到slave上,延時基本上是毫秒級別的。 一組複製結構中可以有多個slave,對於master一般場景推薦只有一個。 master使用者寫入資料,生成event記到binary log中 sla

mysql (master/slave)複製原理配置

1 複製概述       Mysql內建的複製功能是構建大型,高效能應用程式的基礎。將Mysql的資料分佈到多個系統上去,這種分佈的機制,是通過將Mysql的某一臺主機的資料複製到其它主機(slaves)上,並重新執行一遍來實現的。複製過程中一個伺服器充當主伺服器,而一個或

高效能Mysql主從架構的複製原理配置詳解

在有些應用場景中,可能讀寫壓力差別比較大,讀壓力特別的大,一個Master可能需要上10臺甚至更多的Slave才能夠支撐注讀的壓力。這時候,Master就會比較吃力了,因為僅僅連上來的SlaveIO執行緒就比較多了,這樣寫的壓力稍微大一點的時候,Master端因為複製就會消耗較多的資源,很容易造成複製的延

mysql 雙機異地熱備份----快速理解mysql主從,主主備份原理實踐

雙機熱備的概念簡單說一下,就是要保持兩個資料庫的狀態自動同步。對任何一個數據庫的操作都自動應用到另外一個數據庫,始終保持兩個資料庫資料一致。 這樣做的好處多。 1. 可以做災備,其中一個壞了可以切換到另一個。 2. 可以做負載均衡,可以將請求分攤到其中任何一臺上,提高網站

MySQL複製原理過程

Replication基本原理 非同步複製:從主機拷貝到備機過程中會有延遲,延遲通常由網路、資源可用性和系統負載來決定。使用合適架構和調優,大多複製幾乎是瞬間完成的。 同步複製:資料同時向一臺或多臺機器提交,保證多系統一致性,但也會帶來額外效能損失,mysql本身不支援同

Mysql之主從架構的複製原理主從/雙主配置詳解(二)

3.深入瞭解複製 3.1、基於語句的複製(Statement-BasedReplication)          MySQL5.0及之前的版本僅支援基於語句的複製(也叫做邏輯複製,logical replication),這在資料庫並不常見。master記錄下改變資料

TensorFlow conv2d原理實踐

滿足 一個 htm batch padding data xxx pad overflow tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name

https原理實踐

ron 普通 erl key 配置 獲取 blog 種類型 uil 轉自 https://www.cnblogs.com/lyq863987322/p/8424253.html 作者 酷酷的二連長 目錄 網絡安全問題 數據機密性 數據完整性 身份驗證 網絡

單臂路由原理實踐

實驗 sha conf term 劃分 dot per 單臂路由 shu 單臂路由單臂路由(router-on-a-stick)是指在路由器的一個接口上通過配置子接口(或“邏輯接口”,並不存在真正物理接口)的方式,實現原來相互隔離的不同VLAN(虛擬局域網)之間的互聯互通。

0day安全:軟體漏洞分析技術 第二章 棧溢位原理實踐

_stdcall呼叫約定下,函式呼叫時用到的指令序列大致如下:push 引數3push 引數2push 引數1call 函式地址;a)向棧中壓入當前指令在記憶體中的位置,即儲存儲存返回地址。b)跳轉到所呼叫函式的入口push ebp 儲存舊棧幀的底部mov ebp,esp 設定新棧幀的底部(棧幀切換)sub