国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysql中5.6和5.5有哪些區別

2024-07-24 12:33:22
字體:
來源:轉載
供稿:網友
  mysql中5.6和5.5有什么區別
  5.6的改進地方:
 
  1、在5.5和之前的版本mysql中,主從配置的話,要在從節點配置change master to 指明binlog和POS。而在5.6及以后
 
  ,這2個參數就可以省略掉。MySQL可以通過內部的GTID機制自動找點同步。我們只要指明master的IP、用戶名和密碼、端口即可。
 
  2、5.6支持多線程復制
 
  在5.5里,同步復制是單線程、隊列的,只能一個的執行。而在5.6里,多個庫可以同時進行復制(注意:同一個庫內仍是不能多線程了)。
 
  5.6里會涉及到UUID這個參數
 
  MySQL [(none)]>show variables like '%uuid%';
  +---------------+--------------------------------------+
  | Variable_name | Value                                |
  +---------------+--------------------------------------+
  | server_uuid   | ca910cf0-3aec-11e6-9319-b888e3dcfeb8 |
  +---------------+--------------------------------------+
  1 row in set (0.00 sec)
  注意:在mysql初次啟動時候會自動生成這個UIID,寫入到auto.cnf中,官方不建議修改這個值。并且server_uuid和GTID有密切關系。
 
  GTID:全局事務標識符
 
  使用這個功能時,每次事務提交都會在binlog里生成唯一的標識符,它由UUID和事務ID組成。首次提交的事務ID為1,以后依次遞增。
 
  開啟GTID時,slave做同步復制時,無需找到binlog日志和POS點。直接
 
  GTID寫法:
 
  change master to
  master_HOST=192.168.2.100,
  master_PORT=2206,
  master_USER=repluser,
  master_PASSWORD='123456',
  master_AUTO_POSITION=1;
  另外傳統的寫法:
  CHANGE MASTER TO
  MASTER_HOST='master2.mycompany.com',
  MASTER_USER='replication',
  MASTER_PASSWORD='bigs3cret',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='master2-bin.001',
  MASTER_LOG_POS=4,
  MASTER_CONNECT_RETRY=10;
  如果之前啟用過了GTID,那么就不能不能再使用傳統的change master to的方式了,會報錯,如下:
 
  ERROR 1776 (HY000): Parameters MASTER_LOG_FILE, MASTER_LOG_POS, RELAY_LOG_FILE and RELAY_LOG_POS cannot be set when MASTER_AUTO_POSITION is active.
 
  GTID的工作流程:
 
  1、在master上提交一個事務,并寫入到binlog
 
  2、binlog發送到slave上,slave接收并寫入relay log,slave讀取到這個GTID,并設置gtid_next的值。例如:
 
  set @@SESSION.GTID_NEXT='B0869D03-D332223-35454:3';
 
  然后告訴slave接下來的事務必須使用GTID,并寫入到自己的binlog中。
 
  3、slave檢查并確認這個gtid沒有被使用,如果沒有被使用,那么開始執行這個事務并寫入到它自己的binlog里。
 
  4、由于gtid_next的值不是空的,slave不會嘗試去生成一個新的gtid,而是通過主從同步來獲的GTID。
 
  另外,要使用GTID方式進行主從同步的話,還要在my.cnf里面加上如下的配置:
 
  [mysqld]
  log-bin=mysql-bin
  binlog_format = mixed
  log_slave_updates = ON
  gtid-mode = ON
  enforce_gtid_consistency = ON
  然后在master上導出mysqldump -uroot -proot -q --single-transaction -R -E --triggers -B hellodb > /root/hello.sql
 
  在slave上導入mysql -uroot -proot < /root/hello.sql
 
  在slave上配置change master to指向(如下6行代碼):
 
  change master to
  master_HOST=192.168.2.100,
  master_PORT=3306,
  master_USER=repluser,
  master_PASSWORD='123456',
  master_AUTO_POSITION=1;
  GTID的局限性:
 
  1、GTID的復制是基于事務的,不支持MyISAM,這可能導致多個GTID分配各同一個事務。
 
  2、對create table ... select語句不支持。因為該語句會被拆分成create table和insert 兩個事務,并且如果這兩個事務被分配了同一個GTID,將會導致insert被備庫忽略掉。
 
  3、不支持創建、刪除臨時表
 
  多線程復制演示:
 
  在slave上執行下面幾條命令:
 
  > stop slave;
  > set global  slave_parallel_workers = 4;
  > start slave;
  > show full processlist;可以看到有4個線程 Waitingfor an eventfromCoordinator
  如果此時在主上有大量的insert操作,可以在slave上執行> select * from mysql.slave_worker_info/G 應該可以查看到worker_id在不斷變化,說明是多線程復制在起作用了。
 
  說明:slave_parallel_workers 即可實現在slave上多線程并發復制。不過,它只能支持一個實例下多個 database 間的并發復制,并不能真正做到多表并發復制。因此在較大并發負載時,slave還是沒有辦法及時追上master,需要想辦法進行優化(比如:盡量將一個庫中的表按照業務邏輯拆分成多個庫來保存,這樣在寫操作時候,slave就能開啟多線程復制,減少了同步的時延。)
 
  此外,建議修改my.cnf,增加2行(默認這個info_file是文件的,不寫入數據庫的)
 
  relay_log_info_repository = table
  master_info_repository = table
  單單這樣還不夠,默認這2張表是MyISAM的,不安全還要轉換下
 
  > alter table slave_master_info engine innodb;
  > alter table slave_relay_log_info engine innodb;
  > alter table slave_worker_info engine innodb;
  這樣的話,可防止表損壞,在損壞后可以自行修復。
 
  GTID模式下的主從復制,同步時候報錯不能跳過的解決方法:
 
  假如在slave上看到同步報錯“從節點的XXX鍵不存在”
 
  我們可以嘗試使用5.5上的老方法
 
  > stop slave;
  > set global sql_slave_skip_counter=1
  > start slave;
 
  可以看出運行在GTID模式下,不支持sql_slave_skip_counter這種方式跳過的。
 
  那么可以如下方法來跳過:
 
  > show  slave status/G查看如下2行的信息:
 
  Retrieved_Gtid_Set: ca910cf0-3aec-11e6-9319-b888e3dcfeb8:1-2
  Executed_Gtid_Set: ca910cf0-3aec-11e6-9319-b888e3dcfeb8:1
  第一行表示收到的事務,第二行表示已經執行完的事務。也就是說執行到Retrieved_Gtid_Set時候發生錯誤了。
 
  因此,我們直接單單跳過這個事務即可。
 
  > stop slave;
  > set GTID_NEXT='ca910cf0-3aec-11e6-9319-b888e3dcfeb8:2';     就是這種寫法,不要加什么1-2這些玩意
  > begin;
  > commit;
  > set GTID_NEXT="AUTOMATIC";      #把gtid_next設置回來
  > start slave;
  > show slave status/G   驗證下是否IO/SQL都是YES狀態。
  GTID模式轉換為傳統模式的方法及注意點:
 
  要轉換成傳統模式,需要在my.cnf里面注釋掉下面2行:
 
  # gtid-mode=ON
  # enforce_gtid_consistency = ON
  然后重啟MySQL。
 
  登進mysql,執行類似如下命令:
 
  > stop slave;
  > CHANGE MASTER TO
  MASTER_HOST='master2.mycompany.com',
  MASTER_USER='replication',
  MASTER_PASSWORD='bigs3cret',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='master2-bin.001',
  MASTER_LOG_POS=4,
  MASTER_CONNECT_RETRY=10;
 
  解決方法:
 
  > change master to MASTER_AUTO_POSITION=0;     # 關閉這個參數,這個參數是GTID復制才用到的。
  > CHANGE MASTER TO
  MASTER_HOST = '192.168.2.11',
  MASTER_USER='repluser',
  MASTER_PASSWORD='123456',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin.000012',
  MASTER_LOG_POS=500,
  MASTER_CONNECT_RETRY=10;
  > start slave;
  > show slave status/G 驗證下是否IO/SQL都是YES狀態。
  “mysql中5.6和5.5有哪些區別”的內容就介紹到這里了,感謝大家的閱讀。

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 德江县| 城市| 都兰县| 巴里| 安多县| 阿克陶县| 崇信县| 新竹县| 洛扎县| 灌阳县| 元阳县| 安仁县| 盈江县| 东莞市| 金山区| 南江县| 织金县| 舞阳县| 涞水县| 吉安市| 彩票| 娱乐| 安国市| 汤原县| 谷城县| 周至县| 岢岚县| 闽清县| 临江市| 扬中市| 福鼎市| 布拖县| 增城市| 盐城市| 富川| 常宁市| 洛南县| 巨野县| 七台河市| 古浪县| 石河子市|