Вы можете подключиться к базе данных MySQL/MariaDB, получить данные из таблицы, добавить или обновить данные прямо из PowerShell скрипта. В этой статье мы рассмотрим несколько простых способов выполнения SQL запросов к удаленной базе данных MySQL (MariaDB) из консоли PowerShell.
Прежде всего проверьте, что удаленный SQL сервер разрешает удаленный подключения по порту 3306 (по умолчанию):
Test-NetConnection mysqlDBserver -port 3306
Затем на сервере MySQL разрешите пользователю удаленные подключения с вашего IP адреса или с любого хоста (замените IP на %):
GRANT ALL ON myDB.* to 'dbadmin'@'192.168.15.23' IDENTIFIED BY 'password1!' WITH GRANT OPTION;
FLUSH PRIVILEGES;
PowerShell модуль SimplySql для подключения к БД MariaDB и MySQL
Для подключения и выполнения запросов к MySQL/MariaDB базе можно использовать универсальный PowerShell модуль SimplySql. Этот модуль можно установить из PowerShell Online Gallery:
Install-Module -Name SimplySql
Для подключения к MariDB/MySQL серверу используется командлет Open-MySQLConnection, а для выполнения SQL запросов — Invoke-SQLQuery.
Сохранить имя пользователя и пароль для подключения к SQL серверу:
$DBUser = "dbadmin"
$DBPassword = ConvertTo-SecureString -String "password1!" -AsPlainText -Force
$creds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $DBUser, $DBPassword
Подключиться к базе данных MySQL/MariaDB на удаленном сервере:
$sqlConnect = Open-MySqlConnection -ConnectionName MyDBCon -Server 192.168.158.129 -Database myDB -Port 3306 -Credential $creds -WarningAction SilentlyContinue
Выполнить запрос к таблице MySQL с параметром:
$cityname="MSK"
$data = Invoke-SqlQuery -query "SELECT * FROM myDB WHERE city like '%$cityname%'"
Вставить данные в таблицу:
Invoke-SqlQuery -query "INSERT INTO myDB (name,phone,id,city,email) VALUES ('Dmitriy','1-23456789',233, 'SPB','[email protected]')"
Обновить значение поля в таблице MySQL:
Invoke-SqlQuery -query "UPDATE myDB SET city = 'MSK' WHERE ID = 233"
Закрыть подключение к базе данных:
Close-SqlConnection -connectionname MyDBCon
Выполнение SQL запросов из PowerShell через MySQL коннектор
Для подключения к серверу MySQL/MariaDB базе данных можно использовать официальный MySQL .NET Connector, который доступен для свободной загрузки с сайта MySQL. Скачайте и установите последнюю версию коннектора (https://dev.mysql.com/downloads/connector/net/)
В следующем примере мы рассмотрим PowerShell скрипт, который получает список пользователей и email адресов из AD (список пользователей AD формируется с помощью командлета Get-ADUser) и записывает их в базу данных MySQL.
#подключение библиотеки MySql.Data.dll
[void][system.reflection.Assembly]::LoadFrom("C:\Program Files (x86)\MySQL\MySQL Connector NET 8.3.0\MySql.Data.dll")
$mysql_server = "192.168.158.129"
$mysql_user = "dbadmin"
$mysql_password = "password1!"
$dbName = "myDB"
$Connection = New-Object -TypeName MySql.Data.MySqlClient.MySqlConnection
$Connection.ConnectionString = "SERVER=$mysql_server;DATABASE=$dbName;UID=$mysql_user;PWD=$mysql_password"
$Connection.Open()
$sql = New-Object MySql.Data.MySqlClient.MySqlCommand
$sql.Connection = $Connection
#формируем список пользователей с именами и email адресами
Import-Module activedirectory
$UserList=Get-ADUser -SearchBase ‘OU=Users,OU=London,DC=contoso,DC=ru’ -filter * -properties name, EmailAddress
ForEach($user in $UserList)
{
$uname=$user.Name;
$uemail=$user.EmailAddress;
#записываем информацию о каждом пользователе в табдицу БД
$sql.CommandText = "INSERT INTO users (Name,Email) VALUES ('$uname','$uemail')"
$sql.ExecuteNonQuery()
}
$Reader.Close()
$Connection.Close()
Следующий скрипт с помощью SELECT запроса получит данные из таблицы БД и покажет их в консоли PowerShell.
Set-ExecutionPolicy RemoteSigned
[void][system.reflection.Assembly]::LoadFrom("C:\Program Files (x86)\MySQL\MySQL Connector NET 8.3.0\MySql.Data.dll")
$mysql_server = "192.168.158.129"
$mysql_user = "dbadmin"
$mysql_password = "password1!"
$dbName = "myDB"
$Connection = New-Object -TypeName MySql.Data.MySqlClient.MySqlConnection
$Connection.ConnectionString = "SERVER=$mysql_server;DATABASE=$dbName;UID=$mysql_user;PWD=$mysql_password"
$Connection.Open()
$MYSQLCommand = New-Object MySql.Data.MySqlClient.MySqlCommand
$MYSQLDataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter
$MYSQLDataSet = New-Object System.Data.DataSet
$MYSQLCommand.Connection=$Connection
$MYSQLCommand.CommandText='SELECT * from users'
$MYSQLDataAdapter.SelectCommand=$MYSQLCommand
$NumberOfDataSets=$MYSQLDataAdapter.Fill($MYSQLDataSet, "data")
foreach($DataSet in $MYSQLDataSet.tables[0])
{
write-host "User:" $DataSet.name "Email:" $DataSet.email
}
$Connection.Close()
Доброго дня!
Из исходных данных:
MySQL Connector Net 8.0.15
Win 10 1809
Версия сервера MySQL: 5.7.23-0ubuntu0.16.04.1 — (Ubuntu)
$PSVersionTable.PSVersion: Major 5, Build 17763, Revision 134
При выполнении $Connection.Open() выдается ошибка:
Исключение при вызове «Open» с «0» аргументами: «Unable to connect to any of the specified MySQL hosts.»
Подозреваю, что проблемы с разрешением подключений из вне, но не совсем понимаю куда конкретно копать. Создал отдельного пользователя для базы, сначала пробовал под root, но это не помогло. MySQL и клиентский компьютер в одной локальной сети.
В какую сторону смотреть, подскажите, плиз!
Добрый день.
По умолчанию mysql принимает только локальные подключения (с того же хоста). Чтобы разрешить удаленный коннект к базе db для пользователя web с IP адреса 10.0.0.22, выполните в консоли mysql следующие команды:
mysql> update db set Host=’10.0.0.22′ where Db=’db’;
mysql> update user set Host=’10.0.0.22′ where user=’web’;
Ну и возможно включен файервол на стороне сервера или клиента. Нужно разрешить удаленное подключение на порт 3306 (по умолчанию)
Win 10 Pro 1809
MySQL Connector/NET 8.0.17
Исключение при вызове «Open» с «0» аргументами: «Не удалось загрузить файл или сборку «Renci.SshNet, Version=2
016.1.0.0, Culture=neutral, PublicKeyToken=1cee9f8bde3db106″ либо одну из их зависимостей. Не удается найти указанный файл.»
Есть такая проблема с MySLQ Connector/NET v8.0.17. Попробуйте скачать предыдущую версию — v8.0.16. В ней все работает (на сайте включите фильтр «Other Releases»).
решение — загрузить сборку renci
Add-Type -Path «C:\Program Files (x86)\MySQL\MySQL Connector Net 8.0.17\Assemblies\v4.5.2\MySQL.Data.dll»
Add-Type -Path ‘C:\Program Files (x86)\MySQL\MySQL Connector Net 8.0.17\Assemblies\v4.5.2\Renci.SshNet.dll’
такая же проблема. как решить?
Если кто-то столкнулся с проблемой
«Исключение при вызове «Open» с «0» аргументами: «Unable to connect to any of the specified MySQL hosts.»»
То советую попробовать прописать коннект иначе:
Server=myServerAddress; Port=1234; Database=myDataBase; Uid=myUsername; Pwd=myPassword;
Честно
стыреноподсмотрено здесь: