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

InnoDB: Failing assertion: ut_strcmp(index->name, key->name)

    Details

      Description

      With our current setup (and also on other hardware, but same software versions)
      we keep getting this issue. This due a process of running a process to create a index table.

      [Note] InnoDB: Index for key no 1 mysql name 
       
      {code:java}
      CATALOG_PRODUCT_FLAT_1_TYPE_ID InnoDB name CATALOG_PRODUCT_FLAT_8_ATTRIBUTE_SET_ID for table app2/#sql-26be_424c6
       
      For table application1/#sql-26be_424c6 
      apr 25 13:07:10 db1 mysqld[9918]: 2018-04-25 13:07:10 0x7f8f35189700 InnoDB: Assertion failure in file /home/buildbot/buildbot/build/mariadb-10.2.14/storage/innobase/handler/ha_innodb.cc line 9631 
      apr 25 13:07:10 db1 mysqld[9918]: InnoDB: Failing assertion: ut_strcmp(index->name, key->name) == 0 
      apr 25 13:07:10 db1 mysqld[9918]: InnoDB: We intentionally generate a memory trap. 
      apr 25 13:07:10 db1 mysqld[9918]: InnoDB: Submit a detailed bug report to https://jira.mariadb.org/ 
      apr 25 13:07:10 db1 mysqld[9918]: InnoDB: If you get repeated assertion failures or crashes, even 
      apr 25 13:07:10 db1 mysqld[9918]: InnoDB: immediately after the mysqld startup, there may be 
      apr 25 13:07:10 db1 mysqld[9918]: InnoDB: corruption in the InnoDB tablespace. Please refer to 
      apr 25 13:07:10 db1 mysqld[9918]: InnoDB: https://mariadb.com/kb/en/library/xtradbinnodb-recovery-modes/ 
      apr 25 13:07:10 db1 mysqld[9918]: InnoDB: about forcing recovery. 
      apr 25 13:07:10 db1 mysqld[9918]: 180425 13:07:10 [ERROR] mysqld got signal 6 ; 
      apr 25 13:07:10 db1 mysqld[9918]: This could be because you hit a bug. It is also possible that this binary 
      apr 25 13:07:10 db1 mysqld[9918]: or one of the libraries it was linked against is corrupt, improperly built, 
      apr 25 13:07:10 db1 mysqld[9918]: or misconfigured. This error can also be caused by malfunctioning hardware. 
      apr 25 13:07:10 db1 mysqld[9918]: To report this bug, see https://mariadb.com/kb/en/reporting-bugs 
      apr 25 13:07:10 db1 mysqld[9918]: We will try our best to scrape up some info that will hopefully help 
      apr 25 13:07:10 db1 mysqld[9918]: diagnose the problem, but since we have already crashed, 
      apr 25 13:07:10 db1 mysqld[9918]:
      

      Mariadb server dies after this, and we need to recover manually to get things running again.

       
      {code:java}
      Maridb my.cnf settings: 
      {noformat}
      # MariaDB database server configuration file.
      #
      # You can copy this file to one of:
      # - "/etc/mysql/my.cnf" to set global options,
      # - "~/.my.cnf" to set user-specific options.
      # 
      # One can use all long options that the program supports.
      # Run program with --help to get a list of available options and with
      # --print-defaults to see which it would actually understand and use.
      #
      # For explanations see
      # http://dev.mysql.com/doc/mysql/en/server-system-variables.html
       
      # This will be passed to all mysql clients
      # It has been reported that passwords should be enclosed with ticks/quotes
      # escpecially if they contain "#" chars...
      # Remember to edit /etc/mysql/debian.cnf when changing the socket location.
      [client]
      port            = 3306
      socket          = /var/run/mysqld/mysqld.sock
       
      # Here is entries for some specific programs
      # The following values assume you have at least 32M ram
       
      # This was formally known as [safe_mysqld]. Both versions are currently parsed.
      [mysqld_safe]
      socket          = /var/run/mysqld/mysqld.sock
      nice            = 0
       
      [mysqld]
      #
      # * Basic Settings
      #
      user            = mysql
      pid-file        = /var/run/mysqld/mysqld.pid
      socket          = /var/run/mysqld/mysqld.sock
      port            = 3306
      basedir         = /usr
      datadir         = /var/lib/mysql
      tmpdir          = /tmp
      lc_messages_dir = /usr/share/mysql
      lc_messages     = en_US
      skip-external-locking
      #
      # Instead of skip-networking the default is now to listen only on
      # localhost which is more compatible and is not less secure.
      bind-address            = 0.0.0.0
      #
      # * Fine Tuning
      #
      max_connections         = 275
      connect_timeout         = 5
      #wait_timeout           = 300
      wait_timeout            = 7200
      #max_allowed_packet     = 16M
      max_allowed_packet      = 64M
      thread_cache_size       = 128
      sort_buffer_size        = 4M
      bulk_insert_buffer_size = 16M
      tmp_table_size          = 32M
      max_heap_table_size     = 32M
      #
      # * MyISAM
      #
      # This replaces the startup script and checks MyISAM tables if needed
      # the first time they are touched. On error, make copy and try a repair.
      myisam_recover_options = BACKUP
      key_buffer_size         = 128M
      #open-files-limit       = 2000
      table_open_cache        = 600
      myisam_sort_buffer_size = 512M
      concurrent_insert       = 2
      read_buffer_size        = 2M
      read_rnd_buffer_size    = 1M
      #
      # * Query Cache Configuration
      #
      # Cache only tiny result sets, so we can fit more in the query cache.
      query_cache_limit               = 128K
      query_cache_size                = 64M
      # for more write intensive setups, set to DEMAND or OFF
      #query_cache_type               = DEMAND
      #
      # * Logging and Replication
      #
      # Both location gets rotated by the cronjob.
      # Be aware that this log type is a performance killer.
      # As of 5.1 you can enable the log at runtime!
      #general_log_file        = /var/log/mysql/mysql.log
      #general_log             = 1
      #
      # Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf.
      #
      # we do want to know about network errors and such
      log_warnings            = 2
      #
      # Enable the slow query log to see queries with especially long duration
      #slow_query_log[={0|1}]
      slow_query_log_file     = /var/log/mysql/mariadb-slow.log
      long_query_time = 10
      #log_slow_rate_limit    = 1000
      log_slow_verbosity      = query_plan
       
      #log-queries-not-using-indexes
      #log_slow_admin_statements
      #
      # The following can be used as easy to replay backup logs or for replication.
      # note: if you are setting up a replication slave, see README.Debian about
      #       other settings you may need to change.
      #server-id              = 1
      #report_host            = master1
      #auto_increment_increment = 2
      #auto_increment_offset  = 1
      log_bin                 = /var/log/mysql/mariadb-bin
      log_bin_index           = /var/log/mysql/mariadb-bin.index
      # not fab for performance, but safer
      #sync_binlog            = 1
      expire_logs_days        = 10
      max_binlog_size         = 100M
      # slaves
      #relay_log              = /var/log/mysql/relay-bin
      #relay_log_index        = /var/log/mysql/relay-bin.index
      #relay_log_info_file    = /var/log/mysql/relay-bin.info
      #log_slave_updates
      #read_only
      #
      # If applications support it, this stricter sql_mode prevents some
      # mistakes like inserting invalid dates etc.
      #sql_mode               = NO_ENGINE_SUBSTITUTION,TRADITIONAL
      #
      # * InnoDB
      #
      # InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
      # Read the manual for more InnoDB related options. There are many!
      default_storage_engine  = InnoDB
      # you can't just change log file size, requires special procedure
      #innodb_log_file_size   = 50M
      innodb_buffer_pool_size = 24G
      innodb_log_buffer_size  = 32M
      innodb_file_per_table   = 1
      innodb_open_files       = 600
      innodb_io_capacity      = 400
      innodb_flush_method     = O_DIRECT
      #
      # * Security Features
      #
      # Read the manual, too, if you want chroot!
      # chroot = /var/lib/mysql/
      #
      # For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
      #
      # ssl-ca=/etc/mysql/cacert.pem
      # ssl-cert=/etc/mysql/server-cert.pem
      # ssl-key=/etc/mysql/server-key.pem
       
      #
      # * Galera-related settings
      #
      [galera]
      # Mandatory settings
      #wsrep_on=ON
      #wsrep_provider=
      #wsrep_cluster_address=
      #binlog_format=row
      #default_storage_engine=InnoDB
      #innodb_autoinc_lock_mode=2
      #
      # Allow server to accept connections on all interfaces.
      #
      #bind-address=0.0.0.0
      #
      # Optional setting
      #wsrep_slave_threads=1
      #innodb_flush_log_at_trx_commit=0
       
      [mysqldump]
      quick
      quote-names
      max_allowed_packet      = 16M
       
      [mysql]
      #no-auto-rehash # faster start of mysql but no tab completion
       
      [isamchk]
      key_buffer              = 16M
       
      #
      # * IMPORTANT: Additional settings that can override those from this file!
      #   The files must end with '.cnf', otherwise they'll be ignored.
      #
      !includedir /etc/mysql/conf.d/
       {noformat}
      
      

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                serg Sergei Golubchik
                Reporter:
                atlasgert ReporterG
              • Votes:
                3 Vote for this issue
                Watchers:
                15 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: