一、名詞解釋:
1:
server_uuid:伺服器身份ID。在第一次啟動Mysql時,會自動產生一個server_uuid並寫入到資料目錄下auto.cnf檔案裡,官方不建議修改。
[root@mysql5_6 data]# pwd
/usr/local/mysql/data
[root@mysql5_6 data]# cat auto.cnf
[auto]
server-uuid=b0869d03-d4a9-11e1-a2ee-000c290a6b8f
2:
GTID:全域事務標識符。當開始這個功能時,每次事務提交都會在binlog裡產生一個唯一的標示符,它由server_uuid和事務ID組成。首次提交的事務ID為1,第二次為2,第三次為3,依次類推。
查看主機master
show master status;
File Position Binlog_Do_DB Binlog_Ignore_DB Executed_Gtid_Set
binlog.000001 184761 D68DBC47-3AAE-11E2-BC2F-842B2B699BDA:1-515
在binlog日誌已經存在的D68DBC47-3AAE-11E2-BC2F-842B2B699BDA:1-515值,如果有新進來的binlog日誌中的gtid有和原來有重複,新進來的語句不執行。
二、新特性
1:支援多線程複製.事實上是針對每個database開啟相應的獨立線程。即每個庫有一個單獨的(sql thread)如果線上業務中,只有一個database或者絕大多數壓力集中在個別database的話,多線程並發複製特性就沒有意義了
2:啟用GTID,無須再知道binlog和POS點,需要知道master的IP、連接埠,帳號密碼即可,因為同步複製是自動的,mysql通過內部機制GTID自動找點同步
在my.cnf使用
gtid_mode = ON
disable-gtid-unsafe-statements = 1
注意:這兩個參數無法線上修改,只能在my.cnf修改。
三、問題:
GTID的局限性:
1.GTID同步複製是基於事務。所以Myisam表不支援,這可能導致多個GTID分配給同一個事務。
(5.6.9版本已經修改,支援修改Myisam表)
2.gtid_mode和disable-gtid-unsafe-statements必須同時使用,不同時使用,啟動Mysql報錯。
3.無法修改myisam表的資料,會提示Updates to non-transactional tables are forbidden when disable-gtid-unsafe-statements"
4.不支援CREATE TEMPORARY TABLE、DROP TEMPORARY TABLE 暫存資料表操作
5.不支援CREATE TABLE ... SELECT語句。因為該語句會被拆分成create table 和insert兩個事務,並且這個兩個事務被分配了同一個GTID,這會導致insert被備庫忽略掉
6.GTID是自動同步,複製的時候沒辦法使用全備份+位移量日誌這種辦法還原,從機的第一次同步只能從主機的第一個事務點開始還原,所以主機的binlog日誌必須保持完整,binlog日誌不能丟失。(mysql手冊說mysql5.6.9以後的版本可以使用全備份+位移量日誌這種辦法還原,繼續等待mysql5.6.9出來後再測試)。
以上的問題是RC版,相信到了正式版出來後,問題會有很大的改善。
(5.6.9的測試結果支援全備份+位移量日誌,執行mysqldump命令的時候,在dmp檔案中會記錄SET @@GLOBAL.GTID_PURGED='E6916BE4-4E3F-11E2-BBC7-000C29EE3F03:1-157',但是設定GTID_PURGED ,必須保證gtid_executed沒有設定過,執行reset master即可。)