private async void dumpExecutor() { MySQLCredentialsConfig cnf = new MySQLCredentialsConfig(); cnf.host = config.host; cnf.port = config.port; cnf.username = config.username; cnf.password = config.password; cnf.database = config.database; DbConnection con = new DbConnection(cnf); if (!con.testConnection().wasSuccessful) { onError(-1); return; } onProgress("Dumping from binary logs..."); dumpInstance = new BinlogDump(); dumpInstance.config = config; dumpInstance.CompressStart += onCompressStartHandler; dumpInstance.CompressProgress += onCompressProgressHandler; BinlogDumpResultset result = dumpInstance.executeDump(); onCompleted(result); dumpInstance = null; }
public BinlogDumpResultset executeDump() { result = new BinlogDumpResultset(); result.wasSuccessful = true; StringBuilder arguments = calculateArguments(); if (!result.wasSuccessful) { return(result); } // dump execution Console.WriteLine(arguments.ToString()); string binlogexefile = "resources/mysqldump/mysqlbinlog.exe"; proc = new Process { StartInfo = new ProcessStartInfo { FileName = binlogexefile, Arguments = arguments.ToString(), UseShellExecute = false, RedirectStandardOutput = true, //prepei na diavastoun me ti seira pou ginonte ta redirect alliws kolaei se endless loop RedirectStandardError = true, CreateNoWindow = true } }; Console.WriteLine("BinlogDump: Dump starting now"); proc.Start(); Random rnd = new Random(); string fileExt = ".sql"; String filename = "binlogdump" + rnd.Next(1000000, 9999999) + fileExt; Directory.CreateDirectory(configurationManagerInstance.mysqlDumpConfigInstance.tempSavePath); while (File.Exists(configurationManagerInstance.mysqlDumpConfigInstance.tempSavePath + filename)) { filename = "binlogdump" + rnd.Next(10000000, 99999999) + fileExt; } try { StreamWriter filewriter = new StreamWriter(@configurationManagerInstance.mysqlDumpConfigInstance.tempSavePath + filename); while (!proc.StandardOutput.EndOfStream) { filewriter.WriteLine(proc.StandardOutput.ReadLine()); } filewriter.Close(); result.mysqlbinlogexeStandardError = ""; while (!proc.StandardError.EndOfStream) { result.mysqlbinlogexeStandardError += proc.StandardError.ReadLine() + "\n"; } result.mysqlbinlogexeStandardError = result.mysqlbinlogexeStandardError.Replace("Warning: Using a password on the command line interface can be insecure.\n", ""); Console.WriteLine(result.mysqlbinlogexeStandardError); //for testing proc.WaitForExit(); } catch (Exception ex) { Console.WriteLine(ex.StackTrace); File.Delete(configurationManagerInstance.mysqlDumpConfigInstance.tempSavePath + filename); } if (proc == null || proc.ExitCode != 0) { result.wasSuccessful = false; result.errorNumber = -2; if (proc == null) { result.mysqlbinlogexeStandardError = "MySQL binlog proccess was killed."; } File.Delete(configurationManagerInstance.mysqlDumpConfigInstance.tempSavePath + filename); } else { result.wasSuccessful = true; result.fileAbsPath = configurationManagerInstance.mysqlDumpConfigInstance.tempSavePath + filename; //compression if (configurationManagerInstance.compressConfigInstance.enableCompression) { comp = new Compression(); comp.absolutePath = result.fileAbsPath; comp.CompressProgress += onCompressProgressHandler; comp.CompressStart += onCompressStartHandler; CompressionResultSet compResult = comp.doCompress7z(); //edw kaleitai to compression if (!compResult.wasSucessful) { result.wasSuccessful = false; result.errorNumber = -3; result.mysqlbinlogexeStandardError = compResult.standardError; } File.Delete(result.fileAbsPath); //delete to sketo .sql result.fileAbsPath = compResult.resultAbsPath; } } result.incrementalFormatPrefix = config.prefix; return(result); }
private void onCompleted(BinlogDumpResultset status) { Completed?.Invoke(status); }