mysql relay log时间_如何得到Slave应用relay-log的时间
官方社區(qū)版MySQL 5.7.19 基于Row+Position搭建的一主一從異步復(fù)制結(jié)構(gòu):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
最初是想核實(shí)延遲復(fù)制的master_delay=N以哪個(gè)時(shí)間作為基準(zhǔn)計(jì)算,想到如果在Slave的表中添加一個(gè)以current_timestamp為默認(rèn)值的時(shí)間列,從庫(kù)在應(yīng)用relay-log時(shí)將"當(dāng)前"時(shí)間寫入。將它和表中原來(lái)的時(shí)間字段作對(duì)比,就可以知道延遲時(shí)間。想法貌似不錯(cuò),但...自以為是...很悲催~
# 測(cè)試表結(jié)構(gòu)
mydba@192.168.85.133,3307 [replcrash]> show create tablepy_user;+---------+----------------------------------------------+
| Table | Create Table |
+---------+----------------------------------------------+
| py_user | CREATE TABLE`py_user` (
`uid`int(11) NOT NULLAUTO_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.00sec)
# Slave開(kāi)啟延遲復(fù)制
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;
View Code
然后往Master寫入新數(shù)據(jù),并到Slave查看數(shù)據(jù)
# Slave數(shù)據(jù)
mydba@192.168.85.133,3307 [replcrash]> select * frompy_user;+-----+--------------------------+---------------------+-----------+---------------------+
| uid | name | add_time | server_id | ins_time |
+-----+--------------------------+---------------------+-----------+---------------------+
| 1 | BD9U7I9W68BTDIXWEEUQNYRX | 2017-12-19 11:07:40 | 1323307 | 2017-12-19 11:07:40 |
| 2 | 9722XBCKISXDBSRDA5VA0A | 2017-12-19 11:07:42 | 1323307 | 2017-12-19 11:07:42 |
+-----+--------------------------+---------------------+-----------+---------------------+
2 rows in set (0.00sec)
# general-log
[root@ZST2 data]# cat mysql-general.log
/usr/local/mysql/bin/mysqld, Version: 5.7.19-log (MySQL Community Server (GPL)). started with:
Tcp port:3307 Unix socket: /tmp/mysql3307.sock
Time Id Command Argument
...2017-12-19T03:07:46.515218Z 17 Query truncate tablepy_user2017-12-19T03:08:10.516900Z 17 Query BEGIN
2017-12-19T03:08:10.517318Z 17 Query COMMIT /*implicit, from Xid_log_event*/
2017-12-19T03:08:12.517930Z 17 Query BEGIN
2017-12-19T03:08:12.518383Z 17 Query COMMIT /*implicit, from Xid_log_event*/
2017-12-19T03:08:27.614844Z 3 Query select * frompy_user[root@ZST2 data]#
View Code
general-log可以看出Slave確實(shí)是晚于Master 30秒才應(yīng)用,但新寫入的記錄對(duì)應(yīng)的ins_time并沒(méi)有滯后add_time 30秒
為什么會(huì)出現(xiàn)這種情況?解析relay-log查看日志中是如何記錄的
# Slave上的relay-log信息
[root@ZST2 data]# mysqlbinlog-v -vv --base64-output=decode-rows relay-bin.000009...
# at2803#171219 11:07:42 server id 1323307 end_log_pos 19664 CRC32 0x6fdfa523 Query thread_id=26 exec_time=0 error_code=0SET TIMESTAMP=1513652862/*!*/;
BEGIN/*!*/;
# at2888#171219 11:07:42 server id 1323307 end_log_pos 19727 CRC32 0x9edb1d95 Table_map: `replcrash`.`py_user` mapped to number 231# at2951#171219 11:07:42 server id 1323307 end_log_pos 19803 CRC32 0x18252616 Write_rows: table id 231flags: STMT_END_F
### INSERT INTO `replcrash`.`py_user`
### SET
### @1=2 /*INT meta=0 nullable=0 is_null=0*/### @2='9722XBCKISXDBSRDA5VA0A' /*VARSTRING(96) meta=96 nullable=1 is_null=0*/### @3='2017-12-19 11:07:42' /*DATETIME(0) meta=0 nullable=1 is_null=0*/### @4='1323307' /*VARSTRING(30) meta=30 nullable=1 is_null=0*/# at3027#171219 11:07:42 server id 1323307 end_log_pos 19834 CRC32 0x5e49e8d9 Xid = 295COMMIT/*!*/;
# Slave上的binlog信息
[root@ZST2 logs]# mysqlbinlog-v -vv --base64-output=decode-rows mysql-bin.000005...
# at19029#171219 11:07:42 server id 1323307 end_log_pos 19100 CRC32 0x70e91679 Query thread_id=26 exec_time=30 error_code=0SET TIMESTAMP=1513652862/*!*/;
BEGIN/*!*/;
# at19100#171219 11:07:42 server id 1323307 end_log_pos 19165 CRC32 0x9fcf7ba6 Table_map: `replcrash`.`py_user` mapped to number 231# at19165#171219 11:07:42 server id 1323307 end_log_pos 19246 CRC32 0x17e542da Write_rows: table id 231flags: STMT_END_F
### INSERT INTO `replcrash`.`py_user`
### SET
### @1=2 /*INT meta=0 nullable=0 is_null=0*/### @2='9722XBCKISXDBSRDA5VA0A' /*VARSTRING(96) meta=96 nullable=1 is_null=0*/### @3='2017-12-19 11:07:42' /*DATETIME(0) meta=0 nullable=1 is_null=0*/### @4='1323307' /*VARSTRING(30) meta=30 nullable=1 is_null=0*/### @5='2017-12-19 11:07:42' /*DATETIME(0) meta=0 nullable=1 is_null=0*/# at19246#171219 11:07:42 server id 1323307 end_log_pos 19277 CRC32 0x8557b6ea Xid = 249COMMIT/*!*/;
View Code
在relay-log/binlog中可以看到SET TIMESTAMP=1513652862/*!*/;
mydba@192.168.85.133,3307 [replcrash]> set timestamp=1513652862;select now();set timestamp=0;selectnow();
Query OK,0 rows affected (0.00sec)+---------------------+
| now() |
+---------------------+
| 2017-12-19 11:07:42 |
+---------------------+
1 row in set (0.00sec)
Query OK,0 rows affected (0.00sec)+---------------------+
| now() |
+---------------------+
| 2017-12-20 10:48:49 |
+---------------------+
1 row in set (0.00sec)
mydba@192.168.85.133,3307 [replcrash]>
View Code
正是由于設(shè)置了TIMESTAMP,從庫(kù)ins_time列使用current_timestamp默認(rèn)值時(shí)就得到當(dāng)時(shí)的時(shí)間。SBR的環(huán)境中,時(shí)間相關(guān)的函數(shù)(now(),current_date(),current_time()等),都能安全的復(fù)制到Slave的原因也是因?yàn)閎inlog中記錄有timestamp
因此上面添加列獲取Slave應(yīng)用relay-log的時(shí)間肯定行不通。如果只是偶爾查看的話,可以從general-log中提取~.~
master_delay = N
An event received from the master is not executed until at least N seconds later than its execution on the master. The exceptions are that there is no delay for format description events or log file rotation events, which affect only the internal state of the SQL thread.
總結(jié)
以上是生活随笔為你收集整理的mysql relay log时间_如何得到Slave应用relay-log的时间的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql的root用户密码_MySQL
- 下一篇: 拼多多回应跨境业务:仍处于发展初期,对财