官方社区版MySQL 5.7.19 基于Row+Position搭建的一主一从异步复制结构:Master->{Slave}
| ROLE | HOSTNAME | BASEDIR | DATADIR | IP | PORT |
| Master | ZST1 | /usr/local/mysql | /data/mysql/mysql3307/data | 192.168.85.132 | 3307 |
| Slave | ZST2 | /usr/local/mysql | /data/mysql/mysql3307/data | 192.168.85.133 | 3307 |
最初是想核实延迟复制的master_delay=N以哪个时间作为基准计算,想到如果在Slave的表中添加一个以current_timestamp为默认值的时间列,从库在应用relay-log时将"当前"时间写入。将它和表中原来的时间字段作对比,就可以知道延迟时间。想法貌似不错,但...自以为是...很悲催~
# 测试表结构 mydba@192.168.85.133,3307 [replcrash]> show create table py_user; +---------+----------------------------------------------+ | Table | Create Table | +---------+----------------------------------------------+ | py_user | CREATE TABLE `py_user` ( `uid` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) DEFAULT NULL, `add_time` datetime DEFAULT CURRENT_TIMESTAMP, `server_id` varchar(10) DEFAULT NULL, PRIMARY KEY (`uid`) ) ENGINE=InnoDB AUTO_INCREMENT=4105 DEFAULT CHARSET=utf8 | +---------+----------------------------------------------+ 1 row in set (0.00 sec) # Slave开启延迟复制 mydba@192.168.85.133,3307 [replcrash]> change master to master_delay = 30; # 添加参考列 mydba@192.168.85.133,3307 [replcrash]> alter table py_user add ins_time datetime default current_timestamp;