Nota: Articoli etichettati come Snippet non contengono codice completo ma solo parti di esso, recuperate da appunti. Per cui, potrebbe essere necessario modificarne alcuni nomi o indici. Per ogni chiarimento, lasciate un commento all’articolo.
Per effettuare il dump di un database MySql all’interno di una applicazione C#, mediante l’applicazione ufficiale mysqldump.exe.
Sono stati commentati i pezzi relativi al redirect dello standard output perchè nella prima versione, l’output del programma veniva poi salvato su file. Il problema è che in tal modo eventuali caratteri UTF (es: °) non venivano correttamente esportati perchè il redirect non gestisce la codifica UTF-8, mentre tutto viene esportato correttamente mediante “–result-file”.
string dumpFileName = “backupDb_” + String.Format(“{0:yyyy_MM_dd_HH_mm}”, DateTime.Now) + “.sql”;
string applicazioneDbDump = @”c:\………..\mysqldump.exe”;
try
{
ProcessStartInfo appDump = new ProcessStartInfo(applicazioneDbDump);
appDump.WindowStyle = ProcessWindowStyle.Hidden;
appDump.UseShellExecute = false;
appDump.RedirectStandardError = true;
//appDump.RedirectStandardOutput = true;
//–skip-lock-tables >> Senza questo parametro, in vecchie versioni di MySql server, genera errore [mysqldump: Got error: 1044: Access denied for user ‘utente’@’%’ to database ‘nomedb’ when using LOCK TABLES]
appDump.Arguments = string.Format(“-h {0} –database {1} -u {2} -p{3} –skip-add-drop-table –skip-disable-keys –skip-set-charset –skip-lock-tables –result-file=\”{4}\””, server, database, userid, password, Config.percorsoApplicazione + “\\BackupDb\\” + dumpFileName);Process p = Process.Start(appDump);
//string output = p.StandardOutput.ReadToEnd(); //Lettura deve essere effettuata prima di WaitForExit, altrimenti si blocca
string outerr = p.StandardError.ReadToEnd();
p.WaitForExit(60000); //60 secondiif (p.ExitCode != 0)
{
LogMe.log(LogLevel.Error, outerr);
LogMe.log(LogLevel.Error, appDump.Arguments);
Func.disattivaProgressBar();
MessageBox.Show(“Impossibile completare il backup\n” + outerr, Config.titolo, MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
}
catch (Exception e)
{
LogMe.log(LogLevel.Error, e);
Func.disattivaProgressBar();
MessageBox.Show(“Impossibile avviare il backup\n” + e.Message, Config.titolo, MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
Una replica a “Backup Mysql con mysqldump.exe – Parametri dell’applicazione”
ATTENZIONE: per importare poi correttamente il file in MySql mediante la funzione “Importa” di phpMyAdmin, inserire come prima riga del file la seguente stringa:
“SET FOREIGN_KEY_CHECKS = 0;”
ed inserire come ultima riga del file:
SET FOREIGN_KEY_CHECKS = 1;
Effettuare questa operazione -esclusivamente- mediante editor che gestiscono “davvero” il formato UTF-8 (es: PsPad – no: Wordpad, Notepad)