Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-40318

MIXED binlog format does not switch an unsafe-for-SBR dynamic SQL (via PS) to ROW logging, causing replica divergence

    XMLWordPrintable

Details

    • Not for Release Notes
    • Q3/2026 Server Maintenance

    Description

      MIXED binlog format fails to ROW-switch an unsafe-for-SBR dynamic SQL statement via PS (e.g: containing UUID()), causing replica divergence.

      MTR Test case

      --source include/have_innodb.inc
      --source include/have_binlog_format_mixed.inc
      --source include/master-slave.inc
       
      connection master;
      CREATE TABLE td (id INT PRIMARY KEY AUTO_INCREMENT,
                       ts_now DATETIME(6), rnd DOUBLE, uu CHAR(36), usr_var INT) ENGINE=InnoDB;
       
      DELIMITER $$;
      CREATE FUNCTION f_nd(seed INT) RETURNS INT
      BEGIN
        SET @uv = seed * 7;
        EXECUTE IMMEDIATE 'INSERT INTO td (ts_now, rnd, uu, usr_var)
                           VALUES (NOW(6), RAND(?), UUID(), @uv)'
          USING seed;
        RETURN seed;
      END $$
      CREATE PROCEDURE p_nd(seed INT)
      BEGIN
        DECLARE r INT DEFAULT f_nd(seed);
      END $$
      DELIMITER ;$$
       
      --let $i = 1
      while ($i <= 5)
      {
        --eval CALL p_nd($i)
        --inc $i
      }
       
      SELECT * FROM td;
       
      --sync_slave_with_master
      --echo # ---- MIXED should NOT diverge ----
       
      connection slave;
      SELECT * FROM td;
       
       
      connection master;
      DROP PROCEDURE p_nd;
      DROP FUNCTION f_nd;
      DROP TABLE td;
      --sync_slave_with_master
      --source include/rpl_end.inc
      

      MTR Out

      connection master;
      CREATE TABLE td (id INT PRIMARY KEY AUTO_INCREMENT,
      ts_now DATETIME(6), rnd DOUBLE, uu CHAR(36), usr_var INT) ENGINE=InnoDB;
      CREATE FUNCTION f_nd(seed INT) RETURNS INT
      BEGIN
      SET @uv = seed * 7;
      EXECUTE IMMEDIATE 'INSERT INTO td (ts_now, rnd, uu, usr_var)
                           VALUES (NOW(6), RAND(?), UUID(), @uv)'
          USING seed;
      RETURN seed;
      END $$
      CREATE PROCEDURE p_nd(seed INT)
      BEGIN
      DECLARE r INT DEFAULT f_nd(seed);
      END $$
      CALL p_nd(1);
      CALL p_nd(2);
      CALL p_nd(3);
      CALL p_nd(4);
      CALL p_nd(5);
      SELECT * FROM td;
      id	ts_now	rnd	uu	usr_var
      1	2026-07-09 10:30:48.795449	0.40540353712197724	1b2ed470-7b68-11f1-98dd-001a4a160140	7
      2	2026-07-09 10:30:48.807406	0.6555866465490187	1b2efc87-7b68-11f1-98dd-001a4a160140	14
      3	2026-07-09 10:30:48.808360	0.9057697559760601	1b2f2a22-7b68-11f1-98dd-001a4a160140	21
      4	2026-07-09 10:30:48.809334	0.15595286540310166	1b2f47ff-7b68-11f1-98dd-001a4a160140	28
      5	2026-07-09 10:30:48.810343	0.40613597483014313	1b2f6ecb-7b68-11f1-98dd-001a4a160140	35
      connection slave;
      # ---- MIXED should NOT diverge ----
      connection slave;
      SELECT * FROM td;
      id	ts_now	rnd	uu	usr_var
      1	2026-07-09 10:30:48.795449	0.40540353712197724	1b3092e9-7b68-11f1-9911-001a4a160140	7
      2	2026-07-09 10:30:48.807406	0.6555866465490187	1b30b55e-7b68-11f1-9911-001a4a160140	14
      3	2026-07-09 10:30:48.808360	0.9057697559760601	1b30e962-7b68-11f1-9911-001a4a160140	21
      4	2026-07-09 10:30:48.809334	0.15595286540310166	1b3100e0-7b68-11f1-9911-001a4a160140	28
      5	2026-07-09 10:30:48.810343	0.40613597483014313	1b311486-7b68-11f1-9911-001a4a160140	35
      connection master;
      DROP PROCEDURE p_nd;
      DROP FUNCTION f_nd;
      DROP TABLE td;
      connection slave;
      include/rpl_end.inc
      

      Attachments

        Issue Links

          Activity

            People

              bar Alexander Barkov
              ramesh Ramesh Sivaraman
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:

                Time Tracking

                  Estimated:
                  Original Estimate - 4.7h Original Estimate - 4.7h
                  4.7h
                  Remaining:
                  Time Spent - 0.5h Remaining Estimate - 4.7h
                  4.7h
                  Logged:
                  Time Spent - 0.5h Remaining Estimate - 4.7h
                  0.5h

                  Git Integration

                    Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.