mysql gtid ha_MySQl新特性 GTID

GTID簡介

概念

全局事務標識符(GTID)是創建的唯一標識符,并與在源(主)服務器上提交的每個事務相關聯。此標識符不但是唯一的,而且在給定復制設置中的所有服務器上都是唯一的。所有交易和所有GTID之間都有一對一的映射關系。

GTID由source_id和transaction_id組成

GTID = source_id:transaction_id

server_uuid一般為source_id

GTID集合

GTID總是保存在主從之間。這意味著您可以通過檢查二進制日志來確定應用于任何從屬設備的任何事務的來源。另外,一旦給定GTID的事務在給定的服務器上被提交,任何具有相同GTID的后續事務都被該服務器忽略。因此,在主站上提交的事務只在從站上應用一次,這有助于保證一致性。

GTID的生成和生命周期:

1,事務在主服務器上執行并提交。使用主服務器的UUID和此服務器上尚未使用的最小非零事務序列號為該事務分配一個GTID; GTID被寫入到master的二進制日志中

2,在將二進制日志數據發送到從站并存儲在從站的中繼日志中,從站讀取GTID并設置gtid_next這告訴slave,下一個事務必須使用這個GTID記錄。

3,從服務器驗證這個GTID是否應用此事務。

4,因為gtid_next不是空的,把git_next也就是從主機中獲得的GTID寫入到二進制日志中。

mysql.gtid_executed表

該mysql.gtid_executed表使從機能夠在從機上禁用二進制日志記錄時使用GTID,并且可以在二進制日志丟失時保留GTID歷史記錄。

若將mysql.gtid_executed表復位,執行RESET MASTER

表格提供會周期性的壓縮 當數量達到executed_gtid_compression_period值或者日志輪轉時候mysql壓縮儲存,值默認為1000,壓縮線程thread/sql/compress_gtid_table

mysql> SELECT * FROM performance_schema.threads WHERE NAME LIKE'%gtid%'\G

*************************** 1. row ***************************

THREAD_ID: 26

NAME: thread/sql/compress_gtid_table

TYPE: FOREGROUND

PROCESSLIST_ID: 1

PROCESSLIST_USER: NULL

PROCESSLIST_HOST: NULL

PROCESSLIST_DB: NULL

PROCESSLIST_COMMAND: Daemon

PROCESSLIST_TIME: 1509

PROCESSLIST_STATE: Suspending

PROCESSLIST_INFO: NULL

PARENT_THREAD_ID: 1

ROLE: NULL

INSTRUMENTED: YES

HISTORY: YES

CONNECTION_TYPE: NULL

THREAD_OS_ID: 18677

實踐

兩臺機器

172.16.10.53

172.16.10.54

步驟

1,將master 設置read-only,使slave趕上master更新速度

mysql >set global read-only

注:read-only 設置時候super用戶可寫,普通用戶不可寫。

2,停止兩臺機器

>mysqladmin -uroot -p shutdown

3,修改配置,啟用GTID功能,要啟用基于GTID的復制,必須通過將gtid_mode變量 設置為啟用GTID模式啟動每個服務器 ON,并enforce_gtid_consistency 啟用變量以確保只記錄對基于GTID的復制安全的語句。在slave機器啟動之前,使用--skip-slave-start禁用slave的復制進程。

由于在MySQL 5.7.5中增加了mysql.gtid_executed,所以不需要slave機器啟用二進制日志記錄來使用GTID 。這意味著您可以使用GTID但沒有二進制日志記錄的從服務器。為了能夠復制,主設備必須始終啟用二進制日志記錄。而slave,只需要配置這些變量:

gtid_mode=ON

enforce-gtid-consistency=true

不過為了高可用的切換,推薦選擇如下配置

gtid_mode=ON #必選

enforce-gtid-consistency=true #必選

log-bin=mysql #5.6必選 5.7.5和它之后可選,為了高可用,最好設置

server-id=1 #開啟log-bin的必須設置

log-slave-updates=ON # 5.6必選 5.7.5和它之后可選,為了高可用切換,最好設置ON

4, 配置slave使用GTID來進行同步數據,當然需要在master給slave開通權限

grant replication slave on *.* to repl@"172.16.10.53" identified by "password";

設置GTID同步模式

change master to master_host='172.16.10.53',master_user='repl',master_port=3306,master_password="password",master_auto_position=1;

注意:非端口號需要加上引號

