2016-03-18 9 views
0

PowerShellを使用して、Windows 2012サーバーで実行されているMySQLをバックアップするためのスクリプトを作成しています。ここにある他のヒントとは異なり、それぞれのデータベースに.sqlファイルを生成する必要があります。複数のファイルへのMySQLバックアップ用スクリプト

This postは、複数のファイルを作成する方法を示しています。私はそれをPowerShellに適合させました:

Get-ChildItem -Path "$($MYSQL_HOME)\data" | cmd /C "$($MYSQL_HOME)\bin\ mysql -u -s -r $($dbuser) -p$($dbpass) -e 'databases show' '| while read dbname; cmd /C "$($MYSQL_HOME)\bin\mysqldump.exe --user = $($dbuser) --password = $($dbpass) --databases $dbname> $($BKP_FOLDER)\$dbname($BACKUPDATE).sql " 

whileにエラーを返します。

.sqlをデータベースごとに1つずつ生成できるように変更する必要はありますか?

+0

bash/zshスクリプトからmysql部分をコピーしましたか? '| read dbname; 'はWindowsの' cmd.exe'で有効な構文ではありません –

+0

はい、上記のリンクにコピーしました。私が 'while'([こちらを参照](http://ss64.com/ps/while.html))の使用に関する参照を見つけたので、それはうまくいくと思いました。 –

答えて

1

あなたのコマンドライン全体が悪いです。それを投げ捨てて、やり直してください。

Set-Location "$MYSQL_HOME\bin" 
& .\mysql.exe -N -s -r -u $dbuser -p$dbpass -e 'show databases' | % { 
    & .\mysqldump.exe -u $dbuser -p$dbpass --single-transaction $_ | 
    Out-File "$BKP_FOLDER\${_}$BACKUPDATE.sql" -Encoding Ascii 
} 
+0

私は[この投稿](http://stackoverflow.com/questions/9293042/mysqldump-without-the-password-prompt)として、-uと-pの使用を排除しようとしましたが、成功しませんでした。あなたは私に何をお勧めしますか? –

+0

ターゲットを移動しないでください。新規またはフォローアップの質問がある場合:新しい質問を投稿してください。あなたが試したことと、得られた結果を示してください。 –

0

例は、mysqldumpのファイル結果からの入力を使用しています。

#Variables##### 
# Debe especificar la ruta completa, por ejemplo C:\Temp\archivo.txt 
$file = $args[0] 
$c = "" 
$i = 0 
$startSafe = 0; 
############### 

New-Item -ItemType Directory -Force -Path .\data 
$x = 0; 
foreach ($f in [System.IO.File]::ReadLines($file)) { 
    if ($f -like '-- Dumping data for table *') { 
     $startSafe = 1; 
     $x = $f.split('`')[1]; 
     write $x; 
    } 
    if ($startSafe) { 
     if($f -eq "UNLOCK TABLES;"){$i += 1; $f >> .\data\$x.out.sql; $startSafe = 0; $x = $i} 
     if($f -ne "UNLOCK TABLES;"){ $f >> .\data\$x.out.sql;} 
    } 
} 
関連する問題