最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL 5.6 GTID新特性實(shí)踐

 更新時間:2016年10月10日 15:32:08   投稿:mrr  
GTID(Global Transaction ID)是對于一個已提交事務(wù)的編號,并且是一個全局唯一的編號。下文給大家介紹MySQL 5.6 GTID新特性實(shí)踐,感興趣的朋友一起看看吧

GTID簡介

什么是GTID

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

GTID實(shí)際上是由UUID+TID組成的。其中UUID是一個MySQL實(shí)例的唯一標(biāo)識。TID代表了該實(shí)例上已經(jīng)提交的事務(wù)數(shù)量,并且隨著事務(wù)提交單調(diào)遞增。下面是一個GTID的具體形式

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

更詳細(xì)的介紹可以參見:官方文檔

GTID的作用

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

根據(jù)GTID可以知道事務(wù)最初是在哪個實(shí)例上提交的GTID的存在方便了Replication的Failover 這里詳細(xì)解釋下第二點(diǎn)。我們可以看下在MySQL 5.6的GTID出現(xiàn)以前replication failover的操作過程。假設(shè)我們有一個如下圖的環(huán)境

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

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

基于GTID的主從復(fù)制簡介

搭建

搭建使用了mysql_sandbox腳本為基礎(chǔ),先創(chuàng)建了一個一主三從的基于位置復(fù)制的環(huán)境。然后通過配置修改,將整個架構(gòu)專為基于GTID的復(fù)制。

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

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

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

常見錯誤

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

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后,會發(fā)現(xiàn)有兩個warnings。其實(shí)是兩個安全性警告,不影響正常的同步(有興趣的讀者可以看下關(guān)于該warning的具體介紹。warning的具體內(nèi)容如下:

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)

實(shí)驗一:如果slave所需要事務(wù)對應(yīng)的GTID在master上已經(jīng)被purge了

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

以下指令在master上執(zhí)行

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上執(zhí)行

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: No
Slave_SQL_Running: Yes
......
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 0
Relay_Log_Space: 151
......
Last_IO_Errno: 1236
Last_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: 0
Last_SQL_Error:
......
Auto_Position: 1
1 row in set (0.00 sec)

實(shí)驗二:忽略purged的部分,強(qiáng)行同步

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

我們還是以實(shí)驗一的情況為例:

先確認(rèn)master上已經(jīng)purge的部分。從下面的命令結(jié)果可以知道m(xù)aster上已經(jīng)缺失24024e52-bd95-11e4-9c6d-926853670d0b:1這一條事務(wù)的相關(guān)日志

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'的方式,跳過已經(jīng)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.000005
Read_Master_Log_Pos: 359
Relay_Log_File: mysql_sandbox21290-relay-bin.000004
Relay_Log_Pos: 569
Relay_Master_Log_File: mysql-bin.000005
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
......
Exec_Master_Log_Pos: 359
Relay_Log_Space: 873
......
Master_Server_Id: 1
Master_UUID: 24024e52-bd95-11e4-9c6d-926853670d0b
Master_Info_File: /data/mysql/rsandbox_mysql-5_6_23/node2/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_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-3
Executed_Gtid_Set: 24024e52-bd95-11e4-9c6d-926853670d0b:1-3
Auto_Position: 1
1 row in set (0.00 sec)

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

以上所述是小編給大家介紹的MySQL 5.6 GTID新特性實(shí)踐,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 淺析Mysql和Oracle分頁的區(qū)別

    淺析Mysql和Oracle分頁的區(qū)別

    Mysql使用limit分頁而Oracle使用rownum分頁,下面通過本文給大家介紹Oracle和Mysql分頁的區(qū)別,需要的的朋友參考下吧
    2022-12-12
  • MySql中的IFNULL、NULLIF和ISNULL用法詳解

    MySql中的IFNULL、NULLIF和ISNULL用法詳解

    在做項目中發(fā)現(xiàn)MySql里的isnull和mssql里的有點(diǎn)不同。接下來小編通過本文給大家介紹MySql中的IFNULL、NULLIF和ISNULL用法詳解的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • MySQL存儲過程的權(quán)限問題小結(jié)

    MySQL存儲過程的權(quán)限問題小結(jié)

    這篇文章主要介紹了MySQL存儲過程的權(quán)限問題小結(jié)及mysql 創(chuàng)建存儲過程權(quán)限問題,感興趣的朋友一起看看吧
    2018-04-04
  • MAC下MySQL忘記初始密碼怎么辦

    MAC下MySQL忘記初始密碼怎么辦

    MySQL初始密碼忘記怎么辦,這篇文章主要介紹了MAC下MySQL忘記初始密碼的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Windows下通過cmd進(jìn)入DOS窗口訪問MySQL數(shù)據(jù)庫

    Windows下通過cmd進(jìn)入DOS窗口訪問MySQL數(shù)據(jù)庫

    這篇文章主要介紹了Windows下通過cmd進(jìn)入DOS窗口訪問MySQL數(shù)據(jù)庫的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • MySQL?Binlog日志的記錄模式寫入機(jī)制文件操作詳解

    MySQL?Binlog日志的記錄模式寫入機(jī)制文件操作詳解

    這篇文章主要介紹了MySQL?Binlog日志的記錄模式寫入機(jī)制文件操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • mysql alter添加列的實(shí)現(xiàn)方式

    mysql alter添加列的實(shí)現(xiàn)方式

    這篇文章主要介紹了mysql alter添加列的實(shí)現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • mysql 子查詢與連接表詳情

    mysql 子查詢與連接表詳情

    這篇文章主要介紹了mysql 子查詢與連接表,格式化SQL 包含子查詢的SELECT語句難以閱讀和調(diào)試,特別是它們較為復(fù)雜時更是如此,對于能嵌套的子查詢的數(shù)目沒有限制,不過在實(shí)際使用時由于性能的限制,不能嵌套太多的子查詢,下面請跟雄安邊一起來看看詳細(xì)內(nèi)容吧
    2021-10-10
  • Mac下安裝mysql5.7.18的詳細(xì)步驟

    Mac下安裝mysql5.7.18的詳細(xì)步驟

    這篇文章主要為大家詳細(xì)介紹了]Mac下安裝mysql5.7.18的詳細(xì)步驟,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • RedHat下MySQL的基本使用方法分享

    RedHat下MySQL的基本使用方法分享

    RedHat 下MySQL安裝,簡單設(shè)置以用基本的使用方法,需要的朋友可以參考下。
    2011-08-08

最新評論

墨竹工卡县| 庐江县| 岳普湖县| 盐边县| 青川县| 兖州市| 临颍县| 扶余县| 伊金霍洛旗| 东方市| 海淀区| 宁都县| 广河县| 黎平县| 正镶白旗| 开江县| 阳高县| 即墨市| 江口县| 延边| 黄山市| 麻城市| 隆回县| 宣汉县| 林口县| 普兰县| 蒙自县| 巴东县| 诸城市| 华宁县| 韶山市| 高安市| 名山县| 辽中县| 丘北县| 大洼县| 和政县| 富锦市| 广饶县| 安阳县| 罗定市|