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

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

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

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

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

textual
Листинг программы
  1. Function Run-MySQLQuery {
  2.     Param(
  3.         [Parameter(
  4.             Mandatory = $true,
  5.             ParameterSetName = '',
  6.             ValueFromPipeline = $true)]
  7.             [string]$query,
  8.         [Parameter(
  9.             Mandatory = $true,
  10.             ParameterSetName = '',
  11.             ValueFromPipeline = $true)]
  12.             [string]$connectionString
  13.         )
  14.     Begin {
  15.         Write-Verbose "Starting Begin Section"
  16.     }
  17.     Process {
  18.         Write-Verbose "Starting Process Section"
  19.         try {
  20.             # Создаем коннект к базе
  21.             Write-Verbose "Create Database Connection"
  22.             # Можно так же использовать прямое обращение к dll
  23. #$mySQLDataDLL="C:\scripts\mysql\MySQL.Data.dll"
  24.    
  25. #[void][system.reflection.Assembly]::LoadFrom($mySQLDataDLL)
  26.             [void][System.Reflection.Assembly]::LoadWithPartialName("MySql.Data")
  27.             $connection = New-Object MySql.Data.MySqlClient.MySqlConnection
  28.             $connection.ConnectionString = $ConnectionString
  29.             Write-Verbose "Open Database Connection"
  30.             $connection.Open()
  31.  
  32.             #  Выполнение SQL запросов
  33.             Write-Verbose "Run MySQL Querys"
  34.             $command = New-Object MySql.Data.MySqlClient.MySqlCommand($query, $connection)
  35.             $dataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($command)
  36.             $dataSet = New-Object System.Data.DataSet
  37.             $recordCount = $dataAdapter.Fill($dataSet, "data")
  38.             $dataSet.Tables["data"] | Format-Table -HideTableHeaders
  39.         }
  40.         catch {
  41.             Write-Host "Could not run MySQL Query" $Error[0]
  42.         }
  43.         Finally {
  44.             Write-Verbose "Close Connection"
  45.             $connection.Close()
  46.         }
  47.     }
  48.     End {
  49.         Write-Verbose "Starting End Section"
  50.     }
  51. }
  52.  
  53.  
  54.  
  55.  
  56. $poss = "localhost1",  "localhost2",
  57.  
  58.  
  59. ForEach ($pos in $poss)
  60. {
  61. $SrcServer = "Server=$pos;Uid=root;Pwd=pass;database=test;CharSet=utf8"
  62. $SQLQuery = "SELECT *;
  63. "
  64. $res = run-MySQLQuery -ConnectionString $SrcServer -Query $SQLQuery | Out-String
  65.  
  66. $DestServer = "Server=localhost;Uid=root;Pwd=pass;database=report;CharSet=utf8"
  67. $SQLInsert = "INSERT INTO report.test (name, amount) values ('$pos', '$res')"
  68.  
  69. run-MySQLQuery -ConnectionString $DestServer -Query $SQLInsert
  70. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут