Поддержка серверов

CClusterSlave::SetOnLine: метод Битрикс

Постоянная ссылка: http://bxapi.ru/src/?id=165135

<?php 
//    /bitrix/modules/cluster/classes/mysql/slave.phpCClusterSlave::SetOnLine()
//    6:

    
public static 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_idtrue);
                
$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("
                        CHANGE MASTER TO
                            MASTER_HOST = '"
.$DB->ForSQL($arNode["MASTER_HOST"])."'
                            ,MASTER_USER = '"
.$DB->ForSQL($masterDB->DBLogin)."'
                            ,MASTER_PASSWORD = '"
.$DB->ForSQL($masterDB->DBPassword)."'
                            ,MASTER_PORT = "
.$DB->ForSQL($arNode["MASTER_PORT"])."
                            ,MASTER_LOG_FILE = '"
.$arMasterStatus["File"]."'
                            ,MASTER_LOG_POS = "
.$arMasterStatus["Position"]."
                    "
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("
                            CHANGE MASTER TO
                                MASTER_HOST = '"
.$DB->ForSQL($arNode["MASTER_HOST"])."'
                                ,MASTER_USER = '"
.$DB->ForSQL($DB->DBLogin)."'
                                ,MASTER_PASSWORD = '"
.$DB->ForSQL($DB->DBPassword)."'
                                ,MASTER_PORT = "
.$DB->ForSQL($arNode["MASTER_PORT"])."
                                ,MASTER_LOG_FILE = '"
.$arMasterStatus["File"]."'
                                ,MASTER_LOG_POS = "
.$arMasterStatus["Position"]."
                        "
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("
                                    CHANGE MASTER TO
                                        MASTER_HOST = '"
.$DB->ForSQL($match[1])."'
                                        ,MASTER_USER = '"
.$DB->ForSQL($arNode["DB_LOGIN"])."'
                                        ,MASTER_PASSWORD = '"
.$DB->ForSQL($arNode["DB_PASSWORD"])."'
                                        ,MASTER_PORT = "
.$DB->ForSQL($match[2])."
                                        ,MASTER_LOG_FILE = '"
.$arMasterStatus["File"]."'
                                        ,MASTER_LOG_POS = "
.$arMasterStatus["Position"]."
                                "
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);
                            }
                        }
                    }
                }
            }
        }
    }

Блог разработчика

9 Августа 2016 ResizeImageGet и простой водяной знак налету

Сегодня поговорим о том как проще всего воткнуть водяной знак на картинки в Битрикс. Например, на все изображения каталога.

21 Июля 2016 Добавление вкладки в CRM коробки Битрикс24

В этом посте я покажу, как легко и просто добавить вкладку в сущность CRM. И не просто добавить, а вывести там свой контент.

21 Июля 2016 Как просто обращаться из коробки Битрикс24 на сайт на базе Битрикс

К примеру вам хочется внутренним скриптом дернуть с сайта-магазина информацию, которая там, в свою очередь, закрыта некоторыми правами. Например, админскими. Можно конечно мутить свой REST, или иной формат общения, но проще всего воспользоваться штатным инструментом:

Текст сообщения*
Загрузить изображение