Restore e Backup Mysql Delphi
Olá pessoal!
Estou com um problema aqui o qual não consigo resolver.
Estou executado uma rotina para realizar a Restauração de bases de dados do MySQL, com a seguinte rotina:
//Essa rotina e o modelo para Restore
aux := 'cmd.exe /c " '+MeuDiretorio+'mysql -u root ';
aux := aux + 'basededados < ' + arquivo + '"';
if not createProcessSimple(aux) then
ShowMessage('RESTAURAÇÃO NÃO FOI PROCESSADA!')
else
begin
ShowMessage('Restauração Realizada!');
ShowMessage('SAIA DO SISTEMA E ENTRE NOVAMENTE');
btnRestaurar.Caption := 'Restaurar';
end;
function TfrmConfBd.CreateProcessSimple(cmd: string):boolean;
var SUInfo: TStartupInfo;
ProcInfo: TProcessInformation;
begin
FillChar(SUInfo, SizeOf(SUInfo), #0);
SUInfo.cb := SizeOf(SUInfo);
SUInfo.dwFlags := STARTF_USESHOWWINDOW;
SUInfo.wShowWindow := SW_HIDE;
result := CreateProcess(nil, PChar(cmd), nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, SUInfo, ProcInfo);
if result then
begin
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
end;
Na variável meu diretório eu estava pegando o diretório padrão do sistema(executável), onde coloquei o Mysqldump e o Mysql.
Agora quero ao invés de executar o Mysqldump e o Mysql de dentro da raiz do meu executável, executar de dentro da pasta BIN do mysql, porem, não funciona. Pego o diretório certinho da pasta BIN, mas ao rodar a rotina os Restores não são feitos e os Backups ficam vazios.
Estou com um problema aqui o qual não consigo resolver.
Estou executado uma rotina para realizar a Restauração de bases de dados do MySQL, com a seguinte rotina:
//Essa rotina e o modelo para Restore
aux := 'cmd.exe /c " '+MeuDiretorio+'mysql -u root ';
aux := aux + 'basededados < ' + arquivo + '"';
if not createProcessSimple(aux) then
ShowMessage('RESTAURAÇÃO NÃO FOI PROCESSADA!')
else
begin
ShowMessage('Restauração Realizada!');
ShowMessage('SAIA DO SISTEMA E ENTRE NOVAMENTE');
btnRestaurar.Caption := 'Restaurar';
end;
function TfrmConfBd.CreateProcessSimple(cmd: string):boolean;
var SUInfo: TStartupInfo;
ProcInfo: TProcessInformation;
begin
FillChar(SUInfo, SizeOf(SUInfo), #0);
SUInfo.cb := SizeOf(SUInfo);
SUInfo.dwFlags := STARTF_USESHOWWINDOW;
SUInfo.wShowWindow := SW_HIDE;
result := CreateProcess(nil, PChar(cmd), nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, SUInfo, ProcInfo);
if result then
begin
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
end;
Na variável meu diretório eu estava pegando o diretório padrão do sistema(executável), onde coloquei o Mysqldump e o Mysql.
Agora quero ao invés de executar o Mysqldump e o Mysql de dentro da raiz do meu executável, executar de dentro da pasta BIN do mysql, porem, não funciona. Pego o diretório certinho da pasta BIN, mas ao rodar a rotina os Restores não são feitos e os Backups ficam vazios.
Fábio Ribeiro
Curtidas 0
Respostas
Dorivan Sousa
02/07/2015
olha o conteudo que ta ficando na variavel MeuDiretorio
se nao precisa por aspas... no dos pra executar comandos de diretorios com espaço entre os nomes tem que colocar "C:\Arquivos de Programas\Progra.exe"
se nao precisa por aspas... no dos pra executar comandos de diretorios com espaço entre os nomes tem que colocar "C:\Arquivos de Programas\Progra.exe"
GOSTEI 0
Fábio Ribeiro
02/07/2015
Estão indo com aspas sim!
Estão indo com aspas duplas sim!
O mesmo comando usando o Mysqldump e Mysql de dentro da pasta do executavel funciona, porem, utilizando da raiz BIN do Mysql não.
olha o conteudo que ta ficando na variavel MeuDiretorio
se nao precisa por aspas... no dos pra executar comandos de diretorios com espaço entre os nomes tem que colocar "C:\Arquivos de Programas\Progra.exe"
se nao precisa por aspas... no dos pra executar comandos de diretorios com espaço entre os nomes tem que colocar "C:\Arquivos de Programas\Progra.exe"
Estão indo com aspas duplas sim!
O mesmo comando usando o Mysqldump e Mysql de dentro da pasta do executavel funciona, porem, utilizando da raiz BIN do Mysql não.
GOSTEI 0
Dorivan Sousa
02/07/2015
qual windows vc ta usando? qual o caminho da pasta BIN? nao seria permissao de acesso a essa pasta?
GOSTEI 0
Fábio Ribeiro
02/07/2015
qual windows vc ta usando? qual o caminho da pasta BIN? nao seria permissao de acesso a essa pasta?
Uso Windows 8. Suspeitei disso também, mas, mesmo dando permissão total a Todos na pasta, não vai.
GOSTEI 0
Dorivan Sousa
02/07/2015
pra ter certeza tente "runas"
/usuario é o parametro depois dos dois pontos vc coloca o nome do seu usuario adminstrador e ele vai pedir a senha
posta ai o caminho do mysql completo.
runas /usuario:Dorivan notepad.exe
/usuario é o parametro depois dos dois pontos vc coloca o nome do seu usuario adminstrador e ele vai pedir a senha
posta ai o caminho do mysql completo.
GOSTEI 0
Fábio Ribeiro
02/07/2015
Não sei como nem o porque, mas consegui resolver o problema de uma forma misteriosa, assim:
o diretorio deveria ter aspas duplas abrindo e fechando. obs: Meu diretório continha exemplo do Restore:
"C:\pararararararar"
Porem fazendo alguns testes, a rotina de restore funcionou colocando somente da seguinte forma:
""C:\pararararararar" (duas aspas duplas abrindo)
Para Backup funciona normalmente com "C:\pararararararar"
o comando todo ficou assim:
cmd.exe /c ""C:\parararar\mysql" -u usuario -psenha database < teste.sql
o diretorio deveria ter aspas duplas abrindo e fechando. obs: Meu diretório continha exemplo do Restore:
"C:\pararararararar"
Porem fazendo alguns testes, a rotina de restore funcionou colocando somente da seguinte forma:
""C:\pararararararar" (duas aspas duplas abrindo)
Para Backup funciona normalmente com "C:\pararararararar"
o comando todo ficou assim:
cmd.exe /c ""C:\parararar\mysql" -u usuario -psenha database < teste.sql
GOSTEI 0