Este es el codigo de mi respaldo, lo uso tambien para conectarme.
Código Delphi
[-]
procedure TForm_INIT.Init_MySQL_SERVER_READ;
var
Init_MySQL: TIniFile;
begin
HALT_SYSTEM_PROGRAM := False;
PROGRAM_Name := UpperCase(ExtractFileName(Application.ExeName));
PROGRAM_Name := SYSTEM.Copy(PROGRAM_Name, 1, Length(PROGRAM_Name) - 4);
Label_PROGRAM.Caption := 'Programa: ' + UpperCase(PROGRAM_Name);
Exec_PATH_PRG := ExtractFilePath(Application.ExeName);
Exec_PATH_PRG := Copy(Exec_PATH_PRG, 1, Length(Exec_PATH_PRG) - 1);
dbf_PWDWIN := LowerCase(PROGRAM_Name) + '_db.pwdwin';
dbf_PWDDDB := LowerCase(PROGRAM_Name) + '_db.pwdddb';
dbf_PWDTAB := LowerCase(PROGRAM_Name) + '_db.pwdtab';
dbf_PWDCAB := LowerCase(PROGRAM_Name) + '_db.pwdcab';
DB_Catalog := LowerCase(PROGRAM_Name) + '_db';
DB_HostName := 'localhost';
DB_Password := 'delphi';
DB_Port := 3306;
DB_Protocol := 'mysql-5';
DB_User := LowerCase(PROGRAM_Name) + '_user';
DB_Tag := 0;
DB_Root := 'root';
FILE_Backup := Exec_PATH_PRG + '\' + LowerCase(PROGRAM_Name) + '_backup.bat';
FILE_Restore := Exec_PATH_PRG + '\' + LowerCase(PROGRAM_Name) + '_restore.bat';
FILE_Data := Exec_PATH_PRG + '\' + LowerCase(PROGRAM_Name) + '_data.sql';
if (MySQL_SERVER_INSTALLED) then
begin
if (ZConnection_SERVER.Connected) then
begin
CONNECTION_Server := False;
ZConnection_SERVER.Connected := False;
Label_CONECCION_STATUS.Caption := 'Conectado: NO';
Label_STATUSBAR_PWD.Caption := '';
end;
if (not (FileExists(Exec_PATH_PRG + '\' + UpperCase(PROGRAM_Name) + '.INI'))) then
begin
Init_MySQL := TIniFile.Create(ChangeFileExt(Application.ExeName, '.INI'));
try
Init_MySQL.WriteString('MySQL', 'Catalog', DB_Catalog);
Init_MySQL.WriteString('MySQL', 'HostName', DB_HostName);
Init_MySQL.WriteString('MySQL', 'Password', DB_Password);
Init_MySQL.WriteInteger('MySQL', 'Port', DB_Port);
Init_MySQL.WriteString('MySQL', 'Protocol', DB_Protocol);
Init_MySQL.WriteString('MySQL', 'User', DB_User);
Init_MySQL.WriteInteger('MySQL', 'Tag', DB_Tag);
finally
Init_MySQL.Free;
end;
end;
Init_MySQL := TIniFile.Create(ChangeFileExt(Application.ExeName, '.INI'));
try
ZConnection_SERVER.Tag := Init_MySQL.ReadInteger('MySQL', 'Tag', 0);
finally
Init_MySQL.Free;
end;
Edit_CONECCION.Text := ZConnection_SERVER.HostName;
if (ZConnection_SERVER.Tag = 1) then
begin
try
CONNECTION_Server := True;
ZConnection_SERVER.Connected := True;
Label_CONECCION_STATUS.Caption := 'Conectado: SI';
Label_STATUSBAR_PWD.Caption := 'Conección al Servidor MySQL OK';
except
CONNECTION_Server := False;
ZConnection_SERVER.Connected := False;
Label_CONECCION_STATUS.Caption := 'Conectado: NO';
Label_STATUSBAR_PWD.Caption := 'Error: No se puede conectar';
end;
Exit;
end;
Init_MySQL := TIniFile.Create(ChangeFileExt(Application.ExeName, '.INI'));
try
ZConnection_SERVER.Catalog := str_NULL;
ZConnection_SERVER.HostName := DB_HostName;
ZConnection_SERVER.Password := str_NULL;
ZConnection_SERVER.Port := DB_Port;
ZConnection_SERVER.Protocol := DB_Protocol;
ZConnection_SERVER.User := DB_Root;
ZConnection_SERVER.Tag := DB_Tag;
ZConnection_SERVER.Connected := True;
SQL_CodeMaster := 'GRANT ALL PRIVILEGES ON *.* TO '
+ '"' + DB_User + '"' + '@' + '"' + DB_HostName + '"'
+ ' IDENTIFIED BY ' + '"' + DB_Password + '"'
+ ' WITH GRANT OPTION;';
ZQuery_DATA.SQL.Clear;
ZQuery_DATA.SQL.Add(SQL_CodeMaster);
ZQuery_DATA.ExecSQL;
SQL_CodeMaster := 'GRANT ALL PRIVILEGES ON *.* TO '
+ '"' + DB_User + '"' + '@' + '"' + '%' + '"'
+ ' IDENTIFIED BY ' + '"' + DB_Password + '"'
+ ' WITH GRANT OPTION;';
ZQuery_DATA.SQL.Clear;
ZQuery_DATA.SQL.Add(SQL_CodeMaster);
ZQuery_DATA.ExecSQL;
ZQuery_DATA.SQL.Clear;
ZQuery_DATA.SQL.Add('FLUSH PRIVILEGES;');
ZQuery_DATA.ExecSQL;
ZQuery_DATA.SQL.Clear;
ZQuery_DATA.SQL.Add('CREATE DATABASE IF NOT EXISTS ' + DB_Catalog);
ZQuery_DATA.ExecSQL;
ZConnection_SERVER.Connected := False;
ZConnection_SERVER.Catalog := Init_MySQL.ReadString('MySQL', 'Catalog', str_NULL);
ZConnection_SERVER.HostName := Init_MySQL.ReadString('MySQL', 'HostName', str_NULL);
ZConnection_SERVER.Password := Init_MySQL.ReadString('MySQL', 'Password', str_NULL);
ZConnection_SERVER.Port := Init_MySQL.ReadInteger('MySQL', 'Port', val_ZERO);
ZConnection_SERVER.Protocol := Init_MySQL.ReadString('MySQL', 'Protocol', str_NULL);
ZConnection_SERVER.User := Init_MySQL.ReadString('MySQL', 'User', str_NULL);
ZConnection_SERVER.Tag := Init_MySQL.ReadInteger('MySQL', 'Tag', val_ZERO);
Edit_CONECCION.Text := ZConnection_SERVER.HostName;
BACKUP_path := REGISTRY_LoadData(HKEY_LOCAL_MACHINE, '\Software\MySQL AB\MySQL Server 5.1\', 'DataLocation')
+ 'bin\mysqldump.exe';
BACKUP_str := 'cmd /c ' + '"' + BACKUP_path + '"' + ' '
+ '-h ' + ZConnection_SERVER.HostName + ' '
+ '-u ' + ZConnection_SERVER.User + ' '
+ '-p' + ZConnection_SERVER.Password + ' '
+ DB_Catalog + ' > '
+ '"' + FILE_Data + '"';
RESTORE_path := REGISTRY_LoadData(HKEY_LOCAL_MACHINE, '\Software\MySQL AB\MySQL Server 5.1\', 'DataLocation')
+ 'bin\mysql.exe';
RESTORE_str := 'cmd /c ' + '"' + RESTORE_path + '"' + ' '
+ '-h ' + ZConnection_SERVER.HostName + ' '
+ '-u ' + ZConnection_SERVER.User + ' '
+ '-p' + ZConnection_SERVER.Password + ' '
+ DB_Catalog + ' < '
+ '"' + FILE_Data + '"';
AssignFile(File_, FILE_Backup);
Rewrite(File_);
WriteLn(File_, BACKUP_str);
CloseFile(File_);
AssignFile(File_, FILE_Restore);
Rewrite(File_);
WriteLn(File_, RESTORE_str);
CloseFile(File_);
if (ZConnection_SERVER.Tag = 0) then
begin
WinExec(PChar(FILE_Restore), 0);
ZConnection_SERVER.Tag := 1;
Init_MySQL.WriteString('MySQL', 'Catalog', ZConnection_SERVER.Catalog);
Init_MySQL.WriteString('MySQL', 'HostName', ZConnection_SERVER.HostName);
Init_MySQL.WriteString('MySQL', 'Password', ZConnection_SERVER.Password);
Init_MySQL.WriteInteger('MySQL', 'Port', ZConnection_SERVER.Port);
Init_MySQL.WriteString('MySQL', 'Protocol', ZConnection_SERVER.Protocol);
Init_MySQL.WriteString('MySQL', 'User', ZConnection_SERVER.User);
Init_MySQL.WriteInteger('MySQL', 'Tag', ZConnection_SERVER.Tag);
end;
finally
Init_MySQL.Free;
end;
try
CONNECTION_Server := True;
ZConnection_SERVER.Connected := True;
Label_CONECCION_STATUS.Caption := 'Conectado: SI';
Label_STATUSBAR_PWD.Caption := 'Conección al Servidor MySQL OK';
except
CONNECTION_Server := False;
ZConnection_SERVER.Connected := False;
Label_CONECCION_STATUS.Caption := 'Conectado: NO';
Label_STATUSBAR_PWD.Caption := 'Error: No se puede conectar';
end;
end;
end;
A lo que me refiero es al respaldo que hago aca en mi programa, no lo reconoce el
MySQL administrator.
Se entiende o no??.
Este es el contenido que genero en el archivo
ecam_backup.bat
cmd /c "C:\Pascal\MySQL\MySQL Server 5.1\bin\mysqldump.exe" -h localhost -u ecam_user -pdelphi ecam_db > "C:\Pascal\Libprj\Ecam MySQL\System\ecam_data.sql"
Y este el contenido que genero en el archivo
ecam_restore.bat
cmd /c "C:\Pascal\MySQL\MySQL Server 5.1\bin\mysql.exe" -h localhost -u ecam_user -pdelphi ecam_db < "C:\Pascal\Libprj\Ecam MySQL\System\ecam_data.sql"
Cuando ejecuto el archivo
ecam_restore.bat restaura la base de datos, pero si habro el archivo
ecam_data.sql el que contine la base de datos, desde el
MySQL administrador este no lo reconoce como valido y no lo restaura, a eso me refiero no hay compatibilidad entre la forma en que creo mi respaldo y como lo crea el administrador MySQL. ¿Como podria resolver este percance??.
Este codigo le servira a muchos.
Saludos