5,做一個新的備份,啟用GTID之前創建的現有備份現在不能再在這些服務器上使用,因為您啟用了GTID。在這一點上做一個新的備份,這樣你就不會沒有可用的備份。

比如說物理備份。

6,啟動slave的同步進程

mysql> start slave

問題

在啟動slave同步進程時候,查看日志出現如下問題

2018-01-17T09:48:18.116983Z 1 [Warning] Slave SQL for channel '': If a crash happens this configuration does not guarantee that the relay log info will be consistent, Error_code: 0

什么!!not consistent,絕對不能忍

在網上查了下添加如下配置就好了

在my.cnf中設置,

relay_log_info_repository = TABLE

master_info_repository = TABLE

relay_log_recovery = on

報錯原因:

MySQL5.6版本號開始支持把master.info和relay-log.info的內容寫入到mysql庫的表中。

master.info--> mysql.slave_master_info

relay-log.info--> mysql. slave_relay_log_info

同一時候在MySQL5.6版本號中,添加了 Slave crash-safe replication功能,為了保證mysql的replication可以crash-safe。slave_master_info和slave_relay_log_info表必須使用事務型的存儲引擎(InnoDB),不要嘗試去手動改動這兩張表的內容。

同一時候,Slave還要開啟relay_log_recovery功能。

解決方法:

設置master_info_repository和relay_log_info_repository的值為TABLE。同一時候開啟relay_log_recovery功能。

GTID的故障處理和恢復。

1,簡單的復制,在新服務器上重現所有標識符和事務的最簡單方法是將新服務器變為具有全部執行歷史記錄的主服務器的從服務器,并在兩臺服務器上啟用全局事務標識符,缺點是較慢,且需要master保持所有的bin-log

2,使用mysqldump的方式,設置新slave機器(較快)

首先使用mysqldump命令備份

mysqldump --single-transaction --set-gtid-purged=OFF --triggers --routines --events -uroot -p >all.sql

此時會出現提示

mysqldump: [Warning] Using a password on the command line interface can be insecure.

Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events.

若不需要進行GTID的恢復和從庫設置,則可以添加--set-gtid-purged=OFF 關閉(默認為ON)

若需要進行GTID的主從設置則--set-gtid-purged=ON 既可

mysqldump --single-transaction --set-gtid-purged=ON --triggers --routines --events -uroot -p >all.sql

查看sql文件中會出現以下語句,設置GTID_PURGED來跳過一些事務。

--

-- GTID state at the beginning of the backup

--

SET @@GLOBAL.GTID_PURGED='7abe211e-fb4f-11e7-b16e-000c29ba88ca:1-69726';

然后在slave機器上進行恢復(需要slave開啟GTID功能),在恢復時候可能需要下面問題。

[root@localhost ~]# mysql -uroot -pMysql3200$%^ test < /tmp/all.sql

mysql: [Warning] Using a password on the command line interface can be insecure.

ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.

解決辦法:登錄執行reset master 清空 GTID_EXECUTED

[root@localhost ~]# mysql -uroot -p

mysql> reset master;

Query OK, 0 rows affected (0.02 sec)

導入binlog后,再start slave既可。

mysql> show slave status\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 172.16.10.53

Master_User: repl

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql.000005

Read_Master_Log_Pos: 777138

Relay_Log_File: localhost-relay-bin.000018

Relay_Log_Pos: 88658

Relay_Master_Log_File: mysql.000005

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

3,使用空事務處理故障

情況1:

主鍵重復

Last_Error: Could not execute Write_rows event on table test.a; Duplicate entry '500' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql.000005, end_log_pos 651107

方法1:

注入空事務

Last_IO_Error_Timestamp:

Last_SQL_Error_Timestamp:

Master_SSL_Crl:

Master_SSL_Crlpath:

Retrieved_Gtid_Set: 7abe211e-fb4f-11e7-b16e-000c29ba88ca:66253-68381:69091-70362

Executed_Gtid_Set: 7abe211e-fb4f-11e7-b16e-000c29ba88ca:1-70362,

9a455b69-fb4f-11e7-b993-000c29e8a43c:1

(root@Slave)[tempdb]>stop slave sql_thread;

(root@Slave)[tempdb]>set gtid_next='7abe211e-fb4f-11e7-b16e-000c29ba88ca:70363';

(root@Slave)[tempdb]>begin;commit;

