Newsgroup: it.comp.lang.delphi
Titolo: Backup MySql community edition

Noto molta differenza tra le Procedure di Backup in Delphi ma anche in 
C#, rispetto a quelle ottenute da MySqlWorkBench 8
 
es: dataBase con circa 24.000 Record, la tabella interessata, con alcuni 
Blob (1 Blob per le Immagini + 2 TynyBlob per i path)
 
da Codice ottengo una dimensione di circa 130.000Kb,
da MySqlWorkBench stessa tabella 76.000 Kb.
 
Sempre dump delle singole tabelle, per eviìtare problemi di restore.
 
Non e' un problema di nr.immagini, l'applicativo carica sempre 100 
record Immagine (TinyBlob) alla volta dal Db, dove risiede solo la 
diapositiva di 130 x 100 kb, l'immagine reale invece viene caricata da 
Hd in base al path, quindi 100 o 100.000 Imnagini non fanno differenza.
 
La parte consistente (Blob) e' data dalla descrizione applicata alla 
singola immagine ed e' qui che MySqlWorkBench fa la differenza nelle 
dimensiomi.
 
MySql sicuramente affidabile, non ho esperienza con MariaDb e prestazioni.
 
Perche' provare altro ? perche' mysqldump inserisce righe che 
MySqlWordkBench non fa (esame tabella con editor di testo), in entrambi 
i casi uso l'ozione create database e create teble, in modo da ricreare 
la struttura in caso di restore senza db.
 
Maurizio
 
^^^^^^^^^
 
a titolo indicativo la routine in Delphi 10.4
 
function Tfrm_Menu1.EseguiBackup: String;
var Path, Nome, Data, Ora, DataBck, OraBck, FileCmd: string;
     iRes: Integer;
     F: TextFile;
begin
//Backup
//mysqldump -u user -p db_da_copiare > backup.sql
 
