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

LP:925377 - Querying myisam table metadata while 'alter table..enable keys' is running may corrupt the table

    XMLWordPrintable

Details

    • Bug
    • Status: Closed (View Workflow)
    • Major
    • Resolution: Fixed
    • None
    • None
    • None

    Description

      In MariaDB 5.3.3 tables are reported as corrupted in the server log when metadata queries like "show table status like 'tablename'" or "select ..from information_schemna where table_schema = 'dbname'
      AND a.table_name LIKE 'tablename'" are run while indexes are getting rebuilt with "alter table tablename enable keys".

      I can consistently replicate the problem in MariaDB 5.3.3 (mariadb-5.3.3-rc-Linux-x86_64.tar.gz) running on RHEL 5.7 and RHEL 6.1.

      An error like

      [ERROR] mysqld: Table './dbname/tablename' is marked as crashed and should be repaired

      gets logged in the server log just as the metadata query is getting submitted. The query remains in a "Waiting for table" state and will return only after the "alter table enable keys" query ends.
      Running "check table" or "repair table" after "alter table enable keys" won't report any problems.

      Use this script to reproduce the problem:

      #!/bin/sh

      HOST=localhost
      PORT=3306
      USER=
      PASSWORD=
      DATABASE=test
      MYSQL_CLIENT=/usr/bin/mysql
      TABLE=reproducer
      DATAFILE=reproducer.txt

      function generate_file {
      echo "Generating data file $DATAFILE.."
      for i in

      {1..100000}


      do
      echo "$i,line number $i" >> $DATAFILE
      done
      }

      function run_cmd {
      echo "Running -> '$1'"
      $MYSQL_CLIENT --host=$HOST --user=$USER --password=$PASSWORD --database=$DATABASE --exec="$1"
      }

      generate_file

      run_cmd "drop table if exists $TABLE"
      run_cmd "create table $TABLE (id int, sometext varchar(100), primary key (id), index(sometext)) ENGINE=myisam"
      run_cmd "alter table $TABLE disable keys"
      run_cmd "load data local infile '$DATAFILE' into table $TABLE fields terminated by ','"

      run_cmd "alter table $TABLE enable keys" &
      sleep 1
      run_cmd "show table status like '$TABLE'"

      Attachments

        Activity

          People

            monty Michael Widenius
            andreilaki Andrei Laki (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 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.