2011-08-12 5 views
2

C#으로 mysql.exe와 mysql을 덤프 파일을 복원 할 수 없습니다 :이 성공적으로 내가 MySQL 데이터베이스 덤프 파일 (UTF8)를 만든

ProcessStartInfo psi = new ProcessStartInfo(); 
psi.FileName = Application.StartupPath + "\\mysqldump.exe"; 
psi.RedirectStandardInput = false; 
psi.RedirectStandardOutput = true; 
psi.Arguments = "-r D:\\backup.sql --user=root --password=1234 --opt databasename"; 
psi.UseShellExecute = false; 

Process process = Process.Start(psi); 
process.WaitForExit(); 
process.Close(); 

을 내가 사용하여 성공적으로 데이터베이스에 UTF8 덤프 파일을 복원 할 수 있어요 이 한 줄 명령을 사용하여 windows CMD :

mysql.exe -u root --password=1234 databasename < d:\backup.sql 

그러나 나는 C#에서 명령을 실행하지 못했습니다. 너 어디가 잘못 됐는지 조언 해 줄 수 있니? 대단히 고마워. 아래는 내 명령입니다.

ProcessStartInfo psi = new ProcessStartInfo(); 
psi.FileName = Application.StartupPath + "\\mysql.exe"; 
psi.RedirectStandardInput = false; 
psi.RedirectStandardOutput = false; 
psi.Arguments = "--user=root --password=1234 databasename < D:\\backup.sql"; 
psi.UseShellExecute = true; 

Process process = Process.Start(psi); 
process.WaitForExit(); 
process.Close(); 
+1

* (!) 참고가 : * 당신은 (['Path.Combine'] 사용할 HTTP : //msdn.microsoft.com/en-us/library/fyy7a5kt.aspx)를 사용하여 경로에 가입하십시오. – Bobby

+0

잘 모르겠습니다 만, 프로세스를 시작할 때 파이프와 출력 방향 전환을 사용할 수 없다고 생각합니다. 내가 아는 한 그것들은 명령 프롬프트의 기능입니다. – Bobby

+1

-u --password .....와 같이 설정하면 안됩니다. http://www.dotnetspider.com/resources/19537-MySQL-Database-Backup-Restore-from-C -NET.aspx – V4Vendetta

답변

1

그것이 도움이 될 수 있습니다 복원 할 수 있습니다.

여기를 참조하십시오

Piping in a file on the command-line using System.Diagnostics.Process

당신이 자신의 덤프 파일을 통과해야합니다 ...

+1

주의해야 할 두 가지 사항은 입력 스트림에 쓰 기 전에 프로세스를 시작()해야합니다. 그렇지 않으면 입력이 '리디렉션되지 않았습니다'라는 오류가 발생합니다. 둘째, Close() 또는 using 블록을 사용하여 입력 스트림을 닫아야합니다. 그렇지 않으면 더 많은 입력을 기다리는 중 끊어 질 수 있습니다. – Despertar

0

C# exe가 MySQL이 설치된 디렉토리와 동일한 디렉토리에서 실행되고 있습니까? c :에서 명령 줄에서 실행중인 경우 FileName은 C : \ mysqldump.exe입니다. 나는 그곳에 누워있는 것이 의심 스럽다. mysqldump.exe가 경로에 있다면 Application.StartupPath 또는 다른 경로를 추가 할 필요가 없을 것입니다 ...

+1

예, 내 앱 exe는 MySQL이 설치된 디렉토리와 다릅니다. mysql.exe 및 mysqldump.exe의 원래 위치는 C : \ Program Files \ MySQL \ MySQL 서버 5.1 \ bin에 있습니다. 내 exe 파일 (mysql.exe 및 mysqldump.exe)을 내 app 디렉토리에 복사했습니다. mysqldump.exe는 내 app 디렉토리에서 성공적으로 작동한다. mysql.exe의 경우 아직 연구 중이며 작동하도록 만드는 방법을 찾는 것입니다. – mjb

0

복원시 데이터베이스 이름을 생략 할 수 있습니다. DB 이름을 가진 덤프 파일을 만들었으므로 필요하지 않으며 제공된 데이터베이스 이름을 좋아하지 않을 수도 있습니다. 명령 줄에서 실행되었으므로 그럴 수는 없지만 구문은 내가 보았습니다 psi.Arguments = "--user = root --password = 1234 < D : \ backup.sql"; 데이터베이스가 이미 당신이 그것을 복원 할했다 존재하는 경우에는 mysqlimport -u [UNAME] -p [DBNAME] [backupfile.sql]

나는 또한 당신이 사용하는 눈치 [패스]를

, 당신은 을 사용해야 할 수도 있습니다 psi.RedirectStandardOutput = false; 백업에서 실제로 있었던 복원에서. 출력을 사용하지 않으므로 둘 다 false 일 수 있습니다.

그 모든 실패하면 당신은 당신이에 점점 오류를 포함 할 경우 그 인해 인수의 파이프에

관련 문제