示例#1
0
        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;
        }
示例#2
0
        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);
        }
示例#3
0
 private void onCompleted(BinlogDumpResultset status)
 {
     Completed?.Invoke(status);
 }