102 lines
3.5 KiB
C#
102 lines
3.5 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.IO;
|
|||
|
using System.Diagnostics;
|
|||
|
using System.Windows.Forms;
|
|||
|
|
|||
|
namespace SafeMobileLib
|
|||
|
{
|
|||
|
public class DBbackup
|
|||
|
{
|
|||
|
private string dbServer, dbPort,dbUser, dbDbname;
|
|||
|
public DBbackup(string dbUser, string dbName,string dbServ)
|
|||
|
{
|
|||
|
this.dbUser = dbUser; this.dbDbname = dbName; this.dbServer = dbServ;
|
|||
|
}
|
|||
|
|
|||
|
public bool performBackupPostgres(string path, string postgresPath)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (path == "")
|
|||
|
{
|
|||
|
path = "backups";
|
|||
|
}
|
|||
|
DateTime backupTime = DateTime.Now;
|
|||
|
string bTime = backupTime.ToString("yyyy_MM_dd_HH_mm");
|
|||
|
|
|||
|
String tmestr = "";
|
|||
|
if (!Directory.Exists("backups"))
|
|||
|
Directory.CreateDirectory("backups");
|
|||
|
tmestr = path + "\\" +bTime+ ".tar";
|
|||
|
Console.WriteLine("Backup db to:" + tmestr);
|
|||
|
ProcessStartInfo proc = new ProcessStartInfo();
|
|||
|
string cmd = string.Format("--username={0} --file=\"{1}\" --format=c --create --host={2} {3} ",
|
|||
|
dbUser, tmestr,dbServer, dbDbname);
|
|||
|
Console.WriteLine("backup command:" + cmd);
|
|||
|
try
|
|||
|
{
|
|||
|
postgresPath += "pgsql\\bin\\";
|
|||
|
proc.FileName = postgresPath + "pg_dump.exe";
|
|||
|
proc.RedirectStandardInput = false;
|
|||
|
proc.RedirectStandardOutput = false;
|
|||
|
proc.Arguments = cmd;
|
|||
|
proc.UseShellExecute = false;
|
|||
|
|
|||
|
Process p = Process.Start(proc);
|
|||
|
p.WaitForExit();
|
|||
|
}
|
|||
|
catch (Exception e)
|
|||
|
{
|
|||
|
Console.WriteLine("Error: " + e.ToString());
|
|||
|
return false;
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|
|||
|
catch (IOException ex)
|
|||
|
{
|
|||
|
SM.Debug("Disk full or other IO error , unable to backup!" + ex.ToString());
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public bool performRestorePostgres(string filepath, string postgresPath)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
Console.WriteLine("restore db from:" + filepath);
|
|||
|
ProcessStartInfo proc = new ProcessStartInfo();
|
|||
|
string cmd = string.Format("-c --dbname={0} --username={1} --host={2} \"{3}\"",
|
|||
|
dbDbname, dbUser,dbServer, filepath);
|
|||
|
Console.WriteLine("restore command:"+cmd);
|
|||
|
try
|
|||
|
{
|
|||
|
postgresPath += "pgsql\\bin\\";
|
|||
|
proc.FileName = postgresPath + "pg_restore.exe";
|
|||
|
proc.RedirectStandardInput = false;
|
|||
|
proc.RedirectStandardOutput = false;
|
|||
|
proc.Arguments = cmd;
|
|||
|
proc.UseShellExecute = false;
|
|||
|
|
|||
|
Process p = Process.Start(proc);
|
|||
|
|
|||
|
p.WaitForExit();
|
|||
|
}
|
|||
|
catch (Exception e)
|
|||
|
{
|
|||
|
Console.WriteLine("Error: " + e.ToString());
|
|||
|
return false;
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|
|||
|
catch (IOException)
|
|||
|
{
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|