亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

MySQL 5.6 GTID新特性實踐

2024-07-24 13:10:49
字體:
來源:轉載
供稿:網友

GTID簡介

什么是GTID

GTID(Global Transaction ID)是對于一個已提交事務的編號,并且是一個全局唯一的編號。

GTID實際上是由UUID+TID組成的。其中UUID是一個MySQL實例的唯一標識。TID代表了該實例上已經提交的事務數量,并且隨著事務提交單調遞增。下面是一個GTID的具體形式

3E11FA47-71CA-11E1-9E33-C80AA9429562:23

更詳細的介紹可以參見:官方文檔

GTID的作用

那么GTID功能的目的是什么呢?具體歸納主要有以下兩點:

根據GTID可以知道事務最初是在哪個實例上提交的GTID的存在方便了Replication的Failover 這里詳細解釋下第二點。我們可以看下在MySQL 5.6的GTID出現以前replication failover的操作過程。假設我們有一個如下圖的環境

mysql5.6,GTID,新特性

此時,Server A的服務器宕機,需要將業務切換到Server B上。同時,我們又需要將Server C的復制源改成Server B。復制源修改的命令語法很簡單即CHANGE MASTER TO MASTER_HOST='xxx', MASTER_LOG_FILE='xxx', MASTER_LOG_POS=nnnn。而難點在于,由于同一個事務在每臺機器上所在的binlog名字和位置都不一樣,那么怎么找到Server C當前同步停止點,對應Server B的master_log_file和master_log_pos是什么的時候就成為了難題。這也就是為什么M-S復制集群需要使用MMM,MHA這樣的額外管理工具的一個重要原因。

這個問題在5.6的GTID出現后,就顯得非常的簡單。由于同一事務的GTID在所有節點上的值一致,那么根據Server C當前停止點的GTID就能唯一定位到Server B上的GTID。甚至由于MASTER_AUTO_POSITION功能的出現,我們都不需要知道GTID的具體值,直接使用CHANGE MASTER TO MASTER_HOST='xxx', MASTER_AUTO_POSITION命令就可以直接完成failover的工作。 So easy不是么?

基于GTID的主從復制簡介

搭建

搭建使用了mysql_sandbox腳本為基礎,先創建了一個一主三從的基于位置復制的環境。然后通過配置修改,將整個架構專為基于GTID的復制。

根據MySQL官方文檔給出的GTID搭建建議。需要一次對主從節點做配置修改,并重啟服務。這樣的操作,顯然在production環境進行升級時是不可接受的。Facebook,Booking.com,Percona都對此通過patch做了優化,做到了更優雅的升級。具體的操作方式會在以后的博文當中介紹到。這里我們就按照官方文檔,進行一次實驗性的升級。

主要的升級步驟會有以下幾步:

確保主從同步在master上配置read_only,保證沒有新數據寫入修改master上的my.cnf,并重啟服務修改slave上的my.cnf,并重啟服務在slave上執行change master to并帶上master_auto_position=1啟用基于GTID的復制由于是實驗環境,read_only和服務重啟并無大礙。只要按照官方的GTID搭建建議做就能順利完成升級,這里就不贅述詳細過程了。下面列舉了一些在升級過程中容易遇到的錯誤。

常見錯誤

gtid_mode=ON,log_slave_updates,enforce_gtid_consistency這三個參數一定要同時在my.cnf中配置。否則在mysql.err中會出現如下的報錯

2016-10-08 20:11:08 32147 [ERROR] --gtid-mode=ON or UPGRADE_STEP_1 or UPGRADE_STEP_2 requires --log-bin and --log-slave-updates
2016-10-08 20:13:53 32570 [ERROR] --gtid-mode=ON or UPGRADE_STEP_1 requires --enforce-gtid-consistency

change master to 后的warnings

