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更加安全的複製格式 在某些情況下複製速度更快( 系統的特殊函式也可以複製 更少的鎖 更新和刪除語句檢查是否有主鍵,如果有則直接執行,如果沒有,看是否有二級索引,如再沒有,則全表掃描 |
binlog比較大(myql5.6支援binlog_row_image) 單語句更新(刪除)表的行數過多,會形成大量binlog 無法從binlog看見使用者執行SQL(5.6中增加binlog_row_query_log_events記錄使用者的query) |
mixed |
混合使用row和statement格式,對於DDL記錄statument,對於table裡的行操作記錄為row格式。 如果使用innodb表,事務級別使用了 但是使用ROW格式中DDL語句還是會記錄成statement格式。 |
mixed模式中,那麼在以下幾種情況下自動將binlog模式由SBR模式改成RBR模式。 當DML語句更新一個NDB表 當函式中包含UUID時 2個及以上auto_increment欄位的表被更新時 行任何insert delayed語句時 用UDF時 檢視中必須要求使用RBR時,例如建立檢視使用了UUID()函式 |
新增一個新的從庫
獲取主庫上一個帶binlog及pos偏移量的備份
在從庫上恢復後
>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.半同步複製的功能要在Master,Slave都開啟,半同步複製才會起作用;否則,只開啟一邊,它依然為非同步複製。
同步(社群增強半同步),非同步,半同步複製的比較:
同步複製:Master提交事務,直到事務在所有的Slave都已提交,此時才會返回客戶端,事務執行完畢。缺點:完成一個事務可能會有很大的延遲。
非同步複製:當Slave準備好才會向Master請求binlog。缺點:不能保證一些事件都能夠被所有的Slave所接收。
半同步複製:半同步複製工作的機制處於同步和非同步之間,Master的事務提交阻塞,只要一個Slave已收到該事務的事件且已記錄。它不會等待所有的Slave都告知已收到,且它只是接收,並不用等其完全執行且提交。
半同步,開啟後嚴重影響效能
解決主庫不關心日誌是否被從庫讀到
半同步配置,在master和slave上都配置
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-id的binlog 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 如果master和slave有個庫同名了,可使用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結