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

Failed CREATE OR REPLACE TEMPORARY not written into binary log makes data on master and slave diverge

    XMLWordPrintable

Details

    Description

      --source include/have_partition.inc
      --source include/have_binlog_format_mixed.inc
      --source include/master-slave.inc
       
      CREATE TEMPORARY TABLE t1 (a INT NOT NULL);
      --error ER_NO_SUCH_TABLE
      LOAD DATA INFILE 'x' INTO TABLE x;
      --error ER_PARTITION_NO_TEMPORARY
      CREATE OR REPLACE TEMPORARY TABLE t1 (x INT) PARTITION BY HASH(x);
      CREATE TABLE t1 (b INT);
      INSERT INTO t1 VALUES (NULL);
       
      --sync_slave_with_master
       
      # Cleanup
      --connection master
      DROP TABLE t1;
      --source include/rpl_end.inc
      

      10.4 3568427d

      Last_Errno	1048
      Last_Error	Error 'Column 'a' cannot be null' on query. Default database: 'test'. Query: 'INSERT INTO t1 VALUES (NULL)'
      

      The problem starts when CREATE OR REPLACE TEMPORARY TABLE doesn't get written to the binary log. Somehow, the previous failure affects it. So, the slave still has the temporary table with a INT NOT NULL, while the master has the table with b INT [NULL], hence the failure.

      Partitioning doesn't play important role here, there are other limitations on temporary tables which cause the same effect, e.g. ROW_FORMAT=COMPRESSED with InnoDB.

      Attachments

        Activity

          People

            sujatha.sivakumar Sujatha Sivakumar (Inactive)
            elenst Elena Stepanova
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Git Integration

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