1.mysql5.6在復制方面的新特性:
(1).支持多線程復制 :事實上是針對每個database開啟相應的獨立線程,即每個庫有一個單獨的(sql thread).針對這樣的改進,如果我們想實現多線程復制,無疑要對現存的數據庫結構進行重新設計,分庫分表.對于壓力都集中在個別database的,多線程并發復制特性就沒有意義.
(2).支持啟用GTID ,在配置主從復制,傳統的方式里,你需要找到binlog和POS點,然后change master to指向.在mysql5.6里,無須再知道binlog和POS點,只需要知道master的IP/端口/賬號密碼即可,因為同步復制是自動的,mysql通過內部機制GTID自動找點同步.
(3).基于Row復制只保存改變的列 ,大大節省Disk Space/Newwork resources和Memory usage.
(4).支持把Master 和Slave的相關信息記錄在Table中 ,原來是記錄在文件里,記錄在表里,增強可用性
(5).支持延遲復制
注:
關于 server_uuid 的解釋:服務器身份ID。在第一次啟動Mysql時,會自動生成一個server_uuid并寫入到數據目錄下auto.cnf文件里,官方不建議修改。
[root@client102?~] ?? [auto]?? server-uuid=14be3ddd-4e92-11e3-8335-000c299c1b31??
關于GTID的解釋: 全局事務標識符。當開啟這個功能時,每次事務提交都會在binlog里生成一個唯一的標示符,它由server_uuid和事務ID組成。首次提交的事務ID為1,第二次為2,第三次為3,依次類推。
2.mysql主從復制的原理圖:[此原理沒有變化]
3. MySQL5.6開始主從復制有兩種方式:基于日志(binlog) [基于日志的搭建,上篇文章已搭建過];基于GTID(全局事務標識符)
本次配置是基于GTID(全局事務標識符),但其也有劣勢,實際生產環境中,暫時不推薦使用
基于GTID(全局事務標識符)的局限性:
(1).GTID同步復制是基于事務。所以Myisam表不支持,這可能導致多個GTID分配給同一個事務。(5.6.9版本已經修改,支持修改Myisam表)
(2).gtid_mode和enforce-gtid-consistency=true 必須同時使用,不同時使用,啟動Mysql報錯。
(3).無法修改myisam表的數據,會提示"Updates to non-transactional tables are forbidden when disable-gtid-unsafe-statements"?? --> 這個我測試5.6.14,是可以正常修改數據,所以這點劣勢待定,大家可以分享測試結果
(4).不支持對臨時表操作 :CREATE TEMPORARY TABLE、DROP TEMPORARY TABLE???? --> 這個劣勢,5.6.14也可以做,大家可以測試,留言反饋,最近,在5.6.19上測試,是不可以操作,以前5.6.14可能測試有誤,這里補充一下。
(5).不支持CREATE TABLE ... SELECT語句 。因為該語句會被拆分成create table 和insert兩個事務,并且這個兩個事務被分配了同一個GTID,這會導致insert被備庫忽略掉[這條語句在游戲數據庫用的比較多,通常用來將大表分成小表]
4.基于GTID(全局事務標識符)mysql主從復制配置演示:
(1).默認主DB server和從DB server數據庫都已經安裝好,我的兩臺DB server都已經安裝好(5.6.14版本),都會是雙實例[這里我使用3307端口的實例]
注:兩臺機器的的selinux都是disable(永久關閉selinux,請修改/etc/selinux/config,將SELINUX改為disabled),防火墻可以選擇關閉,開啟的話也行[不行的話,添加防火墻策略]
主DB server:192.168.1.102:3307
從DB server:192.168.1.100:3307
(2).修改主DB server的配置文件(/etc/my.cnf) [client102為主DB server] --> 主DB sever的配置文件和從DB server文件基本一樣,方便搭建HA
[root@client102?~] ?? ?? ?? server_id?=1021?? ?? ?? binlog-format=ROW?? ?? binlog-row-image?=?minimal?? ?? log-bin=mysql3307-bin?? ?? report-host=192.168.1.102?? report-port=3307?? gtid-mode =on?? enforce-gtid-consistency=true?? log-slave-updates=true?? ?? ?? master-info-repository=TABLE?? relay-log-info-repository=TABLE?? ?? sync-master-info=1?? ?? binlog_cache_size?=?4M?? max_binlog_size?=?1G?? max_binlog_cache_size?=?2G?? ?? binlog-checksum=CRC32?? slave_allow_batching?=?1?? master-verify-checksum=1?? slave-sql-verify-checksum=1?? ?? ?? binlog-rows-query-log_events=1?? ?? slave-parallel-workers=4?? ?? relay_log_purge?=?1?? relay_log_recovery?=?1??
(3).啟動數據庫服務器,并登陸數據庫,授予相應的用戶用于同步
?? mysql>?show?global ?variables?like?'%gtid%';?? +--------------------------+-------+?? |?Variable_name?|?Value?|?? +--------------------------+-------+?? |?enforce_gtid_consistency?|?ON?|?? |?gtid_executed?|?|?? |?gtid_mode?|?ON?|?? |?gtid_owned?|?|?? |?gtid_purged?|?|?? +--------------------------+-------+?? ?? [root@client102?~]?? ?? [root@client102?~]?? ?? mysql>?grant?replication?slave?on?*.*?to?'kongzhong'@'192.168.1.100'?identified?by?'kongzhong';?? ?? mysql>?flush ?privileges;??
(4).從DB server配置文件添加代碼如下,和主基本一樣
[root@client100?~] ?? ?? server_id?=1002??? binlog-format=ROW?? binlog-row-image?=?minimal?? log-bin=mysql33071-bin??? report-host=192.168.1.100??? report-port=3307?? gtid-mode =on?? enforce-gtid-consistency=true?? master-info-repository=TABLE?? relay-log-info-repository=TABLE?? sync-master-info=1?? slave-parallel-workers=4?? binlog_cache_size?=?4M?? max_binlog_size?=?1G?? max_binlog_cache_size?=?2G?? binlog-checksum=CRC32?? master-verify-checksum=1?? slave-sql-verify-checksum=1?? binlog-rows-query-log_events=1?? log-slave-updates=true?? relay_log_purge?=?1?? relay_log_recovery?=?1??
(5).啟動從數據庫,添加主DB server指向[關鍵位置]
?? [root@client100?~]?? ?? [root@client100?~]?? mysql>?change?master?to?? ->?master_host='192.168.1.102',?? ->?master_user='kongzhong',?? ->?master_password='kongzhong',?? ->?master_port=3307,?? ->?master_auto_position?=?1,?? ->?master_delay=30;?? ?? ?? master_host='192.168.1.102'?? ?? master_user='kongzhong'?? ?? master_password='kongzhong'?? ?? master_port=3306?? ?? master_auto_position?=?1?? ?? master_delay=30??
(6).開啟同步,驗證同步狀態
?? mysql>?start?slave;?? ?? mysql>?show?slave?status\G;?? ?? Slave_IO_Running:?Yes?? Slave_SQL_Running:?Yes?? ?? Retrieved_Gtid_Set:?1f14026d-53e7-11e3-a5f9-000c299c1b31:4?? Executed_Gtid_Set:?1f14026d-53e7-11e3-a5f9-000c299c1b31:1-4?? ?? ?? ?? ?? mysql>?show?global ?variables?like?'%GTID%';?? +--------------------------+------------------------------------------+?? |?Variable_name?|?Value?|?? +--------------------------+------------------------------------------+?? |?enforce_gtid_consistency?|?ON?|?? |?gtid_executed?|?1f14026d-53e7-11e3-a5f9-000c299c1b31:1-4?|?? |?gtid_mode?|?ON?|?? |?gtid_owned?|?|?? |?gtid_purged?|?|?? +--------------------------+------------------------------------------+?? ?? 上面的搭建,省了數據一致部分[我這里是新裝的實例,所以數據是一致的],各位如果不是新環境,可以備份,還原數據?? 備份使用如下語句,?--triggers?--routines?--events?這幾個參數沒有認真揣摩其含義,如有對其了解的,可留言告知?? [root@client102?~]?? ?? [root@client100?~]??
mysql 5.6新特性下的主從,這里研究的還不夠深入,有時間還需進一步研究。
各位如果發現文章中的錯誤,請及時指正,交流,謝謝!
總結
以上是生活随笔 為你收集整理的rhel6系统中,mysql 5.6复制新特性下主从复制配置[基于GTID] 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。