trove-specs/specs/mitaka/mariadb-gtid-replication.rst
Andreas Jaeger b3a0be6eaa Cleanup py27 support
This repo is now testing only with Python 3, so let's make
a few cleanups:
- Remove obsolete sections from setup.cfg
- Update requirements, no need for python_version anymore
- Switch to using sphinx-build, fix problems found
- Use newer openstackdocstheme and Sphinx versions
- Cleanup */source/conf.py to remove now obsolete content.
- Remove install_command from tox.ini, the default is fine

Change-Id: I6c593dff382a7aac4d758f802173f5a9f1e66182
2020-04-19 11:11:10 +02:00

185 lines
3.7 KiB
ReStructuredText

..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
Sections of this template were taken directly from the Nova spec
template at:
https://github.com/openstack/nova-specs/blob/master/specs/juno-template.rst
..
This template should be in ReSTructured text. The filename in the git
repository should match the launchpad URL, for example a URL of
https://blueprints.launchpad.net/trove/+spec/awesome-thing should be named
awesome-thing.rst.
Please do not delete any of the sections in this template. If you
have nothing to say for a whole section, just write: None
Note: This comment may be removed if desired, however the license notice
above should remain.
=====================================
Add MariaDB GTID Replication Strategy
=====================================
.. If section numbers are desired, unindent this
.. sectnum::
.. If a TOC is desired, unindent this
.. contents::
Global Transaction ID (GTID) Replication support was added during
the Kilo release for MySQL 5.6 and later. The equivalent for MySQL 5.6,
MariaDB 10, has a different implementation of GTID. By creating a similar
strategy implementation we could get support for GTID Replication for the
MariaDB 10 datastore.
Launchpad Blueprint:
https://blueprints.launchpad.net/trove/+spec/mariadb-gtid-replication
Problem Description
===================
In order to create a replica of a MariaDB instance you can only use
binary logs based replication. GTID replication was added as an alternative
for replication for MySQL 5.6, but it's not available
for the equivalent for it, MariaDB 10.
Proposed Change
===============
We would need to create
trove/trove/guestagent/strategies/replication/experimental/mariadb_gtid.py
in order to support replication for MariaDB.
The SQL issued to set a new empty slave server and replicate all of the
master's binlog from the start is as follows [2]_:
.. code-block:: none
CHANGE MASTER TO master_host="%(host)s", master_port=%(port)s, \
master_user="%(user)s", master_password="%(password)s", \
master_use_gtid=current_pos;
START SLAVE;
By default, the GTID position for a newly installed server is empty,
which makes the slave replicate from the start of the master's binlogs. [3]_
current_pos in the SQL query carries that position.
It doesn't differ too much on what is being done for MySQL [1]_,
but doing a refactoring might not be the best call right now since
it would add unnecessary complexity to the existing strategy.
Configuration
-------------
None
Database
--------
None
Public API
----------
None
Public API Security
-------------------
None
Python API
----------
None
CLI (python-troveclient)
------------------------
None
Internal API
------------
None
Guest Agent
-----------
None
Alternatives
------------
Don't support GTID-based Replication for MariaDB.
Dashboard Impact (UX)
=====================
None
Implementation
==============
Assignee(s)
-----------
Primary assignee:
vkmc
vgnbkr
Milestones
----------
Target Milestone for completion:
Mitaka-2
Work Items
----------
* Create MariaDB GTID Replication strategy
* Create integration tests for replication in MariaDB 10
Upgrade Implications
====================
None
Dependencies
============
None
Testing
=======
Integration tests will be added to cover this functionality.
Documentation Impact
====================
Docs explaining this new addition will be added.
References
==========
.. [1] https://github.com/openstack/trove/blob/master/trove/guestagent/strategies/replication/mysql_gtid.py
.. [2] https://mariadb.com/kb/en/mariadb/gtid/
.. [3] https://mariadb.com/kb/en/mariadb/gtid/
Appendix
========
None