temp file instead of memory stream
This commit is contained in:
parent
36644423f5
commit
25e9f6a994
2 changed files with 23 additions and 20 deletions
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
public string FileSystemPath { get; set; } = @"backups";
|
public string FileSystemPath { get; set; } = @"backups";
|
||||||
|
|
||||||
public string MySqlDumpPathWindows { get; set; } = @"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqldump.exe";
|
public string MySqlDumpPathWindows { get; set; } = @"C:\Program Files\MariaDB 10.3\bin\mysqldump.exe";
|
||||||
public string MySqlDumpPath { get; set; } = @"mysqldump";
|
public string MySqlDumpPath { get; set; } = @"mysqldump";
|
||||||
public string MySqlHost { get; set; } = @"localhost";
|
public string MySqlHost { get; set; } = @"localhost";
|
||||||
public string MySqlUser { get; set; }
|
public string MySqlUser { get; set; }
|
||||||
|
|
|
@ -159,7 +159,9 @@ namespace BackupManager
|
||||||
|
|
||||||
Log(@"Database backup...");
|
Log(@"Database backup...");
|
||||||
|
|
||||||
using (Stream s = CreateMySqlDump())
|
string sqldump = CreateMySqlDump();
|
||||||
|
|
||||||
|
using (Stream s = File.OpenRead(sqldump))
|
||||||
using (Stream g = GZipEncodeStream(s))
|
using (Stream g = GZipEncodeStream(s))
|
||||||
{
|
{
|
||||||
object f = Upload(DatabaseDumpName, @"application/sql+gzip", g);
|
object f = Upload(DatabaseDumpName, @"application/sql+gzip", g);
|
||||||
|
@ -172,6 +174,8 @@ namespace BackupManager
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
File.Delete(sqldump);
|
||||||
|
|
||||||
if (Directory.Exists(Config.MisuzuPath))
|
if (Directory.Exists(Config.MisuzuPath))
|
||||||
{
|
{
|
||||||
Log(@"Filesystem backup...");
|
Log(@"Filesystem backup...");
|
||||||
|
@ -330,12 +334,12 @@ namespace BackupManager
|
||||||
return tmpName;
|
return tmpName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Stream CreateMySqlDump()
|
public static string CreateMySqlDump()
|
||||||
{
|
{
|
||||||
Log(@"Dumping MySQL Databases...");
|
Log(@"Dumping MySQL Databases...");
|
||||||
string tmpFile = Path.GetTempFileName();
|
string sqldefaults = Path.GetTempFileName();
|
||||||
|
|
||||||
using (FileStream fs = File.Open(tmpFile, FileMode.Open, FileAccess.ReadWrite))
|
using (FileStream fs = File.Open(sqldefaults, FileMode.Open, FileAccess.ReadWrite))
|
||||||
using (StreamWriter sw = new StreamWriter(fs))
|
using (StreamWriter sw = new StreamWriter(fs))
|
||||||
{
|
{
|
||||||
sw.WriteLine(@"[client]");
|
sw.WriteLine(@"[client]");
|
||||||
|
@ -344,39 +348,35 @@ namespace BackupManager
|
||||||
sw.WriteLine(@"default-character-set=utf8mb4");
|
sw.WriteLine(@"default-character-set=utf8mb4");
|
||||||
}
|
}
|
||||||
|
|
||||||
// should we use --result-file ?
|
string sqldump = Path.GetTempFileName();
|
||||||
|
|
||||||
StringBuilder mysqldumpArgs = new StringBuilder();
|
StringBuilder mysqldumpArgs = new StringBuilder();
|
||||||
mysqldumpArgs.AppendFormat(@"--defaults-file={0} ", tmpFile);
|
mysqldumpArgs.AppendFormat(@"--defaults-file={0} ", sqldefaults);
|
||||||
mysqldumpArgs.Append(@"--single-transaction ");
|
mysqldumpArgs.Append(@"--single-transaction ");
|
||||||
mysqldumpArgs.Append(@"--tz-utc --triggers ");
|
mysqldumpArgs.Append(@"--tz-utc --triggers ");
|
||||||
mysqldumpArgs.Append(@"--routines --hex-blob ");
|
mysqldumpArgs.Append(@"--routines --hex-blob ");
|
||||||
mysqldumpArgs.Append(@"--add-locks --order-by-primary ");
|
mysqldumpArgs.Append(@"--add-locks --order-by-primary ");
|
||||||
|
mysqldumpArgs.AppendFormat(@"--result-file={0} ", sqldump);
|
||||||
mysqldumpArgs.Append(@"-l -Q -q -B "); // lock, quote names, quick, databases list
|
mysqldumpArgs.Append(@"-l -Q -q -B "); // lock, quote names, quick, databases list
|
||||||
mysqldumpArgs.Append(Config.MySqlDatabases);
|
mysqldumpArgs.Append(Config.MySqlDatabases);
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
Log($@"mysqldump args: {mysqldumpArgs}");
|
||||||
|
#endif
|
||||||
|
|
||||||
Process p = Process.Start(new ProcessStartInfo
|
Process p = Process.Start(new ProcessStartInfo
|
||||||
{
|
{
|
||||||
FileName = IsWindows ? Config.MySqlDumpPathWindows : Config.MySqlDumpPath,
|
FileName = IsWindows ? Config.MySqlDumpPathWindows : Config.MySqlDumpPath,
|
||||||
RedirectStandardError = false,
|
|
||||||
RedirectStandardInput = false,
|
|
||||||
RedirectStandardOutput = true,
|
|
||||||
Arguments = mysqldumpArgs.ToString(),
|
Arguments = mysqldumpArgs.ToString(),
|
||||||
UseShellExecute = false,
|
UseShellExecute = false,
|
||||||
CreateNoWindow = true,
|
CreateNoWindow = true,
|
||||||
});
|
});
|
||||||
|
|
||||||
int read;
|
|
||||||
byte[] buffer = new byte[1024];
|
|
||||||
MemoryStream ms = new MemoryStream();
|
|
||||||
|
|
||||||
while ((read = p.StandardOutput.BaseStream.Read(buffer, 0, buffer.Length)) > 0)
|
|
||||||
ms.Write(buffer, 0, read);
|
|
||||||
|
|
||||||
p.WaitForExit();
|
p.WaitForExit();
|
||||||
File.Delete(tmpFile);
|
|
||||||
ms.Seek(0, SeekOrigin.Begin);
|
|
||||||
|
|
||||||
return ms;
|
File.Delete(sqldefaults);
|
||||||
|
|
||||||
|
return sqldump;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Stream GZipEncodeStream(Stream input)
|
public static Stream GZipEncodeStream(Stream input)
|
||||||
|
@ -414,6 +414,9 @@ namespace BackupManager
|
||||||
|
|
||||||
public static void SatoriBroadcast(string text, bool error = false)
|
public static void SatoriBroadcast(string text, bool error = false)
|
||||||
{
|
{
|
||||||
|
#if DEBUG
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
if (string.IsNullOrEmpty(text)
|
if (string.IsNullOrEmpty(text)
|
||||||
|| Config == null
|
|| Config == null
|
||||||
|| string.IsNullOrWhiteSpace(Config.SatoriHost)
|
|| string.IsNullOrWhiteSpace(Config.SatoriHost)
|
||||||
|
|
Reference in a new issue