1. 程式人生 > >MySQL傳統複製與GTID複製原理及操作詳解

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

mysql複製在業界裡有叫:mysql同步,ab複製等。專業名稱就是叫:複製

複製是單向的,只能從master複製到slave上,延時基本上是毫秒級別的。

一組複製結構中可以有多個slave,對於master一般場景推薦只有一個。

master使用者寫入資料,生成event記到binary log

slave接收master上傳來的binlog,然後按順序應用,重現master上的使用者操作。

記錄最小的單位是一個event,日誌前4個位元組是一個magic number,接下來19個位元組記錄formatt desc event:FDE

MySQL5.6增加了GTID複製

classic

主從配置

核心配置

[mysqld]

log-bin

server-id

gtid_mode=off #禁掉gtid

grantreplication slave on *.* to 'repl'@'%' identified by 'repl4slave';

flushprivileges;

級別

優點

缺點

statement

binlog檔案較小

日誌是包含使用者執行的原始SQL,方便統計和審計

出現最早,相容較好

存在安全隱患,可能導致主從不一致

對一些系統函式不能準確複製或是不能複製

row

相比statement更加安全的複製格式

在某些情況下複製速度更快(

SQL複雜,表有主鍵)

系統的特殊函式也可以複製

更少的鎖

更新和刪除語句檢查是否有主鍵,如果有則直接執行,如果沒有,看是否有二級索引,如再沒有,則全表掃描

