• Stars
    star
    113
  • Rank 300,231 (Top 7 %)
  • Language
    Java
  • License
    MIT License
  • Created about 6 years ago
  • Updated about 1 month ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

mysql-backup4j is a library for programmatically exporting mysql databases and sending the zipped dump to email, Amazon S3, Google Drive or any other cloud storage of choice

mysql-backup4j

Build Status

Maven Central

mysql-backup4j is a library for programmatically exporting mysql databases and sending the zipped dump to email, Amazon S3, Google Drive or any other cloud storage of choice

It gives the developer access to the generated zip file and the generated SQL query string for use in other part of the application.

It also provides a method for importing the SQL exported by the tool - programmatically.

Installation

The artifact is available on Maven Central and can be added to the project's pom.xml:

<dependency>
    <groupId>com.smattme</groupId>
    <artifactId>mysql-backup4j</artifactId>
    <version>1.2.1</version>
</dependency>

The latest version can be found here

Usage

The minimum configuration required for the library is the database name, username and password.

However, if you want the backup file to be sent to your email automatically after backup, you must provide email configurations as well.

//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, "[email protected]");
properties.setProperty(MysqlExportService.EMAIL_TO, "[email protected]");

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

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

Calling mysqlExportService.export(); will export the database and save the dump temporarily in the configured TEMP_DIR

If an email config is supplied, the dump will be sent as an attachment. Finally, when all operations are completed the temporary dir is cleared and deleted.

If you want to get the generated backup file as a Java File object, you need to specify this property as part of the configuration:

//...
properties.setProperty(MysqlExportService.PRESERVE_GENERATED_ZIP, "true");
properties.setProperty(MysqlExportService.PRESERVE_GENERATED_SQL_FILE, "true");

and then you can call this method:

File file = mysqlExportService.getGeneratedZipFile();

Finally, let's say for some reason you want the generated SQL string you can do this:

String generatedSql = mysqlExportService.getGeneratedSql();

Other parameters are:

properties.setProperty(MysqlExportService.ADD_IF_NOT_EXISTS, "true");
properties.setProperty(MysqlExportService.JDBC_DRIVER_NAME, "com.mysql.cj.jdbc.Driver");
properties.setProperty(MysqlExportService.JDBC_CONNECTION_STRING, "jdbc:mysql://localhost:3306/database-name?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&useSSL=false");

They are explained in a detailed manner in this tutorial

Importing a Database

To import a database, you need to use the ImportService like so:

String sql = new String(Files.readAllBytes(Paths.get("path/to/sql/dump/file.sql")));

boolean res = MysqlImportService.builder()
        .setDatabase("database-name")
        .setSqlString(sql)
        .setUsername("root")
        .setPassword("root")
        .setDeleteExisting(true)
        .setDropExisting(true)
        .importDatabase();
        
assertTrue(res);

First get SQL as a String and then pass it to the import service with the right configurations.

Alternatively, you can also use the .setJdbcConnString(jdbcURL) method on the import service.

e.g.

boolean res = MysqlImportService.builder()
                .setSqlString(generatedSql)
                .setJdbcConnString("jdbc:mysql://localhost:3306/backup4j_test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&useSSL=false")
                .setUsername("db-username")
                .setPassword("db-password")
                .setDeleteExisting(true)
                .setDropExisting(true)
                .importDatabase();

setDeleteExisting(true) will delete all data from existing tables in the target database.

While setDropExisting(true) will drop the table.

Supplying false to these functions will disable their respective actions.

NOTE: The import service is only guaranteed to work with SQL files generated by the export service of this library

CHANGELOG

V 1.2.1 - Raises a new runtime exception MysqlBackup4JException if the required properties are not configured

Author

Seun Matt smattme.com with πŸ’š

Contributions and Support

If you want to create a new feature, though not compulsory, but it will be helpful to reach out to me first before proceeding.

To avoid a scenario where you submit a PR for an issue that someone else is working on already.

Tutorials / Articles

More Repositories

1

codeigniter-log-viewer

This is a simple Log Viewer for viewing Code Igniter logs on the browser and via API clients
PHP
94
star
2

morsecodetranslator

This is a desktop application that translates English text to Morse code and vice-versa
Java
33
star
3

spring-blog

CSS
24
star
4

cloudcontact

A Complete Web App developed with SparkJava, Mongodb and Thinbus SRP Authentication Protocol
CSS
18
star
5

excel_uploader

This is a simple JavaScript library that simplify the process of uploading data from large excel files to the server
JavaScript
17
star
6

fstackapi_php

This is a PHP wrapper for formstack's REST API v2.
PHP
9
star
7

request-validator

This is a utility library for validating HTTP request body for Java web applications with the advantage to define complex rules and get all violations in one go
Java
9
star
8

cloudcontact-maven

A Complete Web App developed with SparkJava, Mongodb and Thinbus SRP Authentication Protocol
CSS
5
star
9

cassandra2sql

This is a Java library for exporting cassandra database to SQL that can be used to restore an SQL database like MySQL and Postgres
Java
3
star
10

spring-cloud-open-feign-book-demo

This is the supporting example code used in the Spring Cloud OpenFeign Book published by Seun Matt
Java
2
star
11

backup-mongodb

This module will backup mongodb into .json files, archive it into .zip file that is then send to provided emil address using nodemailer automatically
JavaScript
2
star
12

microservice-parent

This is a demo Java Microservice
Java
1
star
13

eureka-client-wrapper

This is a wrapper for easily connecting non-spring-boot Java projects into Spring Cloud Eureka Server
Java
1
star
14

backup-mongodb-restorer

This module will restore backup of mongodb created by backup-mongodb
JavaScript
1
star