Mysql中怎么实现延时复制
发布时间:2022-01-21 12:35:58 所属栏目:MySql教程 来源:互联网
导读:今天就跟大家聊聊有关Mysql中怎么实现延时复制,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 首先研究下mysql的复制结构,4.0以上开始,复制分为2个进程,io进程和sql进程。其中io进程连接到m
今天就跟大家聊聊有关Mysql中怎么实现延时复制,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 首先研究下mysql的复制结构,4.0以上开始,复制分为2个进程,io进程和sql进程。其中io进程连接到master读取binlog,写入relaylog,而sql进程读取relaylog后apply到slave上。 binlog和relaylog格式dump出来是这样的: #090108 20:24:17 server id 1 log_pos 9466422 Query thread_id=34456 exec_time=0 error_code=0 SET TIMESTAMP=1231417457; insert into xxxx (UDusedo,UDdirect,UDuserid,UDusername,UDgetuserid,UDgetusername,UDcoins,UDtype,UDzone1,UDtargetvalue,UDdate,UD ip,UDstatus) values ('33','n','7495715','LWGZOY','7495715','LWGZOY','1000','prop','3','56009376',now(),'116.53.1.144','00'); log中有SET TIMESTAMP=1231417457是为了防止slave和master之间时间不同造成某些时间字段值不一致的情况。其实也等同于这句sql在master上运行的时间,那么我们只要获取到它再和当前slave上的时间比较,如果少于我们需要的延时就让复制停下,这不就实现了延时复制么. 在mysql中可以通过函数UNIX_TIMESTAMP获取到和上面的TIMESTAMP同样的结果。 mysql> select unix_timestamp(); +------------------+ | unix_timestamp() | +------------------+ | 1231750815 | +------------------+ 1 row in set (0.00 sec) 如何挖relaylog的尾部是个问题,因为日志可能很大,所以我们要借助下面的命令: [root@HB-150-189 data]# mysql -e "show slave statusG" *************************** 1. row *************************** Master_Host: 192.168.1.104 Master_User: rep Master_Port: 3306 Connect_retry: 60 Master_Log_File: HBDB104-bin.104 Read_Master_Log_Pos: 534427423 Relay_Log_File: HB-150-189-relay-bin.070 Relay_Log_Pos: 20200284 Relay_Master_Log_File: HBDB104-bin.104 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_do_db: aushop,auhj Replicate_ignore_db: Last_errno: 0 Last_error: Skip_counter: 0 Exec_master_log_pos: 534427423 Relay_log_space: 20200284 其中得到Relay_Log_File的名字,Relay_Log_Pos: 20200284,通过这个可以得到一个offset,以此来挖掘relaylog来获取到最近的TIMESTAMP,然后使用: mysqlbinlog -j 20200284./HB-150-189-relay-bin.070|grep "SET TIMESTAMP"|sed -n '1p' 在加上shell的处理就可以轻松获取最近的TIMESTAMP了 再看下show slave status的输出,版本为4.0.26: mysql> show slave statusG *************************** 1. row *************************** Master_Host: 192.168.1.184 Master_User: rep Master_Port: 3306 Connect_retry: 60 Master_Log_File: HBDB184-bin.072 Read_Master_Log_Pos: 358310392 Relay_Log_File: HB150-130-relay-bin.076 Relay_Log_Pos: 348847513 Relay_Master_Log_File: HBDB184-bin.072 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_do_db: money Replicate_ignore_db: Last_errno: 0 Last_error: Skip_counter: 0 Exec_master_log_pos: 358310392 Relay_log_space: 348847513 1 row in set (0.00 sec) 输出信息包括了Slave_IO_Running, Slave_SQL_Running的状态。 mysql 4以后,可以通过STOP SLAVE IO_THREAD来停止io进程的活动,STOP SLAVE SQL_THREAD来停止sql进程的活动,大家只要使用shell结合crontab和nohup,加上对 [root@HB-150-189 data]# mysqladmin extended-status|grep Slave_running 看完上述内容,你们对Mysql中怎么实现延时复制有进一步的了解吗? (编辑:好传媒网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |