测试方法:
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