1

これは、「実行」ウィンドウから実行すると、正しく機能します。

cmd.exe /K mysqldump --add-drop-database --add-drop-table --user=root --password=thepassword --databases theDatabase > C:\Backup\theBackup.sql

ただし、外部プロセスを呼び出してWebアプリケーションから実行しようとすると、同じコマンドが失敗します。

コードは次のとおりです。

ProcessStartInfo processInfo = new ProcessStartInfo("cmd.exe", @"/K mysqldump --add-drop-database --add-drop-table --user=root --password=thepassword --databases theDatabase > C:\Backup\theBackup" + ".sql");

Process p = Process.Start(processInfo);

これは私が得るものです...

代替テキストhttp://img40.imageshack.us/img40/8121/mysqldumperror.gif

興味深いことに、ファイル(theBackup.sql)は作成されますが、空です。

これは環境のPATH変数の問題ではありません。mysqldumpを含むMySqlbinディレクトリパスが環境PATH変数に追加されます。これを確認するには、コマンドプロンプトを開き、上のスクリーンショットに記載されているパスに移動し、mysqldumpコマンドを手動で入力すると、コマンドが認識されます...以下に示すように...

代替テキストhttp://img40.imageshack.us/img40/6879/mysqldumppathproper.gif

次のコードが機能するため、問題はmysqldump固有です。

ProcessStartInfo processInfo = new ProcessStartInfo("cmd.exe", "/K ping stackoverflow.com");

ここで何が問題になっていますか?

4

2 に答える 2

3

私の推測では、$PATH 変数は、ASP.NET が実行されている環境 (そのユーザーの場合、または ASP.NET が環境を消去する場合) に MySQL へのパスを含めるように定義されていません。

試してみる 2 つのこと:

  1. (動作する可能性があります) mysql ディレクトリが、ユーザー固有の PATH 変数だけでなく、グローバルパスに追加されていることを確認してください。(注: これには、少なくとも IIS のリサイクルが必要です。有効にするには再起動が必要になる場合があります)
  2. mysqldump への完全修飾パスを使用します (パス内のスペースを引用またはエスケープする必要があります)。
于 2009-05-16T17:25:44.500 に答える
0

mysqldump の例

Private sw As IO.StreamWriter

Public Sub ExecuteBackup()
    Try

        Dim mysqlDump As New Process
        mysqlDump.StartInfo.FileName = "PahtToMysqlDump\mysqldump.exe"
        mysqlDump.StartInfo.Arguments = "--user=myuser --password=mypassword --routines --all-databases"
        mysqlDump.StartInfo.RedirectStandardOutput = True
        mysqlDump.StartInfo.CreateNoWindow = True
        mysqlDump.StartInfo.UseShellExecute = False

        Console.WriteLine("Arguments:")
        Console.WriteLine("mysqldump.exe " & mysqlDump.StartInfo.Arguments)

        sw = New IO.StreamWriter("backup.sql")

        AddHandler mysqlDump.OutputDataReceived, AddressOf mysqlDumpNewData

        mysqlDump.Start()
        mysqlDump.BeginOutputReadLine()
        mysqlDump.WaitForExit()

        sw.Close()

        Console.WriteLine("Backup completed")

    Catch ex As Exception   
        Console.WriteLine("BackupEngine.ExecuteBackup.", ex)        
    End Try
End Sub

Private Sub mysqlDumpNewData(sender As Object, e As DataReceivedEventArgs)

    Dim line = e.Data
    If line IsNot Nothing Then
        sw.WriteLine(line)
        If line.StartsWith("USE") Then
            Dim ln = line.Split("`")(1)
            Console.WriteLine("Database : " & ln.ToUpper)
        End If
        If line.StartsWith("CREATE TABLE") Then
            Dim ln = line.Split("`")(1)
            Console.WriteLine(" Table : " & ln.ToUpper)
        End If
    End If

End Sub
于 2013-09-07T21:47:09.970 に答える