(root@Slave)[tempdb]>set gtid_next='AUTOMATIC';

(root@Slave)[tempdb]>start slave sql_thread;

(root@Slave)[tempdb]>show slave status \G

方法2:

刪除沖突行

使用GTID的限制

涉及非事務性存儲引擎的更新。對使用非事務性存儲引擎的表進行的更新與在同一事務中使用事務性存儲引擎的表的更新混合在一起會導致將多個GTID分配給同一事務。

CREATE TABLE ... SELECT語句。在使用基于行的復制時,該語句實際上被記錄為兩個單獨的事件 - 一個用于創建表,另一個用于將源表中的行插入剛剛創建的新表中。當這個語句在一個事務中被執行時,這些事件在某些情況下可能會被接收到相同的事務標識符,這意味著包含插入事務的事務被從機跳過。

創建臨時表。

GTID模式和mysql_upgrade,當服務器在啟用全局事務標識符(GTID)時候,不要用mysql_upgrade --write-binlog啟用二進制日志記錄。

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

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

相關文章

python gui界面 tcp_通過python實現TCP編程

偽代碼&#xff1a; ss socket() #創建服務器套接字 ss.bind() #把地址綁定到套接字上 ss.listen() #監聽連接&#xff08;最大連接數&#xff09; info_loop: #服務器無限循環 cs ss.accept() #接受客戶端連接 comm_loop: #通信循環 cs.recv()/cs.send() #對話&#xff08;接…

計算機網絡安全基礎知識筆記

1、網絡安全威脅介紹非法授權訪問&#xff1a;沒有預先經過同意&#xff0c;就使用網絡或相關的計算機資源就是非授權訪問。主要有以下幾種形式&#xff1a;身份攻擊、假冒、非法用戶進入網絡系統進行違法操作、合法用戶以未授權的方式進行操作。信息泄露丟失&#xff1a;主要是…

Delphi面向對象學習隨筆七:COM

作者&#xff1a;巴哈姆特http://www.cnpack.org&#xff08;轉載請注明出處并保持完整&#xff09; 上一篇&#xff0c;我們介紹了接口。如果沒有接觸過COM對象的話&#xff0c;你會覺得接口真的很麻煩&#xff0c;也許會有&#xff1a;“還不如直接定義一個類更方便”的想法。…

lambda

例子&#xff1a;

mysql查詢語句詳解_基于mysql查詢語句的使用詳解

1> 查詢數據表除了前三條以外的數據。起初我想到的是這條語句SELECT * FROM admin WHERE userid NOT IN (SELECT userid FROM admin ORDER BY userid LIMIT 3) ORDER BY userid DESC但是運行的時候會報 This version of MySQL doesnt yet support LIMIT & IN/ALL/ANY/SO…

數據庫技術基礎:數據庫與數據庫管理系統概念介紹

一、數據庫系統基本概念知識1、 數據&#xff08;Data&#xff09;用來描述事物的符號記錄&#xff0c;它具有多種表現形式比如文字、圖形、圖像、視頻等。信息&#xff1a;是現實事物的存在方式或狀態的反映。信息的特性有可感知、可存儲、可加工、可傳遞、可再生等。2、 數據…

unity3d collider自動調整大小_Maya模型在Unity3d中的快速烘焙【2020】

本文小姐姐將以一個Maya的室內小客廳場景為例&#xff0c;和童鞋們一起討論Unity3d快速烘焙Maya室內模型光照的方法&#xff0c;一方面是對前面知識的綜合應用&#xff0c;另一方面滿足一下做室內設計童鞋的學習需求。話不多說&#xff0c;開工&#xff01;這個例子的Maya場景模…

angualarjsdemo

AngularJs學習筆記--Forms 原版地址&#xff1a;http://code.angularjs.org/1.0.2/docs/guide/forms 控件&#xff08;input、select、textarea&#xff09;是用戶輸入數據的一種方式。Form&#xff08;表單&#xff09;是這些控件的集合&#xff0c;目的是將相關的控件進行分組…

Java中Comparator比較器的使用以及使用lamba簡化代碼

代碼例子&#xff1a; /*** 測試Comparator*/Testpublic void test17() {//原始方法Comparator<Integer> comparator new Comparator<Integer>() {Overridepublic int compare(Integer o1, Integer o2) {return Integer.compare(o1, o2);}};int compare1 compara…

php字符串轉換mysql_在PHP中將字符串轉換為MySQL時間戳格式