{
If the return value of ShellExecute is greater than 32, the application 
was executed successfully.
If its less than 33 then the function failed.
Here is a complete list of the possible return values of ShellExecute:
0 = The operating system is out of memory or resources.
2 = The specified file was not found
3 = The specified path was not found.
5 = Windows 95 only: The operating system denied access to the specified 
file
8 = Windows 95 only: There was not enough memory to complete the operation.
10 = Wrong Windows version
11 = The .EXE file is invalid (non-Win32 .EXE or error in .EXE image)
12 = Application was designed for a different operating system
13 = Application was designed for MS-DOS 4.0
15 = Attempt to load a real-mode program
16 = Attempt to load a second instance of an application with 
non-readonly data segments.
19 = Attempt to load a compressed application file.
20 = Dynamic-link library (DLL) file failure.
26 = A sharing violation occurred.
27 = The filename association is incomplete or invalid.
28 = The DDE transaction could not be completed because the request 
timed out.
29 = The DDE transaction failed.
30 = The DDE transaction could not be completed because other DDE 
transactions were being processed.
31 = There is no application associated with the given filename extension.
32 = Windows 95 only: The specified dynamic-link library was not found.
}
 
   Path := ExtractFilePath(ParamStr(0));
   Data := DateToStr(Now);
   Ora := TimeToStr(Now);
 
   //Rimuove caratteri /
   DataBck  := StringReplace(Data, '/', '', [rfReplaceAll, rfIgnoreCase]);
 
   //Rimuove : da stringa
   OraBck := StringReplace(Ora, ':', '', [rfReplaceAll, rfIgnoreCase]);
 
   //Nome file Backup
   Nome := Path + '\Backup\';
 
   //Verifica esistenza
   if not DirectoryExists(Nome) then CreateDir(Nome);
 
   Nome := Nome + 'Dump_' + DataBck + '_' + OraBck + '.sql';
   FileCmd := Path + 'comandi.bat';
 
   {$I+}
   AssignFile(F, FileCmd);
   ReWrite(F);
 
   WriteLn(F, 'C:');
   WriteLn(F, 'CD\Program Files\MySQL\MySQL Server 8.0\bin\');
 
   Write(F, 'mysqldump -u cremeria -pcremeria --opt --add-drop-database 
   --create-options --host 127.0.0.1 --databases db_cremeria > ' + Nome);
 
   {
   mysqldump -u cremeria -pcremeria --opt --add-drop-database 
--create-options --host 127.0.0.1 --databases db_cremeria > 
D:\Test\Dump_verifica.sql
   }
 
 
   CloseFile(F);
   {I-}
 
   iRes := ShellExecute(Handle, 'open', PChar(FileCmd), nil, nil, 
SW_HIDE); //esegue senza visualizzare
 
   if iRes > 32 then
    begin
      Result := Nome;
 
      ShowMessage('Backup ' + Nome + #13 + 'eseguito correttamente');
      end
    else
      ShowMessage('Backup ' + Nome + #13 + 'riscontrato errore ' + 
IntToStr(iRes));
 
end;

 MySqlWordkBench non fa (esame tabella con editor di testo)
 
Come docevp. questa domanda non ha alcun senso.
Non è workbrench che fa il backup: workbrench chiama MySqlDump!
 
A.
 

 D:\Test\Dump_verifica.sql
 
A queste opzioni, visto che stai facendo "cose brutte" con i blob, ti consiglio
di aggiungere --hex-blob
 
Enrico

 evitare MariaDB, ma sono biased
 
..come, sconsigli un vero "database della madonna"..???   :-D
Seriamente, xche no? Io non ci ho mai avuto a che fare e sono curioso...
 
A.

 Seriamente, xche no? Io non ci ho mai avuto a che fare e sono curioso...
 
Per tre motivi:
 
 - Il primo è tecnico. Rispetto a MySQL, MariaDB è sempre un po' indietro a
   livello di funzionalità. Per fare un esempio, il supporto a JSON è stato
   introdotto solo nel 2017, quando in MySQL era disponibile almeno dal 2015.
 - Il secondo è di governance: il ciclo di release segue una numerazione tutta
   loro. Per farmi capire, il supporto a JSON che citavo prima è stato
   introdotto nella release 10.2.7, ovvero in una sottorelease della 10.2.
   Personalmente non mi piace una gestione delle release del genere, ovvero il
   supporto a JSON me lo sarei aspettato in 10.3.0 (considera che ora siamo a
   10.2.44)
 - Il terzo è più personale: tutte le volte che ho provato ad usarlo, non ci
   sono mai riuscito (ovvero nemmeno mi partiva) e sono tornato a MySQL. Magari
   sono stato sfigato io, ma se al primo tentativo MySQL mi parte e sono sulla
   stessa macchina, forse non è proprio tutta colpa mia...
 
Devo ammettere che il secondo punto è nato mentre leggevo il changelog di JSON
su MariaDB, ma rimane comunque un punto valido a mio avviso
 
Enrico

 stessa macchina, forse non è proprio tutta colpa mia... 
 
Se vedo cose di questo tipo mollo subito.
Se ancor prima di iniziare tozzo, tremo al pensiero di cosa potrebbe succede DOPO.....
 
A.

> C#, rispetto a quelle ottenute da MySqlWorkBench 
anche se OT dico che ho capito da dove arriva la differenze di spazio 
occupupto.
 
con mysqldump si ottiene una dimensione
con una Libreria .Net (MySqlBackup) lo spazio aumenta in modo notevole; 
forse qualche parametro, ma direi preferibile mysqldump sempre allineato 
con MySql.
 
quanto alle righe inserite, ad esclusione di alcuni commenti e righe 
vuote , nell'intestazione del file , non c'e' altro.
 
quanto alla scelta di inserire thumbnail in un campo Blob, anziche' nel 
filesystem, la scelta e' stata fatta dal cliente che gestisce archivi 
fotografici in modo simile (per chi conosce) a quanto fa Adobe LightRoom.
 

 con MySql. 
 
Onestamente, non ho capito...
Cosa vuol dire "preferibile"? Preferibile rispetto a COSA?
Cosa vuol dire "sempre allineato con Mysql"?
 
A.
 

> 
che mysqldump segue le directory dove e' installato MySqlServer, ne 
consegue che non si potra' (**) eseguire mysqldump di una rel. diversa 
da quella installata.
 
(**) salvo il caso, in cui mysqldump sia stato spostato di proposito in 
una directory esterna a MySqlServer.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 da quella installata. 
 
E quindi? 
 
 
A.