B4J Question Can't use MySQLDump to backup data - any suggestions on how to do this within my B4J code

Fr Simon Rundell

Member
Licensed User
Longtime User
I have a School Library App written in B4J and want to implement a backup from within the system. In my development environment a jShell call to mysqldump worked really well to export a .sql full backup. Unfortunately in the production environment, the account running the App does not have permissions to run mysqldump, so I'm thinking I could just execute mysql queries to generate the same output.

Has anyone done anything like this? Any advice on the best way to set about this?

Fr. Simon
 

EnriqueGonzalez

Expert
Licensed User
Longtime User
Not per se unfortunately. but you can use a library like this one:

You may need to wrap it tho.
 
Upvote 0

Fr Simon Rundell

Member
Licensed User
Longtime User
UPDATE:

I managed to compile the mysql-backup4j into a jar file and now I'm working on instantiating it as an #AdditionalJar

From what I can make out from the java examples on Seun Matt's website, (https://smattme.com/blog/technology...atabase-programmatically-using-mysql-backup4j), I need to set up some properties as configuration,

They are these:
Configuration as defined in Java:
//required properties for exporting of db
Properties properties = new Properties();
properties.setProperty(MysqlExportService.DB_NAME, "database-name");
properties.setProperty(MysqlExportService.DB_USERNAME, "root");
properties.setProperty(MysqlExportService.DB_PASSWORD, "root");
        
//properties relating to email config
properties.setProperty(MysqlExportService.EMAIL_HOST, "smtp.mailtrap.io");
properties.setProperty(MysqlExportService.EMAIL_PORT, "25");
properties.setProperty(MysqlExportService.EMAIL_USERNAME, "mailtrap-username");
properties.setProperty(MysqlExportService.EMAIL_PASSWORD, "mailtrap-password");
properties.setProperty(MysqlExportService.EMAIL_FROM, "test@smattme.com");
properties.setProperty(MysqlExportService.EMAIL_TO, "backup@smattme.com");

//set the outputs temp dir
properties.setProperty(MysqlExportService.TEMP_DIR, new File("external").getPath());

MysqlExportService mysqlExportService = new MysqlExportService(properties);
mysqlExportService.export();

But, B4J won't accept a Map as a suitable object to pass the config in

Can't Pass a Map to Initialize...:
    '===========INITILIZE BACKUP OBJECT====================
    Private DBackup As JavaObject
    Dim Prpt As Map
    Prpt.Initialize
    Prpt.Put("DB_NAME", DBName)                  ' defined elsewhwre
    Prpt.Put("DB_USERNAME", DBUsername)
    Prpt.Put("DB_PASSWORD", DBPassword)
    Prpt.Put("EMAIL_HOST", "smtp.server.com")
    Prpt.Put("EMAIL_PORT", "465")
    Prpt.Put("EMAIL_USERNAME", "emailuser")
    Prpt.Put("EMAIL_PASSWORD", "emailpass")
    Prpt.Put("EMAIL_FROM", "user@test.com")
    Prpt.Put("EMAIL_TO", "recipient@test.com")
    Prpt.Put("TEMP_DIR", "C:\Users\Public\Documents")
    
    DBackup.InitializeNewInstance("com.smattme.mysql-backup4j", Prpt)
    
    DBackup.RunMethod("export", Null)

If anyone has any pointers or ideas, I'd be really grateful...
 
Upvote 0

DonManfred

Expert
Licensed User
Longtime User
If anyone has any pointers or ideas
You can not use a B4A Map to replace a java Properties.
Use inlinejava to create a valid Properties or iterate through the map and fill the Properties (in your wrapper).
 
Upvote 0

teddybear

Well-Known Member
Licensed User
UPDATE:

I managed to compile the mysql-backup4j into a jar file and now I'm working on instantiating it as an #AdditionalJar

From what I can make out from the java examples on Seun Matt's website, (https://smattme.com/blog/technology...atabase-programmatically-using-mysql-backup4j), I need to set up some properties as configuration,

They are these:
Configuration as defined in Java:
//required properties for exporting of db
Properties properties = new Properties();
properties.setProperty(MysqlExportService.DB_NAME, "database-name");
properties.setProperty(MysqlExportService.DB_USERNAME, "root");
properties.setProperty(MysqlExportService.DB_PASSWORD, "root");
       
//properties relating to email config
properties.setProperty(MysqlExportService.EMAIL_HOST, "smtp.mailtrap.io");
properties.setProperty(MysqlExportService.EMAIL_PORT, "25");
properties.setProperty(MysqlExportService.EMAIL_USERNAME, "mailtrap-username");
properties.setProperty(MysqlExportService.EMAIL_PASSWORD, "mailtrap-password");
properties.setProperty(MysqlExportService.EMAIL_FROM, "test@smattme.com");
properties.setProperty(MysqlExportService.EMAIL_TO, "backup@smattme.com");

//set the outputs temp dir
properties.setProperty(MysqlExportService.TEMP_DIR, new File("external").getPath());

MysqlExportService mysqlExportService = new MysqlExportService(properties);
mysqlExportService.export();

But, B4J won't accept a Map as a suitable object to pass the config in

Can't Pass a Map to Initialize...'t Pass a Map to Initialize...:
    '===========INITILIZE BACKUP OBJECT====================
    Private DBackup As JavaObject
    Dim Prpt As Map
    Prpt.Initialize
    Prpt.Put("DB_NAME", DBName)                  ' defined elsewhwre
    Prpt.Put("DB_USERNAME", DBUsername)
    Prpt.Put("DB_PASSWORD", DBPassword)
    Prpt.Put("EMAIL_HOST", "smtp.server.com")
    Prpt.Put("EMAIL_PORT", "465")
    Prpt.Put("EMAIL_USERNAME", "emailuser")
    Prpt.Put("EMAIL_PASSWORD", "emailpass")
    Prpt.Put("EMAIL_FROM", "user@test.com")
    Prpt.Put("EMAIL_TO", "recipient@test.com")
    Prpt.Put("TEMP_DIR", "C:\Users\Public\Documents")
   
    DBackup.InitializeNewInstance("com.smattme.mysql-backup4j", Prpt)
   
    DBackup.RunMethod("export", Null)

If anyone has any pointers or ideas, I'd be really grateful...
A simple way is that write the properties file and pass filename to inline java. then load it

 
Upvote 0

teddybear

Well-Known Member
Licensed User
Sounds great, but I haven't spotted how to make that happen yet...
The properties file is like this:

B4X:
DB_NAME=database-name
DB_USERNAME=root
...
You can put it to "/yourpath/properties.cfg"

In java, you just need to do loading the properties file, like below:
Java:
//required properties for exporting of db
Properties properties = new Properties();
/* Comment set properties
properties.setProperty(MysqlExportService.DB_NAME, "database-name");
properties.setProperty(MysqlExportService.DB_USERNAME, "root");
...
*/

// Added read properties from config file
FileInputStream fis = new FileInputStream("/yourpath/properties.cfg");
properties.load(fis);
//-
MysqlExportService mysqlExportService = new MysqlExportService(properties);
mysqlExportService.export();

In b4j, you just write the properties to a folder you specified if you need to do that, and then run export method .

B4X:
   'Write properties to /yourpath/properties.cfg'

    DBackup.InitializeNewInstance("com.smattme.mysql-backup4j", Null)
 
    DBackup.RunMethod("export", Null)
 
Upvote 0
Top