Details

      Description

      The mysqlbinlog client program needs to be updated to support GTID.

      Here is a suggested list of things to be done:

      • The --start-position and --stop-position options should be able to take
        GTID positions; or maybe there should be new --start-gtid and --stop-gtid
        options. Like "--start-gtid=0-1-100,1-2-200,2-1-1000".
      • A GTID position means the point just after that GTID. So starting from
        GTID 0-1-100 and stopping at GTID 0-1-200, the first GTID output will
        probably be 0-1-101 and the last one 0-1-200. Note that if some domain is
        not specified in the position, it means to start from the begining,
        respectively stop immediately in that domain.
      • Starting and stopping GTID should work both with local files, and with
        --read-from-remote-server. For the latter, there are a couple of extra
        things that need doing in the master-slave protocol, see
        get_master_version_and_clock() in sql/slave.cc.
      • At the end of the dump, put these statements, to reduce the risk of those session variables incorrectly spilling into subsequent statements run in the same session:
        SET session.server_id = @@global.server_id,
        session.gtid_domain_id=@@global.gtid_domain_id;

      Probably some more things will come up during the work, but this looks like a
      reasonable start.

        Gliffy Diagrams

          Attachments

            Activity

            Hide
            knielsen Kristian Nielsen added a comment -

            This is actually a really good starter project for someone to get into working with the GTID code.

            The tasks requires getting some moderate understanding on how GTID works in general, but the actual code that needs to be worked on is fairly isolated and doesn't need to touch a majority of the GTID and replication stuff.

            Show
            knielsen Kristian Nielsen added a comment - This is actually a really good starter project for someone to get into working with the GTID code. The tasks requires getting some moderate understanding on how GTID works in general, but the actual code that needs to be worked on is fairly isolated and doesn't need to touch a majority of the GTID and replication stuff.
            Hide
            knielsen Kristian Nielsen added a comment -

            Some suggestions for getting started with this:

            I would recommend to start by reading the GTID documentation, and
            experimenting with all the relevant features described there, to familiarise
            yourself with it. The main thing is to understand the concept of GTID position
            and binlog order, and the relation to replication domains:

            https://mariadb.com/kb/en/mariadb/global-transaction-id/

            There are also some blog posts:

            http://kristiannielsen.livejournal.com/16826.html
            http://kristiannielsen.livejournal.com/17008.html
            http://kristiannielsen.livejournal.com/17238.html

            And similarly, familiarise yourself with mysqlbinlog and how it would make
            sense for it to be extended to support GTID.

            Then make a detailed proposal for how the user-visible interface of
            mysqlbinlog should be extended, and send it to the list for comments.

            The next step will be to understand the concept of binlog state
            (@@gtid_binlog_state), and how it is used to deal correctly with out-of-order
            GTID sequence numbers in binlogs. This is mostly an internal implementation
            detail, but necessary to be able to correctly identify starting and stopping
            GTID positions in all cases.

            Show
            knielsen Kristian Nielsen added a comment - Some suggestions for getting started with this: I would recommend to start by reading the GTID documentation, and experimenting with all the relevant features described there, to familiarise yourself with it. The main thing is to understand the concept of GTID position and binlog order, and the relation to replication domains: https://mariadb.com/kb/en/mariadb/global-transaction-id/ There are also some blog posts: http://kristiannielsen.livejournal.com/16826.html http://kristiannielsen.livejournal.com/17008.html http://kristiannielsen.livejournal.com/17238.html And similarly, familiarise yourself with mysqlbinlog and how it would make sense for it to be extended to support GTID. Then make a detailed proposal for how the user-visible interface of mysqlbinlog should be extended, and send it to the list for comments. The next step will be to understand the concept of binlog state (@@gtid_binlog_state), and how it is used to deal correctly with out-of-order GTID sequence numbers in binlogs. This is mostly an internal implementation detail, but necessary to be able to correctly identify starting and stopping GTID positions in all cases.

              People

              • Assignee:
                knielsen Kristian Nielsen
                Reporter:
                knielsen Kristian Nielsen
              • Votes:
                4 Vote for this issue
                Watchers:
                7 Start watching this issue

                Dates

                • Created:
                  Updated: