function SetOnLine($node_id, $master_id) { global $DB; $arNode = CClusterDBNode::GetByID($node_id); if (!is_array($arNode)) { return; } if ($arNode["ROLE_ID"] == "SLAVE") { if ($master_id == 1) { $masterDB = $DB; } else { ob_start(); $masterDB = CDatabase::GetDBNodeConnection($master_id, true); $error = ob_get_contents(); ob_end_clean(); } $rs = $masterDB->Query("show master status", false, '', array('fixed_connection' => true)); if ($arMasterStatus = $rs->Fetch()) { ob_start(); $nodeDB = CDatabase::GetDBNodeConnection($arNode["ID"], true); $error = ob_get_contents(); ob_end_clean(); if (is_object($nodeDB)) { $rs = $nodeDB->Query("\n\t\t\t\t\t\tCHANGE MASTER TO\n\t\t\t\t\t\t\tMASTER_HOST = '" . $DB->ForSQL($arNode["MASTER_HOST"]) . "'\n\t\t\t\t\t\t\t,MASTER_USER = '******'\n\t\t\t\t\t\t\t,MASTER_PASSWORD = '******'\n\t\t\t\t\t\t\t,MASTER_PORT = " . $DB->ForSQL($arNode["MASTER_PORT"]) . "\n\t\t\t\t\t\t\t,MASTER_LOG_FILE = '" . $arMasterStatus["File"] . "'\n\t\t\t\t\t\t\t,MASTER_LOG_POS = " . $arMasterStatus["Position"] . "\n\t\t\t\t\t", false, '', array('fixed_connection' => true)); if ($rs) { $rs = $nodeDB->Query("START SLAVE"); } if ($rs) { $obNode = new CClusterDBNode(); $obNode->Update($node_id, array("MASTER_ID" => $master_id)); CClusterDBNode::SetOnline($node_id); CClusterSlave::AdjustServerID($arNode, $nodeDB); } } } } elseif ($arNode["ROLE_ID"] == "MASTER" && preg_match("/^(.+):(\\d+)\$/", $arNode["DB_HOST"], $match)) { $rs = $DB->Query("show master status", false, '', array('fixed_connection' => true)); if ($arMasterStatus = $rs->Fetch()) { ob_start(); $nodeDB = CDatabase::GetDBNodeConnection($arNode["ID"], true); $error = ob_get_contents(); ob_end_clean(); if (is_object($nodeDB)) { $rs = $nodeDB->Query("STOP SLAVE", true, '', array('fixed_connection' => true)); if ($rs) { $rs = $nodeDB->Query("\n\t\t\t\t\t\t\tCHANGE MASTER TO\n\t\t\t\t\t\t\t\tMASTER_HOST = '" . $DB->ForSQL($arNode["MASTER_HOST"]) . "'\n\t\t\t\t\t\t\t\t,MASTER_USER = '******'\n\t\t\t\t\t\t\t\t,MASTER_PASSWORD = '******'\n\t\t\t\t\t\t\t\t,MASTER_PORT = " . $DB->ForSQL($arNode["MASTER_PORT"]) . "\n\t\t\t\t\t\t\t\t,MASTER_LOG_FILE = '" . $arMasterStatus["File"] . "'\n\t\t\t\t\t\t\t\t,MASTER_LOG_POS = " . $arMasterStatus["Position"] . "\n\t\t\t\t\t\t", false, '', array('fixed_connection' => true)); } if ($rs) { $rs = $nodeDB->Query("START SLAVE"); } if ($rs) { $rs = $nodeDB->Query("show master status", false, '', array('fixed_connection' => true)); if ($arMasterStatus = $rs->Fetch()) { $rs = $DB->Query("STOP SLAVE", true, '', array('fixed_connection' => true)); if ($rs) { $rs = $DB->Query("\n\t\t\t\t\t\t\t\t\tCHANGE MASTER TO\n\t\t\t\t\t\t\t\t\t\tMASTER_HOST = '" . $DB->ForSQL($match[1]) . "'\n\t\t\t\t\t\t\t\t\t\t,MASTER_USER = '******'\n\t\t\t\t\t\t\t\t\t\t,MASTER_PASSWORD = '******'\n\t\t\t\t\t\t\t\t\t\t,MASTER_PORT = " . $DB->ForSQL($match[2]) . "\n\t\t\t\t\t\t\t\t\t\t,MASTER_LOG_FILE = '" . $arMasterStatus["File"] . "'\n\t\t\t\t\t\t\t\t\t\t,MASTER_LOG_POS = " . $arMasterStatus["Position"] . "\n\t\t\t\t\t\t\t\t", false, '', array('fixed_connection' => true)); } if ($rs) { $rs = $DB->Query("START SLAVE"); } if ($rs) { $obNode = new CClusterDBNode(); $obNode->Update($node_id, array("MASTER_ID" => $master_id)); $obNode->Update($master_id, array("MASTER_ID" => $node_id)); CClusterDBNode::SetOnline($node_id); CClusterSlave::AdjustServerID($arNode, $nodeDB); } } } } } } }
function InstallDB($arParams = array()) { global $DBType, $APPLICATION; $node_id = strlen($arParams["DATABASE"]) > 0 ? intval($arParams["DATABASE"]) : false; if ($node_id !== false) { $DB = $GLOBALS["DB"]->GetDBNodeConnection($node_id); } else { $DB = $GLOBALS["DB"]; } $this->errors = false; $arAllErrors = array(); // check if module was deinstalled without table save $DATE_INSTALL_TABLES = ""; $no_tables = "N"; if (!$DB->Query("SELECT count('x') FROM b_stat_day WHERE 1=0", true)) { // last installation date have to be current $DATE_INSTALL_TABLES = date("d.m.Y H:i:s", time()); $no_tables = "Y"; } if ($no_tables == "Y") { $this->errors = $DB->RunSQLBatch($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/statistic/install/db/" . strtolower($DB->type) . "/install.sql"); } if ($this->errors !== false) { $APPLICATION->ThrowException(implode("<br>", $this->errors)); return false; } RegisterModule("statistic"); RegisterModuleDependences("main", "OnPageStart", "statistic", "CStopList", "Check", "100"); RegisterModuleDependences("main", "OnBeforeProlog", "statistic", "CStatistics", "Keep", "100"); RegisterModuleDependences("main", "OnEpilog", "statistic", "CStatistics", "Set404", "100"); RegisterModuleDependences("main", "OnBeforeProlog", "statistic", "CStatistics", "StartBuffer", "1000"); RegisterModuleDependences("main", "OnAfterEpilog", "statistic", "CStatistics", "EndBuffer", "10"); RegisterModuleDependences("main", "OnEventLogGetAuditTypes", "statistic", "CStatistics", "GetAuditTypes", 10); RegisterModuleDependences("statistic", "OnCityLookup", "statistic", "CCityLookup_geoip_mod", "OnCityLookup", "100"); RegisterModuleDependences("statistic", "OnCityLookup", "statistic", "CCityLookup_geoip_extension", "OnCityLookup", "200"); RegisterModuleDependences("statistic", "OnCityLookup", "statistic", "CCityLookup_geoip_pure", "OnCityLookup", "300"); RegisterModuleDependences("statistic", "OnCityLookup", "statistic", "CCityLookup_stat_table", "OnCityLookup", "400"); RegisterModuleDependences("cluster", "OnGetTableList", "statistic", "statistic", "OnGetTableList"); if (strlen($DATE_INSTALL_TABLES) > 0) { COption::SetOptionString("main", "INSTALL_STATISTIC_TABLES", $DATE_INSTALL_TABLES, "Date of installation of statistics module tables"); } if ($node_id !== false) { COption::SetOptionString("statistic", "dbnode_id", $node_id); if (CModule::IncludeModule('cluster')) { CClusterDBNode::SetOnline($node_id); } } else { COption::SetOptionString("statistic", "dbnode_id", "N"); } COption::SetOptionString("statistic", "dbnode_status", "ok"); // init counters if (array_key_exists("allow_initial", $arParams) && $arParams["allow_initial"] == "Y") { $strSql = "SELECT ID FROM b_stat_day"; $e = $DB->Query($strSql, false, $err_mess . __LINE__); if (!($er = $e->Fetch())) { if (intval($arParams["START_HITS"]) > 0 || intval($arParams["START_HOSTS"]) > 0 || intval($arParams["START_GUESTS"]) > 0) { $arFields = array("DATE_STAT" => $DB->GetNowDate(), "HITS" => intval($arParams["START_HITS"]), "C_HOSTS" => intval($arParams["START_HOSTS"]), "GUESTS" => intval($arParams["START_GUESTS"]), "NEW_GUESTS" => intval($arParams["START_GUESTS"])); $DB->Insert("b_stat_day", $arFields, $err_mess . __LINE__); } } } $arr = getdate(); $ndate = mktime(0, 1, 0, $arr["mon"], $arr["mday"], $arr["year"]); CAgent::AddAgent("CStatistics::SetNewDay();", "statistic", "Y", 86400, "", "Y", ConvertTimeStamp($ndate + CTimeZone::GetOffset(), "FULL"), 200); $ndate = mktime(3, 0, 0, $arr["mon"], $arr["mday"], $arr["year"]); CAgent::AddAgent("CStatistics::CleanUpStatistics_1();", "statistic", "Y", 86400, "", "Y", ConvertTimeStamp($ndate + CTimeZone::GetOffset(), "FULL"), 50); $ndate = mktime(4, 0, 0, $arr["mon"], $arr["mday"], $arr["year"]); CAgent::AddAgent("CStatistics::CleanUpStatistics_2();", "statistic", "Y", 86400, "", "Y", ConvertTimeStamp($ndate + CTimeZone::GetOffset(), "FULL"), 30); CAgent::AddAgent("CStatistics::CleanUpSessionData();", "statistic", "N", 7200); CAgent::AddAgent("CStatistics::CleanUpPathCache();", "statistic", "N", 3600); CAgent::RemoveAgent("SendDailyStatistics();", "statistic"); if (strpos($_SERVER["SERVER_SOFTWARE"], "(Win32)") <= 0) { $ndate = mktime(9, 0, 0, $arr["mon"], $arr["mday"], $arr["year"]); CAgent::AddAgent("SendDailyStatistics();", "statistic", "Y", 86400, "", "Y", ConvertTimeStamp($ndate + CTimeZone::GetOffset(), "FULL"), 25); } if ($no_tables == "Y") { $arAllErrors[] = $DB->RunSQLBatch($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/statistic/install/db/" . strtolower($DB->type) . "/searchers.sql"); $arAllErrors[] = $DB->RunSQLBatch($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/statistic/install/db/" . strtolower($DB->type) . "/browsers.sql"); $arAllErrors[] = $DB->RunSQLBatch($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/statistic/install/db/" . strtolower($DB->type) . "/adv.sql"); } // ip-to-country require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/statistic/ip_tools.php"; i2c_load_countries(); if (!array_key_exists("CREATE_I2C_INDEX", $arParams) || $arParams["CREATE_I2C_INDEX"] == "Y") { i2c_create_db($total_reindex, $reindex_success, $step_reindex, $int_prev); } $fname = $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/statistic/install/db/" . strtolower($DB->type) . "/optimize.sql"; if (file_exists($fname)) { $arAllErrors[] = $DB->RunSQLBatch($fname); } $this->errors = array(); foreach ($arAllErrors as $ar) { if (is_array($ar)) { foreach ($ar as $strError) { $this->errors[] = $strError; } } } if (count($this->errors) < 1) { $this->errors = false; } if ($this->errors !== false) { $APPLICATION->ThrowException(implode("<br>", $this->errors)); return false; } return true; }
public static function BringOnline() { $rsOfflineNodes = CClusterDBNode::GetList(array(), array("=STATUS" => "OFFLINE"), array("ID")); if ($arNode = $rsOfflineNodes->Fetch()) { ob_start(); $nodeDB = CDatabase::GetDBNodeConnection($arNode["ID"], true, false); ob_end_clean(); if (is_object($nodeDB)) { CClusterDBNode::SetOnline($arNode["ID"]); } return "CClusterDBNode::BringOnline();"; } return ""; }
} if ($arSource) { $DB->Query("\n\t\t\t\t\tUPDATE b_cluster_table\n\t\t\t\t\tSET LAST_ID = " . (strlen($arTable["KEY_COLUMN"]) > 0 ? $arSource[$arTable["KEY_COLUMN"]] : $i) . "\n\t\t\t\t\t,REC_COUNT = " . $i . "\n\t\t\t\t\tWHERE ID = '" . $arTable["ID"] . "'\n\t\t\t\t", false, '', array("fixed_connection" => true)); } elseif (strlen($last_id)) { $DB->Query("\n\t\t\t\t\tUPDATE b_cluster_table\n\t\t\t\t\tSET LAST_ID = " . $last_id . "\n\t\t\t\t\t,REC_COUNT = " . $i . "\n\t\t\t\t\tWHERE ID = '" . $arTable["ID"] . "'\n\t\t\t\t", false, '', array("fixed_connection" => true)); } else { $DB->Query("\n\t\t\t\t\tDELETE FROM b_cluster_table\n\t\t\t\t\tWHERE ID = '" . $arTable["ID"] . "'\n\t\t\t\t", false, '', array("fixed_connection" => true)); } } else { if ($to_node_id > 1) { COption::SetOptionString($_REQUEST["module"], "dbnode_id", $to_node_id); } else { COption::SetOptionString($_REQUEST["module"], "dbnode_id", "N"); } COption::SetOptionString($_REQUEST["module"], "dbnode_status", 'ok'); CClusterDBNode::SetOnline($to_node_id); $ob = new CClusterDBNode(); if ($from_node_id > 1) { $ob->Update($from_node_id, array("STATUS" => "READY")); } } } while (is_array($arTable) && time() < $end_time); if (is_array($arTable)) { echo GetMessage('CLUWIZ_TABLE_PROGRESS', array("#table_name#" => $arTable["TABLE_NAME"], "#records#" => $i)); echo "<script>MoveTables(2)</script>"; } else { if ($_REQUEST["status"] == "READY") { echo GetMessage("CLUWIZ_ALL_DONE1"); } else { echo GetMessage("CLUWIZ_ALL_DONE2"); }
$rsData = $cData->GetList(array("ID" => "ASC"), $arFilter); if (!isset($_SESSION["SLAVE_LIST"])) { $_SESSION["SLAVE_LIST"] = array(); } $rsData = new CAdminResult($rsData, $sTableID); $Position = 0; $bNote1Show = false; $bHasMaster = false; while ($arRes = $rsData->Fetch()) { $row =& $lAdmin->AddRow($arRes["ID"], $arRes); if ($arRes["ROLE_ID"] == "MASTER" || $arRes["ROLE_ID"] == "MAIN") { $bHasMaster = true; } $arSlaveStatus = CClusterSlave::GetStatus($arRes["ID"]); if (is_array($arSlaveStatus) && $arRes["STATUS"] == "OFFLINE") { CClusterDBNode::SetOnline($arRes["ID"]); $arRes["STATUS"] = "ONLINE"; } if ($arRes["STATUS"] != "OFFLINE") { $uptime = CClusterDBNode::GetUpTime($arRes["ID"]); } else { $uptime = false; } if ($arRes["ID"] > 1) { $row->AddViewField("ID", '<a href="cluster_slave_edit.php?lang=' . LANGUAGE_ID . '&group_id=' . $arRes["GROUP_ID"] . '&ID=' . $arRes["ID"] . '">' . $arRes["ID"] . '</a>'); } $Seconds_Behind_Master = 0; $Slave_IO_Running = 'Yes'; $bHasSQLError = false; $html = ''; if (is_array($arSlaveStatus)) {
function InstallDB($arParams = array()) { global $DBType, $APPLICATION; $this->errors = false; $node_id = strlen($arParams["DATABASE"]) > 0 ? intval($arParams["DATABASE"]) : false; if ($node_id !== false) { $DB = $GLOBALS["DB"]->GetDBNodeConnection($node_id); } else { $DB = $GLOBALS["DB"]; } // Database tables creation if (!$DB->Query("SELECT 'x' FROM b_search_content WHERE 1=0", true)) { $this->errors = $DB->RunSQLBatch($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/search/install/db/" . strtolower($DB->type) . "/install.sql"); if ($this->errors === false && strtolower($DB->type) == "mssql") { $rs = $DB->Query("\n\t\t\t\t\tselect c.*\n\t\t\t\t\tfrom sys.tables t\n\t\t\t\t\tinner join sys.columns c on t.object_id = c.object_id\n\t\t\t\t\twhere t.name='b_search_tags'\n\t\t\t\t\tand c.name='NAME'\n\t\t\t\t"); if ($ar = $rs->Fetch()) { if (strpos($ar["collation_name"], "_CI_") !== false) { $new_collation = str_replace("_CI_", "_CS_", $ar["collation_name"]); $rs = $DB->Query("DROP TABLE b_search_tags"); if ($rs) { $rs = $DB->Query("\n\t\t\t\t\t\t\t\tCREATE TABLE b_search_tags\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\tSEARCH_CONTENT_ID INT NOT NULL,\n\t\t\t\t\t\t\t\t\tSITE_ID CHAR(2) NOT NULL,\n\t\t\t\t\t\t\t\t\tNAME VARCHAR(255) COLLATE " . $new_collation . " NOT NULL,\n\t\t\t\t\t\t\t\t\tCONSTRAINT PK_B_SEARCH_TAGS PRIMARY KEY (SEARCH_CONTENT_ID, SITE_ID, NAME)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t"); } if (!$rs) { $this->errors = array($DB->db_Error); } } } } } if ($this->errors === false && !$DB->Query("SELECT 'x' FROM b_search_phrase WHERE 1=0", true)) { $this->errors = $DB->RunSQLBatch($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/search/install/db/" . strtolower($DB->type) . "/stat_install.sql"); } if ($this->errors !== false) { $APPLICATION->ThrowException(implode("<br>", $this->errors)); return false; } else { RegisterModule("search"); CModule::IncludeModule("search"); RegisterModuleDependences("main", "OnChangePermissions", "search", "CSearch", "OnChangeFilePermissions"); RegisterModuleDependences("main", "OnChangeFile", "search", "CSearch", "OnChangeFile"); RegisterModuleDependences("main", "OnGroupDelete", "search", "CSearch", "OnGroupDelete"); RegisterModuleDependences("main", "OnLangDelete", "search", "CSearch", "OnLangDelete"); RegisterModuleDependences("main", "OnAfterUserUpdate", "search", "CSearchUser", "OnAfterUserUpdate"); RegisterModuleDependences("main", "OnUserDelete", "search", "CSearchUser", "DeleteByUserID"); RegisterModuleDependences("cluster", "OnGetTableList", "search", "search", "OnGetTableList"); RegisterModuleDependences("perfmon", "OnGetTableSchema", "search", "search", "OnGetTableSchema"); if ($node_id !== false) { COption::SetOptionString("search", "dbnode_id", $node_id); if (CModule::IncludeModule('cluster')) { CClusterDBNode::SetOnline($node_id); } } else { COption::SetOptionString("search", "dbnode_id", "N"); } COption::SetOptionString("search", "dbnode_status", "ok"); CAgent::AddAgent("CSearchSuggest::CleanUpAgent();", "search", "N", 86400, "", "Y", "", 10); CAgent::AddAgent("CSearchStatistic::CleanUpAgent();", "search", "N", 86400, "", "Y", "", 10); CSearchStatistic::SetActive(COption::GetOptionString("search", "stat_phrase") == "Y"); return true; } }