Пример #1
0
 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);
                         }
                     }
                 }
             }
         }
     }
 }
Пример #2
0
 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;
 }
Пример #3
0
 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 "";
 }
Пример #4
0
         }
         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");
     }
Пример #5
0
$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)) {
Пример #6
0
 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;
     }
 }