Запустите сценарий SQL для MySQL с помощью Powershell - PullRequest
3 голосов
/ 13 января 2011

У меня есть скрипт Powershell, который каждую ночь выполняет резервное копирование баз данных MySQL с помощью mysqldump. Все это прекрасно работает, но я хотел бы расширить скрипт для обновления базы данных отчетов (db1) из резервной копии базы данных prod (db2). Я написал следующий тестовый скрипт, но он не работает. У меня есть ощущение, что проблема заключается в чтении файла sql в CommandText, но я не уверен, как отлаживать.

[system.reflection.assembly]::LoadWithPartialName("MySql.Data")    
$mysql_server = "localhost"
$mysql_user = "root"
$mysql_password = "password"
write-host "Create coonection to db1"
# Connect to MySQL database 'db1'

$cn = New-Object -TypeName MySql.Data.MySqlClient.MySqlConnection
$cn.ConnectionString = "SERVER=$mysql_server;DATABASE=db1;UID=$mysql_user;PWD=$mysql_password"
$cn.Open()
write-host "Running backup script against db1"
# Run Update Script MySQL 
$cm = New-Object -TypeName MySql.Data.MySqlClient.MySqlCommand
$sql = Get-Content C:\db2.sql
$cm.Connection = $cn
$cm.CommandText = $sql
$cm.ExecuteReader()
write-host "Closing Connection"
$cn.Close()

Любая помощь будет принята с благодарностью. Спасибо.

1 Ответ

3 голосов
/ 13 января 2011

Эта строка:

$sql = Get-Content C:\db2.sql 

Возвращает массив строк. Когда это назначается чему-либо, ожидающему строку, PowerShell объединяет массив строк в одну строку, используя содержимое переменной $OFS (разделитель выходных полей). Если эта переменная не установлена, разделителем по умолчанию является один пробел. Попробуйте вместо этого и посмотрите, работает ли он:

$sql = Get-Content C:\db2.sql 
...
$OFS = "`r`n"
$cm.CommandText = "$sql"

Или, если вы используете PowerShell 2.0:

$sql = (Get-Content C:\db2.sql) -join "`r`n"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...