• Модуль: cluster
  • Путь к файлу: ~/bitrix/modules/cluster/classes/mysql/dbnode_check.php
  • Класс: CClusterDBNodeCheck
  • Вызов: CClusterDBNodeCheck::SlaveNodeCommon
function SlaveNodeCommon($nodeDB)
{
	$result = array();

	global $DB;
	$main_character_set_server = $this->GetServerVariable($DB, "character_set_server");
	$main_collation_server = $this->GetServerVariable($DB, "collation_server");

	$arCharset = $this->GetServerVariables($nodeDB, array(
		"character_set_server" => "",
		"character_set_database" => "",
		"character_set_connection" => "",
		"character_set_client" => "",
	), 'character_set%');

	$arCollation = $this->GetServerVariables($nodeDB, array(
		"collation_server" => "",
		"collation_database" => "",
		"collation_connection" => "",
	), 'collation%');

	$is_ok = $main_character_set_server === $arCharset["character_set_server"]
		&& $main_collation_server === $arCollation["collation_server"]
	;
	$result["master_charset"] = array(
		"IS_OK" => $is_ok? CClusterDBNodeCheck::OK: CClusterDBNodeCheck::ERROR,
		"MESSAGE" => GetMessage("CLU_MASTER_CHARSET_MSG"),
		"WIZ_REC" => GetMessage("CLU_MASTER_CHARSET_WIZREC", array(
			"#character_set_server#" => $arCharset["character_set_server"],
			"#collation_server#" => $arCollation["collation_server"],
		)),
	);

	$is_ok = $arCharset["character_set_server"] !== ""
		&& $arCharset["character_set_server"] === $arCharset["character_set_database"]
		&& $arCharset["character_set_database"] === $arCharset["character_set_connection"]
		&& $arCharset["character_set_connection"] === $arCharset["character_set_client"]
	;
	$result["charset"] = array(
		"IS_OK" => $is_ok? CClusterDBNodeCheck::OK: CClusterDBNodeCheck::ERROR,
		"MESSAGE" => GetMessage("CLU_CHARSET_MSG"),
		"WIZ_REC" => GetMessage("CLU_CHARSET_WIZREC", array(
			"#character_set_server#" => $arCharset["character_set_server"],
			"#character_set_database#" => $arCharset["character_set_database"],
			"#character_set_connection#" => $arCharset["character_set_connection"],
			"#character_set_client#" => $arCharset["character_set_client"],
		)),
	);

	$is_ok = $arCollation["collation_server"] !== ""
		&& $arCollation["collation_server"] === $arCollation["collation_database"]
		&& $arCollation["collation_database"] === $arCollation["collation_connection"]
	;
	$result["collation"] = array(
		"IS_OK" => $is_ok? CClusterDBNodeCheck::OK: CClusterDBNodeCheck::ERROR,
		"MESSAGE" => GetMessage("CLU_COLLATION_MSG"),
		"WIZ_REC" => GetMessage("CLU_COLLATION_WIZREC", array(
			"#collation_server#" => $arCollation["collation_server"],
			"#collation_database#" => $arCollation["collation_database"],
			"#collation_connection#" => $arCollation["collation_connection"],
		)),
	);

	$arTestSQL = array(
		0 => "drop table b_cluster_test",
		"sql_create" => "create table b_cluster_test(column1 int)",
		"sql_insert" => "insert into b_cluster_test (column1) values (1)",
		"sql_select" => "select * from b_cluster_test",
		"sql_update" => "update b_cluster_test set column1=2 where column1=1",
		"sql_delete" => "delete from b_cluster_test where column1=2",
		"sql_drop"   => "drop table b_cluster_test",
	);
	$is_ok = true;
	$sql_erorrs_list = "";
	foreach($arTestSQL as $id => $sql)
	{
		$res = $nodeDB->Query($sql, true);
		if(!$res && $id !== 0)
		{
			$is_ok = false;
			$sql_erorrs_list .= "
 ".$sql.": ".$nodeDB->db_Error."n"; } } $result["sql"] = array( "IS_OK" => $is_ok? CClusterDBNodeCheck::OK: CClusterDBNodeCheck::ERROR, "MESSAGE" => GetMessage("CLU_SQL_MSG"), "WIZ_REC" => GetMessage("CLU_SQL_WIZREC", array( "#sql_erorrs_list#" => $sql_erorrs_list, )), ); $required_version = "5.0.0"; $slave_version = $this->GetServerVariable($nodeDB, "version"); $is_ok = version_compare($required_version, $slave_version) <= 0; $result["version"] = array( "IS_OK" => $is_ok? CClusterDBNodeCheck::OK: CClusterDBNodeCheck::ERROR, "MESSAGE" => GetMessage("CLU_SLAVE_VERSION_MSG", array( "#slave-version#" => $slave_version, "#required-version#" => $required_version, )), "WIZ_REC" => GetMessage("CLU_VERSION_WIZREC"), ); return $result; }