binlog比較大(myql5.6支援binlog_row_image

單語句更新(刪除)表的行數過多,會形成大量binlog

無法從binlog看見使用者執行SQL5.6中增加binlog_row_query_log_events記錄使用者的query

mixed

混合使用rowstatement格式,對於DDL記錄statument,對於table裡的行操作記錄為row格式。

如果使用innodb表,事務級別使用了

READ_COMMITTED or READ_UMCOMMITTED日誌級別只能使用row格式。

但是使用ROW格式中DDL語句還是會記錄成statement格式。

mixed模式中,那麼在以下幾種情況下自動將binlog模式由SBR模式改成RBR模式。

DML語句更新一個NDB

當函式中包含UUID

2個及以上auto_increment欄位的表被更新時

行任何insert delayed語句時

UDF

檢視中必須要求使用RBR時,例如建立檢視使用了UUID()函式

新增一個新的從庫

獲取主庫上一個帶binlogpos偏移量的備份

在從庫上恢復後

>changemaster to

master_host='192.168.199.117',

master_user='slave',

master_port=7000,

master_password='slavepass',

master_log_file='mysql-bin.000008',

master_log_pos=896;

>startslave;

>showslave status\G;

錯誤跳過:

stopslave;

set globalsql_slave_skip_counter=1;

startslave;

show slavestatus\G;

GTID複製配置

一個事務對應一個唯一ID

一個GTID在一個伺服器上只會執行一次

GTID是用來替代以前classic的複製方法

mysql5.62支援,mysql5.6.10後完善

優點:

相對於行復制來講資料安全性更高

故障切換更簡單

GTID

[mysqld]

#GTID:

gtid_mode=on

enforce-gtid-consistency=on

#binlog

log-bin=mysql-bin

log-slave-updates=1

GTID新增從庫有兩種方法:

1.如果master所有的binlog還在,安裝slave後,直接changemaster master

原理是直接獲取master所有的gtid並執行

優點是簡單

缺點是如果binlog太多,資料完全同步需要的時間較長,並且需要master一開始就啟用了GTID

總結:適用於master也是新建不久的情況

2.通過master或者其它slave的備份搭建新的slave.

原理:獲取master的資料和這些資料對應的GTID範圍,然後通過在slave設定@@GLOBAL.GTID_PURGED從而跳過備份包含的GTID

優點是可以避免第一種方法中的不足

缺點操作相對複雜

總結:適用於擁有較大資料集的情況

GTID新增從庫:

mysqldump

在備份的時候需要指定--master-data

匯出的語句中包括:set @@GLOBAL.GTID_PURGED='c8d960f1-83ca-11e5-a8eb-000c29ea831c:1-745497';恢復時,需要先在slave上執行一個

reset master;再執行

changemaster to

perconaxtrabackup

xtrabackup_binlog_info包含了GTID在資訊

做從庫恢復後,需要手工設定:

[email protected]@GLOBAL.GTID_PURGED='c8d960f1-83ca-11e5-a8eb-000c29ea831c:1-745497';

恢復後,執行change master to

>changemaster to

master_host='192.168.199.117',

master_user='slave',

master_port=7000,

master_password='slavepass',

master_auto_position=1;

錯誤跳過

stopslave;

setgtid_next='xxxxxxxx:N';

begin;

commit;

setgtid_next='automatic';

startslave;

rpel

change master

error

classic

change master to

master_host='192.168.199.117',

master_user='slave',

master_port=7000,

master_password='slavepass',

master_log_file='mysql-bin.000008',

master_log_pos=896;

stop slave;

set global sql_slave_skip_counter=1;

start slave;

show slave status\G;

GTID

change master to

master_host='192.168.199.117',

master_user='slave',

master_port=7000,

master_password='slavepass',

master_auto_position=1;

stop slave;

set gtid_next='xxxxxxxx:N';

begin;

commit;

set gtid_next='automatic';

start slave;

GTID的限制:

不支援非事務引擎(從庫報錯,stopslave; start slave; 忽略)

不支援create table … select 語句複製(主庫直接報錯)

不允許在一個SQL同時更新一個事務引擎和非事務引擎的表

在一個複製組中,必須要求統一開啟CTID或是關閉GTID

開啟DTID需要重啟(5.7中可能不需要)

開啟DTID後,就不在使用原來的傳統的複製方式

對於createtemporary table drop temporary table語句不支援

不支援sql_slave_skip_counter

MySQL複製預設是非同步複製,Master將事件寫入binlog,但並不知道Slave是否或何時已經接收且已處理。在非同步複製的機制的情況下,如果Master宕機,事務在Master上已提交,但很可能這些事務沒有傳到任何的Slave上。假設有Master->Salve故障轉移的機制,此時Slave也可能會丟失事務。

官方半同步複製的概念:

1.Slave主機連線到Master時,能夠檢視其是否處於半同步複製的機制。

2.Master上開啟半同步複製的功能時,至少應該有一個Slave開啟其功能。此時,一個執行緒在Master上提交事務將受到阻塞,直到得知一個已開啟半同步複製功能的Slave已收到此事務的所有事件,或等待超時。

3.當一個事務的事件都已寫入其relay-log中且已重新整理到磁碟上,Slave才會告知已收到。

4.如果等待超時,也就是Master沒被告知已收到,此時Master會自動轉換為非同步複製的機制。當至少一個半同步的Slave趕上了,Master與其Slave自動轉換為半同步複製的機制。

5.半同步複製的功能要在MasterSlave都開啟,半同步複製才會起作用;否則,只開啟一邊,它依然為非同步複製。

同步(社群增強半同步),非同步,半同步複製的比較:

同步複製:Master提交事務,直到事務在所有的Slave都已提交,此時才會返回客戶端,事務執行完畢。缺點:完成一個事務可能會有很大的延遲。

非同步複製:當Slave準備好才會向Master請求binlog。缺點:不能保證一些事件都能夠被所有的Slave所接收。

半同步複製:半同步複製工作的機制處於同步和非同步之間,Master的事務提交阻塞,只要一個Slave已收到該事務的事件且已記錄。它不會等待所有的Slave都告知已收到,且它只是接收,並不用等其完全執行且提交。

半同步,開啟後嚴重影響效能

解決主庫不關心日誌是否被從庫讀到

半同步配置,在masterslave上都配置

master

[mysqld]

rpl_semi_sync_master_enabled=1

rp;_semi_sync_master_timeout=1000#1s

slave

[mysqld]

rpl_semi_sync_slave_enabled=1

複製引數

master

slave

log-bin=/data/mysql/mysql3316/logs/mysql-bin

server-id=[ip]port

log-bin-index=mysql-bin.index

binlog_format=row

binlog_cache_size=1M

max_binlog_size=1G

sync_binlog=0

expire_logs_days=7

log_bin_trust_function_creators=1 #使用儲存過程或函式開啟

enforce-gtid-consistency=1

gtid-mode=on

gtid-next

gtid-purged

gtid-execued

執行過的gtid

複製過濾

建議能不用就不用,如果必須用,在從庫上操作,不要在主庫上設定

====================

binlog-do-db

binlog-ignore-db

server-id

log_slave_updates

#會把複製的binlog也寫到binlog

relay_log_recover=1

#slave崩潰或正常啟動時,未應用完的relay_log會被刪掉,重新從master請求binlog再次生成relay_log

skip-slave-start

slave_transaction_retries

#slave複製中,如果因為innodb死鎖或者鎖超時導致複製執行緒執行的事務失敗重試次數,一般為5

slave_parallel_workers

#5.6引入基於庫計併發複製的功能,預設是關閉的

read-only

#開啟只讀,但對有super許可權的使用者無效

slave_net_timeout = 10#預設3600s

slave_skip_errors

log-slow-slave-statements

#預設複製慢語句不會記錄到慢日誌中,啟動此功能,會把複製中超過long_query_time的語句記錄到慢日誌中

max_relay_log_size

設定relay_log的最大大小,建議不設定

relay-log-info-file

#relay_log的索引檔案

relay_log_purge

預設開啟,在relay_log使用完畢後,儘可能的清理掉

replicate-same-server-id

對於相同的server-idbinlog event預設不執行

slave_load_tmpdir

對於複製load data in file語句,slave指定建立臨時檔案的目錄,預設是tmpdir

relay_log_space_limit

限制relay_log戰勝磁碟的總大小

===========================

#slave to filter

replicate-do-db

replicate-ignore-db

repicate-rewrite-db

如果masterslave有個庫同名了,可使用rewrite規則,將這個庫上的複製重寫到另一個新的庫上

replicate-do-table

replicate-ignore-table

replicate-wild-do-table

replicate-wild-ignore-table

相關推薦

MySQL傳統複製GTID複製原理操作

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

高性能Mysql主從架構的復制原理配置

應用場景 難點 要點 一行 tar distrib 控制 成功 實時性 1 復制概述 Mysql內建的復制功能是構建大型,高性能應用程序的基礎。將Mysql的數據分布到多個系統上去,這種分布的機制,是通過將Mysql的某一臺主機的數據復制到其它主機(slaves

SSH遠端連線原理操作

首先,SSH是目前較為可靠,建立在應用層和傳輸層基礎上的,專為遠端登入會話和其他網路服務提供安全性。利用SSH可以有效防止遠端管理過程中的資訊洩漏問題。通過SSH,可以把所有傳輸的資料進行加密,而且SSH還有一個額外的好處就是傳輸的資料是經過加密處理的,所以可以加快傳輸的速度。SSH還有其他的很多功能,他既可

MySQL傳統複製GTID複製原理闡述

MySQL複製 MySQL非同步複製架構中傳統複製的原理闡述 MySQL非同步複製架構中GTID複製的原理闡述 一、GTID的概述: 二、GTID的組成部分: 三、GTID如何產生 四、GTID相關的變數 五、GTID比

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

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

MySQL 分區表原理使用

當前 多好 系統 lob 我們 連續 range 數據分區 拆分 1.什麽是表分區: 表分區,是指根據一定規則,將數據庫中的一張表分解成多個更小的,容易管理的部分。從邏輯上看,只有一張表,但是底層卻是由多個物理分區組成。 2.表分區與分表的區別: 分表:指的是通過一定規則,

【Spring】Spring MVC原理配置

進行 return sub sca scrip uil 線程安全 松耦合 必須 1.Spring MVC概述: Spring MVC是Spring提供的一個強大而靈活的web框架。借助於註解,Spring MVC提供了幾乎是POJO的開發模式,使得控制器的開發和測試更加簡

zabbix實現原理架構

收集 信息 核心 狀態 start 原理 整體架構 比較 zabbix 想要用好zabbix進行監控,那麽我們首要需要了解下zabbix這個軟件的實現原理及它的架構。建議多閱讀官方文檔。 一、總體上zabbix的整體架構如下圖所示: 重要組件說明: 1)zabbix se

Spring MVC原理配置

對象 classpath oca entity attribute nco conf nal spring Spring MVC原理及配置 1.Spring MVC概述: Spring MVC是Spring提供的一個強大而靈活的web框架。借助於註解,Spring MVC提

batchnorm原理程式碼(筆記2)

Batchnorm原理詳解 前言:Batchnorm是深度網路中經常用到的加速神經網路訓練,加速收斂速度及穩定性的演算法,可以說是目前深度網路必不可少的一部分。 本文旨在用通俗易懂的語言,對深度學習的常用演算法–batchnorm的原理及其程式碼實現做一個詳細的解讀。本文主要包括以下幾個

晶振工作原理引數

晶振工作原理及引數詳解(最透徹) 晶振是石英晶體諧振器(quartz crystal oscillator)的簡稱,也稱有源晶振,它能夠產生中央處理器(CPU)執行指令所必須的時鐘頻率訊號,CPU一切指令的執行都是建立在這個基礎上的,時鐘訊號頻率越高,通常CPU的執行速度也就越快。 只要是包

Aircrack-ng套件——無線破解原理工具

前言: 現行的無線協議標準在安全方面是完全達標的,是非常安全的。如果現行的無線標準在很被攻破了,業界為什麼還一直在使用這一標準。 因此,破解之所以能成功,完全是因為USR配置路由器不當和密碼強度低的漏洞罷了。 普通無線加密及破解的分類: 1,wep加密:此類加密比較老舊,

Django中CSRF原理應用

 Web開發中十分重要的一項內容就是Web安全,在我們進行服務端構建的時候,最常見的幾種Web攻擊無非是下面的這幾種:            1.注入(SQL注入)            2.跨站指令碼攻擊(XSS)            3.跨站請求偽造(CSRF)

iOS APP啟動原理檢視~

原文地址::https://blog.csdn.net/shihuboke/article/details/73929485   相關文章 1、iOS APP啟動函式呼叫順序~詳解----https://blog.csdn.net/shihuboke/article/detai

tensorflow-deeplab-resnet 原理程式碼

前言: 程式碼的model.py,network.py是建立深度學習網路的部分,這部分程式碼風格與Faster-RCNN_TF那個程式的風格非常相似,也很簡單,不再多做介紹。這裡主要介紹train.py、image_reader.py其他還有inference

Node Js 基本工作原理流程

1,專案前期準備: 以express 框架為例 npm i express-generator -g //全域性安裝express框架 express -e //生成express應用骨架 npm i //安裝依賴 npm start //在3000埠監聽 拓展

MySQL索引設計背後的資料結構演算法

在我們公司的DB規範中,明確規定: 1、建表語句必須明確指定主鍵 2、無特殊情況,主鍵必須單調遞增 對於這項規定,很多研發小夥伴不理解。本文就來深入分析MySQL索引設計背後的資料結構和演算法,從而幫你釋疑以下幾個問題: 1、為什麼InnoDB表需要主鍵? 2、為什麼建議InnoDB表主鍵是單調

Sqoop核心原理應用

Sqoop依賴與hadoop        資料的一方,儲存在hdfs        底層的資料傳輸實現map/reduce yarn 只有map任務 因為官網sqoop沒有had

ptrace執行原理使用

你想過怎麼實現對系統呼叫的攔截嗎?你嘗試過通過改變系統呼叫的引數來愚弄你的系統kernel嗎?你想過偵錯程式是如何使執行中的程序暫停並且控制它嗎? 你可能會開始考慮怎麼使用複雜的kernel程式設計來達到目的,那麼,你錯了。實際上Linux提供了一種優雅的機制來完成這些:p

BeanFactory FactoryBean的區別FactoryBean

原文地址:http://blog.csdn.net/is_zhoufeng/article/details/38422549 首先要分辨BeanFactory 與 FactoryBean的區別, 兩個名字很像,所以容易搞混 BeanFactory: 以Factory結