我使用從androidjava應用程序發送的字符串在php中編寫查詢.查詢是這樣的&#xff1a;$insertSQL sprintf("INSERT INTO app_DuckTag (taste) VALUES (%s) WHERE species%s AND timestamp%s",GetSQLValueString($_POST[taste], "text"),GetSQLValueString(…

數據庫技術基礎:數據庫管理系統的功能介紹筆記

1、DBMS功能介紹1.1 數據定義數據庫定義語言&#xff08;DDL&#xff09;&#xff1a;可以對數據庫結構描述&#xff0c;包括外模式、模式、內模式的定義&#xff1b;數據庫完整性定義&#xff1b;安全保密定義比如口令、級別和存取權限。這些定義存儲在數據字典中是DBMS運行的…

charles亂碼_基于iOS的Charles抓包實踐

奇技指南在應用開發過程中&#xff0c;通過抓包調試服務端接口的場景時常出現。Charles和Wireshark是開發過程中最常用的兩款軟件。那么今天&#xff0c;讓我們以iOS為例&#xff0c;聊一聊Charles抓包。本文來自360奇舞團QiShare團隊投稿。在日常開發中&#xff0c;我們無法看…

分珠(dfs+并查集)

1140 分珠 時間限制:500MS 內存限制:65536K提交次數:24 通過次數:18 題型: 編程題 語言: G;GCC Description 如下圖所示&#xff0c;有若干珠子&#xff0c;每顆珠子重量不同&#xff0c;珠子之間有一些細線將它們連在一起。現要求切斷一些細線&#xff0c;將它們分成兩部分…

那些程序員爆笑段子,扎心了…

1、特殊“2020是屬于程序員的一年。”“怎么說&#xff1f;”“2020-1024996。”2、真相“你們程序員是不是沒見過下班時候的太陽&#xff1f;”“也不是啦&#xff0c;夏天的時候還是能看到的。”“哦哦&#xff0c;夏天黑得比較晚。”“不是&#xff0c;是天亮得比較早。”3、…

lambda中sorted排序

準備工作&#xff0c;新建一個User類 使用stream排序操作&#xff08;默認ASC排序) stream倒序排序操作 sorted(Comparator.reverseOrder()) 代碼例子&#xff1a; /*** lambda* sorted排序*/Testpublic void test19() {List<Integer> list new ArrayList<>();…

python中的括號不是西文嗎_二級Python---python語言的基本語法元素(Day1)

一、基本輸入輸出函數Python中有三個重要的基本輸入、輸出函數&#xff0c;用于輸入、轉換和輸出&#xff0c;分別是input()、eval()、print()。1.print()作用&#xff1a;輸出運算結果&#xff1b;根據輸出內容的不同&#xff0c;有三種用法。①、僅用于輸出字符串&#xff0c…

chart.js 餅圖顯示百分比_實戰PyQt5: 135-數據可視化之QChart繪制餅圖

餅圖是數據可視圖表的基本類型&#xff0c;在QChart中&#xff0c;QPieSeries, QPieSlice處理餅圖的繪制。QPieSeriesQPieSeries類以餅圖形式顯示數據。餅圖系列由定義為QPieSlice對象的切片組成。切片可以具有任何值&#xff0c;因為QPieSeries對象計算切片的百分比與系列中所…

lambda中使用filter過濾

單一條件過濾 /*** 測試filter*/Testpublic void testFilter() {List<User> user new ArrayList<>();user.add(new User(1L, 18, "小明"));user.add(new User(2L, 20, "小王"));user.add(new User(3L, 28, "小剛"));user.add(new U…

Silverlight 打印

摘自&#xff1a;http://www.cnblogs.com/jiajiayuan/archive/2012/04/13/2444246.html Silverlight中的打印只有一個類&#xff0c;那就是PrintDocment這個對象來實現。下面我用兩種方法來實現Silverlight的打印&#xff1a;第一種&#xff1a; private void btnPrint_Click(o…

數據庫系統的體系結構知識筆記

1、集中式數據庫系統分時系統環境下的集中式數據庫系統結構誕生于20世紀60年代中期。當時的硬件和操作系統決定了分時系統環境下的集中式數據庫系統構成早期的數據庫技術的首選結構。數據和數據管理都是集中的&#xff0c;數據庫系統的所有系統&#xff0c;從形式的用戶到DBMS核…