• Модуль: cluster
  • Путь к файлу: ~/bitrix/modules/cluster/classes/mysql/dbnode_check.php
  • Класс: CClusterDBNodeCheck
  • Вызов: CClusterDBNodeCheck::MainNodeForReplication
function MainNodeForReplication($arMasterNode)
{
	if($arMasterNode["ID"] == 1)
		global $DB;
	else
		$DB = CDatabase::GetDBNodeConnection($arMasterNode["ID"], true);;

	$result = array();

	$server_id = $this->GetServerVariable($DB, "server_id");
	$is_ok =  $server_id > 0;
	$result["server_id"] = array(
		"IS_OK" => $is_ok? CClusterDBNodeCheck::OK: CClusterDBNodeCheck::ERROR,
		"MESSAGE" => GetMessage("CLU_SERVER_ID_MSG", array("#server-id#" => $server_id)),
		"WIZ_REC" => GetMessage("CLU_SERVER_ID_WIZREC"),
	);

	$log_bin = $this->GetServerVariable($DB, "log_bin");
	$is_ok =  $log_bin === "ON";
	$result["log_bin"] = array(
		"IS_OK" => $is_ok? CClusterDBNodeCheck::OK: CClusterDBNodeCheck::ERROR,
		"MESSAGE" => GetMessage("CLU_LOG_BIN_MSG", array("#log-bin#" => $log_bin)),
		"WIZ_REC" => GetMessage("CLU_LOG_BIN_WIZREC"),
	);

	$skip_networking = $this->GetServerVariable($DB, "skip_networking");
	$is_ok =  $skip_networking === "OFF";
	$result["skip_networking"] = array(
		"IS_OK" => $is_ok? CClusterDBNodeCheck::OK: CClusterDBNodeCheck::ERROR,
		"MESSAGE" => GetMessage("CLU_SKIP_NETWORKING_MSG", array("#skip-networking#" => $skip_networking)),
		"WIZ_REC" => GetMessage("CLU_SKIP_NETWORKING_WIZREC"),
	);

	$innodb_flush_log_at_trx_commit = $this->GetServerVariable($DB, "innodb_flush_log_at_trx_commit");
	//if($innodb_flush_log_at_trx_commit !== '1')
	{
		$is_ok = $innodb_flush_log_at_trx_commit === '1';
		$result["innodb_flush_log_at_trx_commit"] = array(
			"IS_OK" => $is_ok? CClusterDBNodeCheck::OK: CClusterDBNodeCheck::WARNING,
			"MESSAGE" => GetMessage("CLU_FLUSH_ON_COMMIT_MSG", array("#innodb_flush_log_at_trx_commit#" => $innodb_flush_log_at_trx_commit)),
			"WIZ_REC" => "",
		);
	}

	$sync_binlog = $this->GetServerVariable($DB, "sync_binlog");
	$is_ok = $sync_binlog === '1';
	$result["sync_binlog"] = array(
		"IS_OK" => $is_ok? CClusterDBNodeCheck::OK: CClusterDBNodeCheck::WARNING,
		"MESSAGE" => GetMessage("CLU_SYNC_BINLOG_MSG", array("#sync_binlog#" => $sync_binlog)),
		"WIZ_REC" => "",
	);

	$DatabaseName = $DB->DBName;
	$is_ok = false;
	$rsBinLogs = $DB->Query("show master status", true, '', array("fixed_connection"=>true));
	if(!$rsBinLogs)
	{
		$result["master_status"] = array(
			"IS_OK" => CClusterDBNodeCheck::ERROR,
			"MESSAGE" => GetMessage("CLU_MASTER_STATUS_MSG"),
			"WIZ_REC" => GetMessage("CLU_MASTER_STATUS_WIZREC", array("#sql#" => "GRANT REPLICATION CLIENT on *.* to '".$DB->DBLogin."'@'%';")),
		);
	}
	else
	{
		if($ar = $rsBinLogs->Fetch())
		{
			if($ar["Binlog_Do_DB"] === $DatabaseName)
				$is_ok = true;
		}
		while($ar = $rsBinLogs->Fetch())
				$is_ok = false;

		$result["binlog_do_db"] = array(
			"IS_OK" => $is_ok? CClusterDBNodeCheck::OK: CClusterDBNodeCheck::WARNING,
			"MESSAGE" => GetMessage("CLU_SYNC_BINLOGDODB_MSG"),
			"WIZ_REC" => GetMessage("CLU_SYNC_BINLOGDODB_WIZREC", array("#database#" => $DatabaseName)),
		);
	}

	return $result;
}