Con el siguiente código vamos a ver cómo realizar copias de seguridad desde la interfaz de usuario, a través de mysqldump
de MySql. Puede resultarnos útil a la hora de incluir un módulo de copias de seguridad en una aplicación de gestión.
Como requisito previo, tenemos que tener mysqldump
accesible desde el path
del sistema.
Vamos a crear un proceso con la ejecución de mysqldump
y vamos a redireccionar la salida de dicho proceso a un objeto de la clase StreamReader, que posteriormente utilizaremos en un objeto de la clase TextWriter
. El objeto de la clase TextWriter
irá almacenando cada una de las líneas de la salida del proceso en el fichero donde vamos a almacenar la copia de seguridad.
En el constructor del objeto TextWriter
hemos especificado la codificación Encoding.Default
, ya que de esa forma podremos restaurar la copia de seguridad desde una terminal de MS-DOS.
El método es el siguiente:
private void copia_de_seguridad()
{
try
{
SaveFileDialog fd;
fd = new SaveFileDialog();
DialogResult dialogo;
dialogo = fd.ShowDialog();
if (dialogo == DialogResult.OK)
{
if (fd.FileName != String.Empty)
{
String linea;
fichero = fd.FileName;
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.FileName = "mysqldump";
proc.StartInfo.Arguments = "base_datos --single-transaction --host=ip_del_servidor --user=usuario --password=clave";
Process miProceso;
miProceso = Process.Start(proc.StartInfo);
StreamReader sr = miProceso.StandardOutput;
TextWriter tw = new StreamWriter(fd.FileName,false,Encoding.Default);
while ((linea = sr.ReadLine()) != null)
{
tw.WriteLine(linea);
}
tw.Close();
MessageBox.Show("Copia de seguridad realizada con éxito");
}
}
}
catch (Exception exc)
{
MessageBox.Show("Se ha producido un error al realizar la copia de seguridad");
}
}