在按照文檔的操作change master to后,會發現有兩個warnings。其實是兩個安全性警告,不影響正常的同步(有興趣的讀者可以看下關于該warning的具體介紹。warning的具體內容如下:

slave1 [localhost] {msandbox} ((none)) > stop slave;Query OK, 0 rows affected (0.03 sec)slave1 [localhost] {msandbox} ((none)) > change master to master_host='127.0.0.1',master_port =21288,master_user='rsandbox',master_password='rsandbox',master_auto_position=1;Query OK, 0 rows affected, 2 warnings (0.04 sec)slave1 [localhost] {msandbox} ((none)) > show warnings;+-------+------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| Level | Code | Message |+-------+------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| Note | 1759 | Sending passwords in plain text without SSL/TLS is extremely insecure. || Note | 1760 | Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. |+-------+------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+2 rows in set (0.00 sec)

實驗一:如果slave所需要事務對應的GTID在master上已經被purge了

根據show global variables like '%gtid%'的命令結果我們可以看到,和GTID相關的變量中有一個gtid_purged。從字面意思以及官方文檔可以知道該變量中記錄的是本機上已經執行過,但是已經被purge binary logs to命令清理的gtid_set。
本節中我們就要試驗下,如果master上把某些slave還沒有fetch到的gtid event purge后會有什么樣的結果。

以下指令在master上執行

master [localhost] {msandbox} (test) > show global variables like '%gtid%';+---------------------------------+----------------------------------------+| Variable_name | Value |+---------------------------------+----------------------------------------+| binlog_gtid_simple_recovery | OFF || enforce_gtid_consistency | ON || gtid_executed | 24024e52-bd95-11e4-9c6d-926853670d0b:1 || gtid_mode | ON || gtid_owned | || gtid_purged | || simplified_binlog_gtid_recovery | OFF |+---------------------------------+----------------------------------------+7 rows in set (0.01 sec)master [localhost] {msandbox} (test) > flush logs;create table gtid_test2 (ID int) engine=innodb;Query OK, 0 rows affected (0.04 sec)Query OK, 0 rows affected (0.02 sec)master [localhost] {msandbox} (test) > flush logs;create table gtid_test3 (ID int) engine=innodb;Query OK, 0 rows affected (0.04 sec)Query OK, 0 rows affected (0.04 sec)master [localhost] {msandbox} (test) > show master status;+------------------+----------+--------------+------------------+------------------------------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+------------------------------------------+| mysql-bin.000005 | 359 | | | 24024e52-bd95-11e4-9c6d-926853670d0b:1-3 |+------------------+----------+--------------+------------------+------------------------------------------+1 row in set (0.00 sec)master [localhost] {msandbox} (test) > purge binary logs to 'mysql-bin.000004';Query OK, 0 rows affected (0.03 sec)master [localhost] {msandbox} (test) > show global variables like '%gtid%';+---------------------------------+------------------------------------------+| Variable_name | Value |+---------------------------------+------------------------------------------+| binlog_gtid_simple_recovery | OFF || enforce_gtid_consistency | ON || gtid_executed | 24024e52-bd95-11e4-9c6d-926853670d0b:1-3 || gtid_mode | ON || gtid_owned | || gtid_purged | 24024e52-bd95-11e4-9c6d-926853670d0b:1 || simplified_binlog_gtid_recovery | OFF |+---------------------------------+------------------------------------------+7 rows in set (0.00 sec)

在slave2上重新做一次主從,以下命令在slave2上執行

slave2 [localhost] {msandbox} ((none)) > change master to master_host='127.0.0.1',master_port =21288,master_user='rsandbox',master_password='rsandbox',master_auto_position=1;Query OK, 0 rows affected, 2 warnings (0.04 sec)slave2 [localhost] {msandbox} ((none)) > start slave;Query OK, 0 rows affected (0.01 sec)slave2 [localhost] {msandbox} ((none)) > show slave status/G*************************** 1. row ***************************......Slave_IO_Running: NoSlave_SQL_Running: Yes......Last_Errno: 0Last_Error:Skip_Counter: 0Exec_Master_Log_Pos: 0Relay_Log_Space: 151......Last_IO_Errno: 1236Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.'Last_SQL_Errno: 0Last_SQL_Error:......Auto_Position: 11 row in set (0.00 sec)

實驗二:忽略purged的部分,強行同步

那么實際生產應用當中,偶爾會遇到這樣的情況:某個slave從備份恢復后(或者load data infile)后,DBA可以人為保證該slave數據和master一致;或者即使不一致,這些差異也不會導致今后的主從異常(例如:所有master上只有insert沒有update)。這樣的前提下,我們又想使slave通過replication從master進行數據復制。此時我們就需要跳過master已經被purge的部分,那么實際該如何操作呢?

我們還是以實驗一的情況為例:

先確認master上已經purge的部分。從下面的命令結果可以知道master上已經缺失24024e52-bd95-11e4-9c6d-926853670d0b:1這一條事務的相關日志

master [localhost] {msandbox} (test) > show global variables like '%gtid%';+---------------------------------+------------------------------------------+| Variable_name | Value |+---------------------------------+------------------------------------------+| binlog_gtid_simple_recovery | OFF || enforce_gtid_consistency | ON || gtid_executed | 24024e52-bd95-11e4-9c6d-926853670d0b:1-3 || gtid_mode | ON || gtid_owned | || gtid_purged | 24024e52-bd95-11e4-9c6d-926853670d0b:1 || simplified_binlog_gtid_recovery | OFF |+---------------------------------+------------------------------------------+7 rows in set (0.00 sec)

在slave上通過set global gtid_purged='xxxx'的方式,跳過已經purge的部分

slave2 [localhost] {msandbox} ((none)) > stop slave;Query OK, 0 rows affected (0.04 sec)slave2 [localhost] {msandbox} ((none)) > set global gtid_purged = '24024e52-bd95-11e4-9c6d-926853670d0b:1';Query OK, 0 rows affected (0.05 sec)slave2 [localhost] {msandbox} ((none)) > start slave;Query OK, 0 rows affected (0.01 sec)slave2 [localhost] {msandbox} ((none)) > show slave status/G *************************** 1. row ***************************Slave_IO_State: Waiting for master to send event......Master_Log_File: mysql-bin.000005Read_Master_Log_Pos: 359Relay_Log_File: mysql_sandbox21290-relay-bin.000004Relay_Log_Pos: 569Relay_Master_Log_File: mysql-bin.000005Slave_IO_Running: YesSlave_SQL_Running: Yes......Exec_Master_Log_Pos: 359Relay_Log_Space: 873......Master_Server_Id: 1Master_UUID: 24024e52-bd95-11e4-9c6d-926853670d0bMaster_Info_File: /data/mysql/rsandbox_mysql-5_6_23/node2/data/master.infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it......Retrieved_Gtid_Set: 24024e52-bd95-11e4-9c6d-926853670d0b:2-3Executed_Gtid_Set: 24024e52-bd95-11e4-9c6d-926853670d0b:1-3Auto_Position: 11 row in set (0.00 sec)

可以看到此時slave已經可以正常同步,并補齊了24024e52-bd95-11e4-9c6d-926853670d0b:2-3范圍的binlog日志。

以上所述是小編給大家介紹的MySQL 5.6 GTID新特性實踐,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品久久久久久亚洲国产300| 日韩欧美国产免费播放| 国产精品亚洲аv天堂网| 亚洲精品国产福利| 中文字幕亚洲天堂| 精品美女久久久久久免费| 日韩美女在线观看一区| 国语自产偷拍精品视频偷| 5566成人精品视频免费| 欧美国产日韩视频| 久久久久久久久久av| 日韩激情av在线免费观看| 伊人伊成久久人综合网小说| 亚洲另类激情图| 久久久免费观看| 奇米四色中文综合久久| 欧美一级高清免费| 人人做人人澡人人爽欧美| 亚洲japanese制服美女| 一区二区在线免费视频| 欧美在线激情网| 视频直播国产精品| 97国产精品免费视频| 久久精品人人做人人爽| 日韩福利在线播放| 久久久精品亚洲| 国产丝袜一区二区| 欧美成人精品三级在线观看| 中文字幕亚洲综合久久| 亚洲最新av在线网站| 亚洲精品久久7777777| 欧美尤物巨大精品爽| 欧美成人精品在线播放| 国产视频一区在线| 成人免费网站在线观看| 日韩电影中文字幕| 欧美激情亚洲精品| 亚洲男人的天堂在线| 久久久精品免费视频| 成人激情av在线| 亚洲成人1234| 日韩av不卡在线| 欧美极品少妇xxxxⅹ免费视频| 亚洲精品免费在线视频| 欧美日韩在线另类| 色中色综合影院手机版在线观看| 欧美激情精品久久久久久变态| 欧美电影在线播放| y97精品国产97久久久久久| 亚洲字幕一区二区| 亚洲一区二区国产| 欧美有码在线视频| 亚洲欧美日韩国产精品| 久久精品人人爽| 亚洲国产成人精品久久| 一区二区亚洲精品国产| 久久成人18免费网站| 精品国产自在精品国产浪潮| 亚洲视频在线看| 成人黄色免费看| 亚洲电影成人av99爱色| 久久亚洲国产成人| 国产精品视频大全| 91精品国产综合久久香蕉的用户体验| 亚洲精品久久久久久久久久久| 亚洲成av人乱码色午夜| 91精品久久久久久久久青青| 中文字幕日韩欧美精品在线观看| 欧美日韩一区二区三区在线免费观看| 日韩美女免费观看| 亚洲欧美日韩天堂| 欧美成人在线免费视频| 国产精品h片在线播放| 亚洲精品一区二区三区不| 91久久国产精品| 91人人爽人人爽人人精88v| 91香蕉亚洲精品| 久久久久久久久久久亚洲| 亚洲精品动漫久久久久| 久久天天躁狠狠躁老女人| 成人网页在线免费观看| 亚洲精品网址在线观看| 日韩精品视频免费专区在线播放| 亚洲成人激情在线观看| 欧美激情视频免费观看| 亚洲欧美色婷婷| 亚洲综合最新在线| 亚洲国产私拍精品国模在线观看| 亚洲欧美www| 亚洲欧美日韩图片| 国产精品专区一| 精品国产一区二区三区久久| 中文字幕国产精品久久| 久久国产精品久久久久| 91wwwcom在线观看| 国产精品视频区| 欧美成aaa人片免费看| 亚洲第一福利在线观看| 国产有码一区二区| 在线看日韩av| 亚洲一区精品电影| 在线成人免费网站| 日韩亚洲精品视频| 欧美成人在线免费| 亚洲国产精品va在线观看黑人| 一区二区成人av| 欧美日韩综合视频网址| 97av在线影院| 精品久久久国产| 91社区国产高清| 亚洲天堂av在线播放| 色综合男人天堂| 久久久久久尹人网香蕉| 神马久久久久久| 久久国产精品99国产精| 美女黄色丝袜一区| 成人激情春色网| 亚洲第一av在线| 欧美极品美女电影一区| 色偷偷偷亚洲综合网另类| 欧美日韩在线视频一区| 国产一区私人高清影院| 日韩亚洲国产中文字幕| 国产成人综合亚洲| 黑人巨大精品欧美一区二区三区| 91国内免费在线视频| 欧美激情中文网| 久久偷看各类女兵18女厕嘘嘘| 国产精品成人品| 成人动漫网站在线观看| 97视频免费在线看| 国产欧美 在线欧美| 日本一区二区不卡| 亚洲va久久久噜噜噜| 日韩av一卡二卡| 大荫蒂欧美视频另类xxxx| 91免费人成网站在线观看18| 高清亚洲成在人网站天堂| 91美女片黄在线观看游戏| 伊人男人综合视频网| 亚洲va久久久噜噜噜久久天堂| 亚洲a在线播放| 欧美激情视频给我| 色偷偷噜噜噜亚洲男人| 国产一区二区黄| 国产欧美日韩中文字幕在线| 一区二区三区四区视频| 亚洲一区二区三区777| 亚洲精品中文字幕女同| 国产精品久久久久久久久久久久久久| 中文字幕日韩欧美精品在线观看| 日本精品在线视频| 久久精品中文字幕免费mv| 久久亚洲国产精品成人av秋霞| 国产精品国内视频| 一区二区欧美激情| 国产亚洲人成网站在线观看| 国产精品福利观看| 国产精品黄页免费高清在线观看| 国产精品91一区| 成人免费自拍视频| 日韩免费在线免费观看| 精品国内亚洲在观看18黄| 91精品国产91|