Объединение select c разных серверов - MySQL

Узнай цену своей работы

Формулировка задачи:

Добрый день. Есть задача: с достаточно большого количества(порядка 120) серверов, необходимо сделать некий select sum и баз данных mysql и затем просуммировать полученные результаты. Пока, что я честно говоря немного приуныл, потому что ни на шаг не придвинулся к решению. Самый первый вариант был powershell мне в помощь. Подскажите, возможно ли это вообще, и если да то натолкните на решение?

Решение задачи: «Объединение select c разных серверов»

textual
Листинг программы
Function Run-MySQLQuery {
    Param(
        [Parameter(
            Mandatory = $true,
            ParameterSetName = '',
            ValueFromPipeline = $true)]
            [string]$query,
        [Parameter(
            Mandatory = $true,
            ParameterSetName = '',
            ValueFromPipeline = $true)]
            [string]$connectionString
        )
    Begin {
        Write-Verbose "Starting Begin Section"
    }
    Process {
        Write-Verbose "Starting Process Section"
        try {
            # Создаем коннект к базе
            Write-Verbose "Create Database Connection"
            # Можно так же использовать прямое обращение к dll 
#$mySQLDataDLL="C:\scripts\mysql\MySQL.Data.dll" 
    
#[void][system.reflection.Assembly]::LoadFrom($mySQLDataDLL)
            [void][System.Reflection.Assembly]::LoadWithPartialName("MySql.Data")
            $connection = New-Object MySql.Data.MySqlClient.MySqlConnection
            $connection.ConnectionString = $ConnectionString
            Write-Verbose "Open Database Connection"
            $connection.Open()
 
            #  Выполнение SQL запросов
            Write-Verbose "Run MySQL Querys"
            $command = New-Object MySql.Data.MySqlClient.MySqlCommand($query, $connection)
            $dataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($command)
            $dataSet = New-Object System.Data.DataSet
            $recordCount = $dataAdapter.Fill($dataSet, "data")
            $dataSet.Tables["data"] | Format-Table -HideTableHeaders
        }
        catch {
            Write-Host "Could not run MySQL Query" $Error[0]
        }
        Finally {
            Write-Verbose "Close Connection"
            $connection.Close()
        }
    }
    End {
        Write-Verbose "Starting End Section"
    }
}
 
 
 
 
$poss = "localhost1",  "localhost2",
 
 
ForEach ($pos in $poss)
{
$SrcServer = "Server=$pos;Uid=root;Pwd=pass;database=test;CharSet=utf8"
$SQLQuery = "SELECT *;
"
$res = run-MySQLQuery -ConnectionString $SrcServer -Query $SQLQuery | Out-String
 
$DestServer = "Server=localhost;Uid=root;Pwd=pass;database=report;CharSet=utf8"
$SQLInsert = "INSERT INTO report.test (name, amount) values ('$pos', '$res')" 
 
run-MySQLQuery -ConnectionString $DestServer -Query $SQLInsert
}

Объяснение кода листинга программы

  1. Функция Run-MySQLQuery принимает два параметра: $query и $connectionString.
  2. В блоке Begin выводится сообщение о начале выполнения функции.
  3. В блоке Process выполняется SQL запрос, переданный в качестве параметра $query, с использованием подключения к базе данных, указанного в параметре $connectionString.
  4. Запросы выполняются с помощью объектов MySql.Data.MySqlClient.MySqlCommand, MySql.Data.MySqlClient.MySqlDataAdapter и System.Data.DataSet.
  5. Результаты запроса выводятся с помощью Format-Table -HideTableHeaders.
  6. В блоке catch выводится сообщение об ошибке, если запрос не удалось выполнить.
  7. В блоке Finally закрывается подключение к базе данных.
  8. Функция Main создает массив серверов для тестирования в переменной $poss.
  9. Для каждого сервера в массиве выполняется запрос с помощью функции Run-MySQLQuery.
  10. Результаты запроса сохраняются в переменную $res.
  11. Затем выполняется запрос на вставку данных в таблицу report.test с использованием переменных $SrcServer и $res.
  12. Запрос на вставку данных выполняется с помощью функции Run-MySQLQuery.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.692 из 5