Skip to content

Commit 0b12184

Browse files
author
zhao.zhiqiang
committed
add heart beat test
1 parent 31a55a7 commit 0b12184

File tree

3 files changed

+59
-37
lines changed

3 files changed

+59
-37
lines changed

Connect.php

100644100755
Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ public static function init($gtid = false, $slave_id = '') {
8686
}
8787
socket_set_block(self::$_SOCKET);
8888
socket_set_option(self::$_SOCKET, SOL_SOCKET, SO_KEEPALIVE, 1);
89-
//socket_set_option(self::$_SOCKET,SOL_SOCKET,SO_SNDTIMEO,['sec' => 2, 'usec' => 5000]);
90-
//socket_set_option(self::$_SOCKET,SOL_SOCKET,SO_RCVTIMEO,['sec' => 2, 'usec' => 5000]);
89+
// socket_set_option(self::$_SOCKET,SOL_SOCKET,SO_SNDTIMEO,['sec' => 2, 'usec' => 5000]);
90+
// socket_set_option(self::$_SOCKET,SOL_SOCKET,SO_RCVTIMEO,['sec' => 2, 'usec' => 5000]);
9191

9292
self::$_FLAG = ConstCapability::$CAPABILITIES ;//| S::$MULTI_STATEMENTS;
9393
if(self::$_DB) {
@@ -188,6 +188,7 @@ private static function _goneAway($msg) {
188188

189189

190190
private static function _readPacket() {
191+
191192
//消息头
192193
$header = self::_readBytes(4);
193194

@@ -237,14 +238,18 @@ public static function excute($sql) {
237238
self::_write($prelude . $sql);
238239
}
239240

240-
241241
public static function getBinlogStream() {
242242

243243
// checksum
244244
self::$_CHECKSUM = DBHelper::isCheckSum();
245245
if(self::$_CHECKSUM){
246246
self::excute("set @master_binlog_checksum= @@global.binlog_checksum");
247247
}
248+
//heart_period
249+
$heart = (int)Config::$DB_CONFIG['heartbeat'];
250+
if($heart) {
251+
self::excute("set @master_heartbeat_period=".($heart*1000000000));
252+
}
248253

249254
self::_writeRegisterSlaveCommand();
250255

@@ -316,6 +321,36 @@ private static function _sync($result, $flag) {
316321
return $result;
317322
}
318323

324+
/**
325+
* todo
326+
* @breif 注册成slave
327+
* @return void
328+
*/
329+
private static function _writeRegisterSlaveCommand2() {
330+
$len = 22+strlen(Config::$DB_CONFIG['username'])+
331+
strlen(Config::$DB_CONFIG['hostname'])+
332+
strlen(Config::$DB_CONFIG['password']);
333+
$header = pack('l', $len);
334+
335+
// COM_BINLOG_DUMP
336+
$data = $header . chr(ConstCommand::COM_REGISTER_SLAVE);
337+
338+
$data .= pack('l', self::$_SLAVE_SERVER_ID);
339+
$data .= pack('C',strlen(Config::$DB_CONFIG['hostname']));
340+
$data .= Config::$DB_CONFIG['hostname'];
341+
$data .= pack('C',strlen(Config::$DB_CONFIG['username']));
342+
$data .= Config::$DB_CONFIG['username'];
343+
$data .= pack('C',strlen(Config::$DB_CONFIG['password']));
344+
$data .= Config::$DB_CONFIG['password'];
345+
346+
$data .= pack('s', Config::$DB_CONFIG['port']);
347+
$data .= pack('l', 0);
348+
$data .= pack('l', 0);
349+
self::_write($data);
350+
$result = self::_readPacket();
351+
PackAuth::success($result);
352+
}
353+
319354
/**
320355
* @breif 注册成slave
321356
* @return void

bin/BinLogPack.php

100644100755
Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,7 @@ public function init($pack, $checkSum = true) {
4242
self::$_PACK = $pack;
4343
self::$_PACK_KEY = 0;
4444
self::$EVENT_INFO = [];
45-
4645
$this->advance(1);
47-
4846
self::$EVENT_INFO['time'] = $timestamp = unpack('L', $this->read(4))[1];
4947
self::$EVENT_INFO['type'] = self::$EVENT_TYPE = unpack('C', $this->read(1))[1];
5048
self::$EVENT_INFO['id'] = $server_id = unpack('L', $this->read(4))[1];
@@ -53,12 +51,9 @@ public function init($pack, $checkSum = true) {
5351
//position of the next event
5452
self::$EVENT_INFO['pos'] = $log_pos = unpack('L', $this->read(4))[1];//
5553
self::$EVENT_INFO['flag'] = $flags = unpack('S', $this->read(2))[1];
56-
5754
$event_size_without_header = $checkSum === true ? ($event_size -23) : $event_size - 19;
58-
5955
$data = [];
6056

61-
6257
// 映射fileds相关信息
6358
if (self::$EVENT_TYPE == ConstEventType::TABLE_MAP_EVENT) {
6459
RowEvent::tableMap(self::getInstance(), self::$EVENT_TYPE);
@@ -82,12 +77,13 @@ public function init($pack, $checkSum = true) {
8277

8378
}elseif(self::$EVENT_TYPE == 15) {
8479
//$pack = self::getInstance();
85-
8680
//$pack->read(4);
87-
88-
8981
} elseif(self::$EVENT_TYPE == ConstEventType::QUERY_EVENT) {
9082

83+
} elseif(self::$EVENT_TYPE == ConstEventType::HEARTBEAT_LOG_EVENT) {
84+
//心跳检测机制
85+
$binlog_name = $this->read($event_size_without_header);
86+
echo 'heart beat '.$binlog_name."\n";
9187
}
9288

9389
if(DEBUG) {
@@ -96,14 +92,9 @@ public function init($pack, $checkSum = true) {
9692
$msg .= ' -- typeEvent -> '.self::$EVENT_TYPE;
9793
Log::out($msg);
9894
}
99-
10095
return $data;
101-
102-
10396
}
10497

105-
// private function
106-
10798
public function read($length) {
10899
$length = (int)$length;
109100
$n='';

config/Config.php

100644100755
Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,30 +8,28 @@
88
class Config {
99

1010
public static $DB_CONFIG = array(
11-
'username' => 'root',
12-
'host' => '127.0.0.1',
13-
'port' => '3307',
14-
'password' => '123456',
15-
'db_name' => 'zzq'
16-
);
11+
'username' => 'root',
12+
'hostname' => 'slave',
13+
'host' => '127.0.0.1',
14+
'port' => 3306,
15+
'password' => '123456',
16+
'db_name' => 'zzq',
17+
'heartbeat' => 5// 心跳检测0不开启,>0 开启,(second)
18+
);
1719

1820
// 默认100次mysql dml操作记录一次 pos,filename到文件
1921
public static $BINLOG_COUNT = 100;
2022

2123
// 记录当前执行到的pos,filename
2224
public static $BINLOG_NAME_PATH = 'file-pos';
23-
24-
public static $OUT = 'out.log';
25-
26-
25+
//
26+
public static $OUT = 'out.log';
2727

2828
// log记录
2929
public static $LOG_ERROR_PATH = 'log/error.log';
3030
public static $LOG_WARN_PATH = 'log/warn.log';
3131
public static $LOG_NOTICE_PATH = 'log/notice.log';
3232

33-
34-
3533
public static $LOG = [
3634
'binlog' => [
3735
'error' => 'log/binlog-error.log'
@@ -47,17 +45,15 @@ class Config {
4745
],
4846
];
4947

50-
51-
public static function init() {
52-
48+
public static function init() {
5349
self::$BINLOG_NAME_PATH = ROOT . 'file-pos';
5450
self::$OUT = ROOT . 'out.log';
55-
foreach(self::$LOG as $key => $value) {
56-
foreach($value as $k => $v) {
57-
self::$LOG[$key][$k] = ROOT . $v;
58-
}
59-
}
60-
}
51+
foreach(self::$LOG as $key => $value) {
52+
foreach($value as $k => $v) {
53+
self::$LOG[$key][$k] = ROOT . $v;
54+
}
55+
}
56+
}
6157
}
6258

6359
Config::init();

0 commit comments

Comments
 (0)