基於statement複製下NULL、RAND、UUID的測試
版本:5.5.29
測試方法:
slave先停止同步,製造同步延遲
master分別使用NULL、RAND()、UUID()進行update
slave延遲3s以上開啟同步
比較主從資料是否一致
結論: NULL、RAND()一致。UUID()不一致
原因:
NULL: binlog儲存原sql
RAND(): binlog除了原sql,同時記錄了種子值
UUID:
MASTER : 4b1ae5c8-9952-11e3-b7ca-00151760d8ec
SLAVE : 4b2744b2-9952-11e3-afc9-00151760d8ec
UUID格式共36個字元:aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
前三組值是時間戳換算過來的;
第四組值是暫時性保持時間戳的唯一性。例如,使用夏令時;
第五組值是一個IEE 802的節點標識值,它是空間上唯一的。若後者不可用,則用一個隨機數字替換。假如主機沒有網路卡,或者我們不知道如何在某系統下獲得機器地址,則空間唯一性就不能得到保證,即使這楊,出現重複值的機率還是非常小的。
官方說明:http://dev.mysql.com/doc/refman/5.5/en/miscellaneous-functions.html#function_uuid
疑問:
binlog有時間戳為何不用?
最後一組的數值為何是一樣,理論上不同機器(主從)上至少最後一位肯定不同?因為測試的主從環境是一臺機器上的兩個埠,並不是兩臺機器
一、表結構及資料
二、測試sql及相應的binlog
SET @ct:=NOW();
SELECT SLEEP(1);
-- 字串'NULL'
UPDATE `test_140219_sbr` SET sid=@@server_id,`val` = 'NULL',`upddt`=NOW(),`mupddt`=@ct WHERE id=1;
-- NULL值
UPDATE `test_140219_sbr` SET sid=@@server_id,`val` = NULL,`upddt`=NOW(),`mupddt`=@ct WHERE id=2;
-- RAND
UPDATE `test_140219_sbr` SET sid=@@server_id,`val` = RAND(),`upddt`=NOW(),`mupddt`=@ct WHERE id=3;
-- UUID
UPDATE `test_140219_sbr` SET sid=@@server_id,`val` = UUID(),`upddt`=NOW(),`mupddt`=@ct WHERE id=4;
三、主從資料
MASTER
SLAVE
測試方法:
slave先停止同步,製造同步延遲
master分別使用NULL、RAND()、UUID()進行update
slave延遲3s以上開啟同步
比較主從資料是否一致
結論: NULL、RAND()一致。UUID()不一致
原因:
NULL: binlog儲存原sql
RAND(): binlog除了原sql,同時記錄了種子值
UUID:
MASTER : 4b1ae5c8-9952-11e3-b7ca-00151760d8ec
SLAVE : 4b2744b2-9952-11e3-afc9-00151760d8ec
UUID格式共36個字元:aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
前三組值是時間戳換算過來的;
第四組值是暫時性保持時間戳的唯一性。例如,使用夏令時;
第五組值是一個IEE 802的節點標識值,它是空間上唯一的。若後者不可用,則用一個隨機數字替換。假如主機沒有網路卡,或者我們不知道如何在某系統下獲得機器地址,則空間唯一性就不能得到保證,即使這楊,出現重複值的機率還是非常小的。
官方說明:http://dev.mysql.com/doc/refman/5.5/en/miscellaneous-functions.html#function_uuid
疑問:
binlog有時間戳為何不用?
最後一組的數值為何是一樣,理論上不同機器(主從)上至少最後一位肯定不同?因為測試的主從環境是一臺機器上的兩個埠,並不是兩臺機器
一、表結構及資料
點選(此處)摺疊或開啟
-
-- 表結構
-
DROP TABLE IF EXISTS `test_140219_sbr`;
-
CREATE TABLE `test_140219_sbr` (
-
`id` INT(11) NOT NULL AUTO_INCREMENT,
-
`sid` INT(11) NOT NULL DEFAULT \'0\',
-
`val` VARCHAR(255) DEFAULT NULL,
-
`upddt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-
`mupddt` DATETIME DEFAULT NULL,
-
PRIMARY KEY (`id`)
-
) ENGINE=INNODB DEFAULT CHARSET=utf8;
-
-- 插入資料
- INSERT INTO `test_140219_sbr`(`id`) VALUES ('1'),('2'),('3'),('4');
二、測試sql及相應的binlog
SET @ct:=NOW();
SELECT SLEEP(1);
-- 字串'NULL'
UPDATE `test_140219_sbr` SET sid=@@server_id,`val` = 'NULL',`upddt`=NOW(),`mupddt`=@ct WHERE id=1;
點選(此處)摺疊或開啟
- # at 4588
- #140219 18:40:47 server id 3307 end_log_pos 4672 Query thread_id=4 exec_time=0 error_code=0
- SET TIMESTAMP=1392806447/*!*/;
- BEGIN
- /*!*/;
- # at 4672
- #140219 18:40:47 server id 3307 end_log_pos 4726 User_var
- SET @`ct`:=_latin1 0x323031342D30322D31392031383A34303A3436 COLLATE `latin1_swedish_ci`/*!*/;
- # at 4726
- #140219 18:40:47 server id 3307 end_log_pos 4921 Query thread_id=4 exec_time=0 error_code=0
- SET TIMESTAMP=1392806447/*!*/;
- -- 字串'NULL'
- UPDATE `test_140219_sbr` SET sid=@@server_id,`val` = 'NULL',`upddt`=NOW(),`mupddt`=@ct WHERE id=1
- /*!*/;
- # at 4921
- #140219 18:40:47 server id 3307 end_log_pos 4948 Xid = 376
- COMMIT/*!*/;
- # at 4948
-- NULL值
UPDATE `test_140219_sbr` SET sid=@@server_id,`val` = NULL,`upddt`=NOW(),`mupddt`=@ct WHERE id=2;
點選(此處)摺疊或開啟
- # at 4948
- #140219 18:40:47 server id 3307 end_log_pos 5032 Query thread_id=4 exec_time=0 error_code=0
- SET TIMESTAMP=1392806447/*!*/;
- BEGIN
- /*!*/;
- # at 5032
- #140219 18:40:47 server id 3307 end_log_pos 5086 User_var
- SET @`ct`:=_latin1 0x323031342D30322D31392031383A34303A3436 COLLATE `latin1_swedish_ci`/*!*/;
- # at 5086
- #140219 18:40:47 server id 3307 end_log_pos 5271 Query thread_id=4 exec_time=0 error_code=0
- SET TIMESTAMP=1392806447/*!*/;
- -- NULL值
- UPDATE `test_140219_sbr` SET sid=@@server_id,`val` = NULL,`upddt`=NOW(),`mupddt`=@ct WHERE id=2
- /*!*/;
- # at 5271
- #140219 18:40:47 server id 3307 end_log_pos 5298 Xid = 378
- COMMIT/*!*/;
- # at 5298
-- RAND
UPDATE `test_140219_sbr` SET sid=@@server_id,`val` = RAND(),`upddt`=NOW(),`mupddt`=@ct WHERE id=3;
點選(此處)摺疊或開啟
- #140219 18:40:47 server id 3307 end_log_pos 5382 Query thread_id=4 exec_time=0 error_code=0
- SET TIMESTAMP=1392806447/*!*/;
- BEGIN
- /*!*/;
- # at 5382
- #140219 18:40:47 server id 3307 end_log_pos 5417 Rand
- SET @@RAND_SEED1=54715179, @@RAND_SEED2=199865937/*!*/;
- # at 5417
- #140219 18:40:47 server id 3307 end_log_pos 5471 User_var
- SET @`ct`:=_latin1 0x323031342D30322D31392031383A34303A3436 COLLATE `latin1_swedish_ci`/*!*/;
- # at 5471
- #140219 18:40:47 server id 3307 end_log_pos 5655 Query thread_id=4 exec_time=0 error_code=0
- SET TIMESTAMP=1392806447/*!*/;
- -- RAND
- UPDATE `test_140219_sbr` SET sid=@@server_id,`val` = RAND(),`upddt`=NOW(),`mupddt`=@ct WHERE id=3
- /*!*/;
- # at 5655
- #140219 18:40:47 server id 3307 end_log_pos 5682 Xid = 380
- COMMIT/*!*/;
- # at 5682
-- UUID
UPDATE `test_140219_sbr` SET sid=@@server_id,`val` = UUID(),`upddt`=NOW(),`mupddt`=@ct WHERE id=4;
點選(此處)摺疊或開啟
- #140219 18:40:47 server id 3307 end_log_pos 5766 Query thread_id=4 exec_time=0 error_code=0
- SET TIMESTAMP=1392806447/*!*/;
- BEGIN
- /*!*/;
- # at 5766
- #140219 18:40:47 server id 3307 end_log_pos 5820 User_var
- SET @`ct`:=_latin1 0x323031342D30322D31392031383A34303A3436 COLLATE `latin1_swedish_ci`/*!*/;
- # at 5820
- #140219 18:40:47 server id 3307 end_log_pos 6004 Query thread_id=4 exec_time=0 error_code=0
- SET TIMESTAMP=1392806447/*!*/;
- -- UUID
- UPDATE `test_140219_sbr` SET sid=@@server_id,`val` = UUID(),`upddt`=NOW(),`mupddt`=@ct WHERE id=4
- /*!*/;
- # at 6004
- #140219 18:40:47 server id 3307 end_log_pos 6031 Xid = 382
- COMMIT/*!*/;
- # at 6031
-
三、主從資料
MASTER
點選(此處)摺疊或開啟
-
mysql> SELECT id,sid,ifnull(val,'null值') as 'val',upddt,mupddt FROM `test_140219_sbr`\G;
-
*************************** 1. row ***************************
-
id: 1
-
sid: 3307
-
val: NULL
-
upddt: 2014-02-19 18:40:47
-
mupddt: 2014-02-19 18:40:46
-
*************************** 2. row ***************************
-
id: 2
-
sid: 3307
-
val: null值
-
upddt: 2014-02-19 18:40:47
-
mupddt: 2014-02-19 18:40:46
-
*************************** 3. row ***************************
-
id: 3
-
sid: 3307
-
val: 0.3390121034709849
-
upddt: 2014-02-19 18:40:47
-
mupddt: 2014-02-19 18:40:46
-
*************************** 4. row ***************************
-
id: 4
-
sid: 3307
-
val: 4b1ae5c8-9952-11e3-b7ca-00151760d8ec
-
upddt: 2014-02-19 18:40:47
- mupddt: 2014-02-19 18:40:46
SLAVE
點選(此處)摺疊或開啟
-
mysql> SELECT id,sid,ifnull(val,'null值') as 'val',upddt,mupddt FROM `test_140219_sbr`\G;
-
*************************** 1. row ***************************
-
id: 1
-
sid: 3308
-
val: NULL
-
upddt: 2014-02-19 18:40:47
-
mupddt: 2014-02-19 18:40:46
-
*************************** 2. row ***************************
-
id: 2
-
sid: 3308
-
val: null值
-
upddt: 2014-02-19 18:40:47
-
mupddt: 2014-02-19 18:40:46
-
*************************** 3. row ***************************
-
id: 3
-
sid: 3308
-
val: 0.3390121034709849
-
upddt: 2014-02-19 18:40:47
-
mupddt: 2014-02-19 18:40:46
-
*************************** 4. row ***************************
-
id: 4
-
sid: 3308
-
val: 4b2744b2-9952-11e3-afc9-00151760d8ec
-
upddt: 2014-02-19 18:40:47
- mupddt: 2014-02-19 18:40:46
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26250550/viewspace-1084211/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 主從複製、雙主複製及半同步複製、以及基於SSL的複製
- 今天測試了一下mysql的Null值MySqlNull
- goldengate基於表複製Go
- mongoDB的主從複製簡單測試MongoDB
- Mysql基於GTID的複製模式MySql模式
- 5-5配置Mysql複製 基於日誌點的複製MySql
- 【PG流複製】Postgresql流複製部署過程及效能測試SQL
- GoldenGate複製的幾個簡單測試Go
- mysql 基於日誌的主從複製MySql
- MySQL·引擎特性·基於InnoDB的物理複製MySql
- postgresql無序uuid效能測試SQLUI
- MySQL 5.7基於GTID的主從複製MySql
- 基於Web的系統測試Web
- Mysql 基於GTID主從複製MySql
- 基於配置檔案的redis的主從複製Redis
- oracle sql_not exists與null的測試OracleSQLNull
- 第16節:基於WRITESET的並行複製方式並行
- 基於 Docker 的 MySQL 主從複製搭建(真正弄懂)DockerMySql
- MySQL 5.5 Semi-sync 半同步複製測試MySql
- 測試建立基於函式的索引函式索引
- 基於敏捷測試的技術研究敏捷測試
- 基於jmeter的效能全流程測試JMeter
- MySQL基於binlog主從複製配置MySql
- 軟體測試之Fuzzing和基於屬性的測試
- 高階複製-7、測試是否非主鍵表的同步
- MySQL 複製全解析 Part10 基於GTID的MySQL複製的一些限制MySql
- Memcached實戰之複製----基於repcached的主從【轉】PCA
- postgresql基於流複製 (streaming replication)的warm-standbySQL
- Postgresql基於流複製 (streaming replication)的hot-standbySQL
- 高階複製-5、測試是否可同步DML操作
- 高階複製-6、測試是否可同步建表
- 基於測試驅動的iOS開發iOS
- 基於 Htte 的 API 自動化測試API
- Spring基於註解的AOP測試Spring
- 基於Karma和Jasmine的AngularJS測試ASMAngularJS
- 基於事件驅動的測試框架ETS事件框架
- 基於JUnit進行的專案測試
- MySQL 5.7 基於GTID搭建主從複製MySql