日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

rhel6系统中,mysql 5.6复制新特性下主从复制配置[基于GTID]

發布時間:2024/8/26 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rhel6系统中,mysql 5.6复制新特性下主从复制配置[基于GTID] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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?~]#?cat?/home/mysql/data/auto.cnf??
  • [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?~]#?vim?/etc/my.cnf??
  • #?在[mysqld]里加入如下代碼[里面原代碼保留,有重復的部分,以這部分為準]??
  • #?設置server_id,一般建議設置為IP,或者再加一些數字[在以前版本為server-id]??
  • server_id?=1021??
  • #?二進制日志的格式:有row、statement和mixed三種??
  • #?注:當設置隔離級別為READ-COMMITED必須設置二進制日志格式為ROW,MySQL官方認為STATEMENT這個已經不再適合繼續使用;但mixed類型在默認的事務隔離級別下,可能會導致主從數據不一致;?推薦使用?row??
  • binlog-format=ROW??
  • #?這個選項允許應用程序只能對行的鏡像數據進行復制,而不在關心行是否已經進行了DML操作.這提高了主從機器的復制吞吐量,減少了二進制日志所占用的磁盤空間、網絡資源和內存占用.??
  • binlog-row-image?=?minimal??
  • #?開啟二進制日志功能,可以隨便取,最好有含義??
  • log-bin=mysql3307-bin??
  • #?log-slave-updates/gtid-mode/enforce-gtid-consistency/report-port/report-host:用于啟動GTID及滿足附屬的其它需求[其中啟動GTID必須同時設置gtid-mode/enforce-gtid-consistency/]??
  • report-host=192.168.1.102??
  • report-port=3307??
  • gtid-mode=on??
  • enforce-gtid-consistency=true??
  • log-slave-updates=true??
  • #?master-info-repository/relay-log-info-repository都設置為TABLE,mysql.slave_master_info與?mysql.slave_relay_log_info?中,table都是innodb類型的,支持事務,比文件安全??
  • #?默認值是FILE,?比如master?info就保存在master.info文件中,relay?log?info保存在relay-log.info文件中,如果服務器意外關閉,正確的relay?info?沒有來得及更新到?relay-log.info文件,這樣會造成數據丟失??
  • master-info-repository=TABLE??
  • relay-log-info-repository=TABLE??
  • #?啟用之后,使binlog在每N次binlog寫入后與硬盤?同步??
  • sync-master-info=1??
  • #?以下是對二進制日志一些設置??
  • binlog_cache_size?=?4M??
  • max_binlog_size?=?1G??
  • max_binlog_cache_size?=?2G??
  • #?以下這幾個參數是啟用binlog/relaylog的校驗,防止日志出錯??
  • binlog-checksum=CRC32??
  • slave_allow_batching?=?1??
  • master-verify-checksum=1??
  • slave-sql-verify-checksum=1??
  • #?啟用這個參數,可用于在二進制日志記錄事件相關的信息,可降低故障排除的復雜度??
  • #?只對row?binlog格式有效.啟用后,會向binlog中寫入更多的調試信息,比如sql語句自身都會被寫進去.?mysqlbinlog?-vv?可以看到.??
  • binlog-rows-query-log_events=1??
  • #?開啟基于庫的多線程復制.默認是0,不開啟,最大并發數為1024個線程??
  • slave-parallel-workers=4??
  • #?這兩個是啟用relaylog的自動修復功能,避免由于網絡之類的外因造成日志損壞,主從停止.??
  • relay_log_purge?=?1??
  • relay_log_recovery?=?1??
  • (3).啟動數據庫服務器,并登陸數據庫,授予相應的用戶用于同步

  • #?查看GTID是否開啟[enforce_gtid_consistency/gtid_mode?為ON,表示已經開啟]??
  • mysql>?show?global?variables?like?'%gtid%';??
  • +--------------------------+-------+??
  • |?Variable_name?|?Value?|??
  • +--------------------------+-------+??
  • |?enforce_gtid_consistency?|?ON?|??
  • |?gtid_executed?|?|??
  • |?gtid_mode?|?ON?|??
  • |?gtid_owned?|?|??
  • |?gtid_purged?|?|??
  • +--------------------------+-------+??
  • #?我這里是多實例mysql,所以啟動是這樣的,如果大家是單實例的,就直接啟動就可以[/etc/init.d/mysqld?start]??
  • [root@client102?~]#?mysqld_multi?start?3307??
  • #?登陸mysql?服務器??
  • [root@client102?~]#?mysql?-uroot?-S?/usr/local/mysql/mysqld3307.sock?-p??
  • #?授予用戶權限用于主從同步??
  • mysql>?grant?replication?slave?on?*.*?to?'kongzhong'@'192.168.1.100'?identified?by?'kongzhong';??
  • #?刷新授權表信息??
  • mysql>?flush?privileges;??
  • (4).從DB server配置文件添加代碼如下,和主基本一樣

  • [root@client100?~]#?vim?/etc/my.cnf??
  • #?在[mysqld]下添加如下代碼[里面原代碼保留,有重復的部分,以這部分為準]??
  • server_id?=1002?#?此處和主DB?server不一樣,唯一值??
  • binlog-format=ROW??
  • binlog-row-image?=?minimal??
  • log-bin=mysql33071-bin?#?此處和主DB?server不一樣??
  • report-host=192.168.1.100?#?此處和主DB?server不一樣??
  • 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?~]#?mysqld_multi?start?3307??
  • #?登陸數據庫,添加相關參數(主DBserver的ip/端口/同步用戶/密碼/****)?這里也需要看是否啟動GTID,我這里省略??
  • [root@client100?~]#?mysql?-uroot?-S?/usr/local/mysql/mysqld3307.sock?-p??
  • 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;??
  • #/*?下面是一部分注解:??
  • #/*?指定主DB?server的IP地址??
  • master_host='192.168.1.102'??
  • #/*?指定用于同步的用戶[這個就是我們在主DB?server授權的用戶]??
  • master_user='kongzhong'??
  • #/*?指定用于同步的用戶的密碼??
  • master_password='kongzhong'??
  • #/*?指定主DB?server的端口[下面一個例子,可以重點看這個]??
  • master_port=3306??
  • #/*?自動尋找position號??
  • master_auto_position?=?1??
  • #/*?延時30秒執行復制,relay日志會及時同步到slave機,只是日志的中的事件會根據事件的時間戳延時30秒執行.此參數具有實用性??
  • master_delay=30??
  • (6).開啟同步,驗證同步狀態

  • #?開啟主從同步[以前的版本slave?start,新版本已不支持此寫法]??
  • mysql>?start?slave;??
  • #?查看主從同步狀態??
  • mysql>?show?slave?status\G;??
  • #?主要看以下兩個參數:[這兩個參數如果是yes就表示主從同步正常]??
  • 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??
  • #/*?Retrieved_Gtid_Set項:記錄了relay日志從Master獲取了binlog日志的位置??
  • #/*?Executed_Gtid_Set項:記錄本機執行的binlog日志位置(如果是從機,包括Master的binlog日志位置和slave本身的binlog日志位置)??
  • #?此時,我們可以在主DB?sever?查看一下,現在gtid標識是否和從DB?server?一致:??
  • #?登陸到主DB?server執行如下命令[查看gtid_executed和從DB?server上的Executed_Gtid_Set是否一致,一致表示同步完成]??
  • 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?~]#?mysqldump?-uroot?-p?-S?/usr/local/mysql/mysqld3307.sock?--all-databases?--triggers?--routines?--events?>/tmp/mysql3307.sql??
  • #?還原語句還和原理一樣??
  • [root@client100?~]#?mysql?-uroot?-p?-S?/usr/local/mysql/mysqld3307.sock?< /tmp/mysql3307.sql???
  • mysql 5.6新特性下的主從,這里研究的還不夠深入,有時間還需進一步研究。

    各位如果發現文章中的錯誤,請及時指正,交流,謝謝!

    總結

    以上是生活随笔為你收集整理的rhel6系统中,mysql 5.6复制新特性下主从复制配置[基于GTID]的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。