dbi = $dbi; } public function load(?string $connection = null): void { $GLOBALS['urlParams'] = $GLOBALS['urlParams'] ?? null; $this->setPrimaryStatus(); if (! empty($connection)) { $this->setMultiPrimaryStatus(); if ($this->multiPrimaryStatus) { $this->setDefaultPrimaryConnection($connection); $GLOBALS['urlParams']['primary_connection'] = $connection; } } $this->setReplicaStatus(); $this->setPrimaryInfo(); $this->setReplicaInfo(); } private function setPrimaryStatus(): void { $this->primaryStatus = $this->dbi->fetchResult('SHOW MASTER STATUS'); } public function getPrimaryStatus(): array { return $this->primaryStatus; } private function setReplicaStatus(): void { $this->replicaStatus = $this->dbi->fetchResult('SHOW SLAVE STATUS'); } public function getReplicaStatus(): array { return $this->replicaStatus; } private function setMultiPrimaryStatus(): void { $this->multiPrimaryStatus = $this->dbi->fetchResult('SHOW ALL SLAVES STATUS'); } private function setDefaultPrimaryConnection(string $connection): void { $this->dbi->query(sprintf('SET @@default_master_connection = \'%s\'', $this->dbi->escapeString($connection))); } private static function fill(array $status, string $key): array { if (empty($status[0][$key])) { return []; } return explode(',', $status[0][$key]); } private function setPrimaryInfo(): void { $this->primaryInfo = ['status' => false]; if (count($this->primaryStatus) > 0) { $this->primaryInfo['status'] = true; } if (! $this->primaryInfo['status']) { return; } $this->primaryInfo['Do_DB'] = self::fill($this->primaryStatus, 'Binlog_Do_DB'); $this->primaryInfo['Ignore_DB'] = self::fill($this->primaryStatus, 'Binlog_Ignore_DB'); } /** * @return array */ public function getPrimaryInfo(): array { return $this->primaryInfo; } private function setReplicaInfo(): void { $this->replicaInfo = ['status' => false]; if (count($this->replicaStatus) > 0) { $this->replicaInfo['status'] = true; } if (! $this->replicaInfo['status']) { return; } $this->replicaInfo['Do_DB'] = self::fill($this->replicaStatus, 'Replicate_Do_DB'); $this->replicaInfo['Ignore_DB'] = self::fill($this->replicaStatus, 'Replicate_Ignore_DB'); $this->replicaInfo['Do_Table'] = self::fill($this->replicaStatus, 'Replicate_Do_Table'); $this->replicaInfo['Ignore_Table'] = self::fill($this->replicaStatus, 'Replicate_Ignore_Table'); $this->replicaInfo['Wild_Do_Table'] = self::fill($this->replicaStatus, 'Replicate_Wild_Do_Table'); $this->replicaInfo['Wild_Ignore_Table'] = self::fill($this->replicaStatus, 'Replicate_Wild_Ignore_Table'); } /** * @return array */ public function getReplicaInfo(): array { return $this->replicaInfo; } }