diff --git a/dbsake/core/mysql/sieve/parser.py b/dbsake/core/mysql/sieve/parser.py index 99eed32..9e20dc1 100644 --- a/dbsake/core/mysql/sieve/parser.py +++ b/dbsake/core/mysql/sieve/parser.py @@ -39,6 +39,7 @@ def extract_identifier(value): DISCRIMINATORS = [ (b'-- MySQL dump', 'header'), (b'-- Position', 'replication_info'), + (b'-- GTID to start replication from', 'replication_info'), (b'-- Current Database', 'createdatabase'), (b'-- Table structure', 'tablestructure'), (b'-- Dumping data for table', 'tabledata'), diff --git a/dbsake/core/mysql/sieve/writers.py b/dbsake/core/mysql/sieve/writers.py index 7dce462..ba29efe 100644 --- a/dbsake/core/mysql/sieve/writers.py +++ b/dbsake/core/mysql/sieve/writers.py @@ -64,6 +64,7 @@ def command_to_ext(command): class DirectoryWriter(SimpleWriter): # track the first view, so we can initialize a file as needed first_view = False + replication_info = False def _open(self, parts, mode='ab'): basedir = self.options.directory.encode('utf8') @@ -85,7 +86,12 @@ def open_header(self, section): return self.open_devnull(section) def open_replication_info(self, section): - return self._open([b'replication_info.sql'], mode='wb') + if not self.replication_info: + mode = 'wb' + self.replication_info = True + else: + mode = 'ab' + return self._open([b'replication_info.sql'], mode=mode) def open_createdatabase(self, section): return self._open([section.database, section.database + b'.createdb'], diff --git a/tests/mariadb_gtid_master_data.sql.gz b/tests/mariadb_gtid_master_data.sql.gz new file mode 100644 index 0000000..4217af6 Binary files /dev/null and b/tests/mariadb_gtid_master_data.sql.gz differ diff --git a/tests/test_sieve.py b/tests/test_sieve.py index 676bdde..6cc3d22 100644 --- a/tests/test_sieve.py +++ b/tests/test_sieve.py @@ -31,3 +31,13 @@ def test_sieve_directory(): with runner.isolated_filesystem(): result = runner.invoke(sieve_cli, args, obj={}) assert result.exit_code == 0 + + +def test_sieve_w_mariadb10_gtid(): + runner = CliRunner() + path = os.path.join(os.path.dirname(__file__), + 'mariadb_gtid_master_data.sql.gz') + + args = ['--format=stream', '--input-file=' + path, '-O'] + result = runner.invoke(sieve_cli, args, obj={}) + assert result.exit_code == 0