go-dump

module
v0.0.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 3, 2018 License: MIT

README

Build Status

go-dump

** IMPORTANT! the project is under development and there is a lot of work to do. **

This is a parallel MySQL dump in Go.

You can either dump a database or multiple databases or a table or multiple tables.

How it works?

go-dump uses the MVCC capabilities from the storage engines (currently only InnoDB) to get a consistent state of a backup. The concept is very similar to mydumper but with some extra features that I found useful.

Pending

  • Store the slave position if to get the master information. AKA --dump-slave from mysqldump.
  • Make tests
  • Make more tests

Usage

The parameters and options are listed here:

Usage: go-dump  --destination path [--databases str] [--tables str] [--all-databases]
[--dry-run | --execute ] [--help] [--debug] [--quiet] [--version] [--lock-tables]
[--consistent] [--isolation-level str] [--channel-buffer-size num] [--chunk-size num]
[--tables-without-uniquekey str] [--threads num] [--mysql-user str] [--mysql-password str]
[--mysql-host str] [--mysql-port num] [--mysql-socket path] [--add-drop-table]
[--get-master-status] [--get-slave-status] [--output-chunk-size num] [--skip-use-database]
[--compress] [--compress-level] [--ini-files str]

go-dump dumps a database or a table from a MySQL server and creates the SQL statements
to recreate a table. This tool create one file per table per thread in the destination directory
Example: go-dump --destination /tmp/dbdump --databases mydb --mysql-user myuser --mysql-password password

Options description

# General:
   --help                     Display this message. Default [false]
   --dry-run                  Just calculate the number of chaunks per table and display it. Default [false]
   --execute                  Execute the dump. Default [false]
   --debug                    Display debug information. Default [false]
   --quiet                    Do not display INFO messages during the process. Default [false]
   --version                  Display version and exit. Default [false]
   --lock-tables              Lock tables to get consistent backup. Default [true]
   --channel-buffer-size      Task channel buffer size. Default [1000]
   --chunk-size               Chunk size to get the rows. Default [1000]
   --tables-without-uniquekey Action to have with tables without any primary or unique key. Valid actions are: 'error', 'single-chunk'. Default [error]
   --threads                  Number of threads to use. Default [1]
   --compress                 Enable compression to the output files. Default [false]
   --compress-level           Compression level from 1 (best speed) to 9 (best compression). Default [1]
   --consistent               Get a consistent backup. Default [true]
   --isolation-level          Isolation level to use. If you need a consitent backup, leave the default 'REPEATABLE READ', other options READ COMMITTED, READ UNCOMMITTED and SERIALIZABLE. Default [REPEATABLE READ]
   --ini-file                 INI file to read the configuration options.

# MySQL options:
   --mysql-user               MySQL user name. Default [root]
   --mysql-password           MySQL password.
   --mysql-host               MySQL hostname. Default [localhost]
   --mysql-port               MySQL port number Default [3306]
   --mysql-socket             MySQL socket file.

# Databases or tables to dump:
   --all-databases            Dump all the databases. Default [false]
   --databases                List of comma separated databases to dump.
   --tables                   List of comma separated tables to dump. Each table should have the database name included, for example "mydb.mytable,mydb2.mytable2".

# Output options:
   --destination              Directory to store the dumps.
   --add-drop-table           Add drop table before create table. Default [false]
   --get-master-status        Get the master data. Default [true]
   --get-slave-status         Get the slave data. Default [false]
   --output-chunk-size        Chunk size to output the rows. Default [0]
   --skip-use-database        Skip USE "database" in the dump. Default [false]

Examples

go-dump --threads 8 --chunk-size 50000 --output-chunk-size 1000  --channel-buffer-size  2000 --tables-without-uniquekey "single-chunk" --add-drop-table  --databases "test" --mysql-user root --destination /tmp/testbackup   --execute   --skip-use-database

2018-04-08 01:40:44 INFO Locking tables to get a consistent backup.
2018-04-08 01:40:44 INFO Getting Master Status
2018-04-08 01:40:44 INFO Cols [File Position Binlog_Do_DB Binlog_Ignore_DB Executed_Gtid_Set]
2018-04-08 01:40:44 INFO Master File: binlog.000008
Master Position: 154
2018-04-08 01:40:44 INFO Unlocking the tables. Tables were locked for 5.197763ms
2018-04-08 01:40:44 INFO Starting 8 workers
2018-04-08 01:40:46 INFO Status. Queue: 0 of 80
2018-04-08 01:40:49 INFO Status. Queue: 50 of 120
2018-04-08 01:40:54 INFO Status. Queue: 10 of 120
2018-04-08 01:41:00 INFO Waiting for the creation of all the chunks.
2018-04-08 01:41:00 INFO Execution time: 15.498141583s

Explanation of this command:

This command will execute 8 threads, it will create chunks of 50000 rows and it will write in chunks of 1000 rows, the buffer for the chunks it will be 2000 and the tables without a primary or unique key will be done in a single chunk. It will add the drop table command and the database that it will backup it is "test". The user to connect to the mysql database is "root" and the dastination directory is "/tmp/testbackup". We want to execute the backup and we don't want to add the "USE DATABASE" command on each file.

Focus of this project

The main focus of this project is to be able to make and restore consistent logical backups from MySQL.

Directories

Path Synopsis
go

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL