1. 24 Feb, 2012 1 commit
    • Luis Soares's avatar
      Bug#13693012: SLAVE CRASHING ON INSERT STATEMENT WITH MERGE TABLE · 580664b2
      Luis Soares authored
      PROBLEM: After WL 4144, when using MyISAM Merge tables, the routine
      open_and_lock_tables will append to the list of tables to lock, the
      base tables that make up the MERGE table. This has two side-effects in
      replication: 
      
        1. On the master side, we log additional table maps for the base
           tables, since they appear in the list of locked tables, even
           though we don't really use them at the slave.
      
        2. On the slave side, when opening a MERGE table while applying a
           ROW event, additional tables are appended to the list of tables
           to lock.
      
      Side-effect #1 is not harmful. It's just that when using MyISAM Merge
      tables a few table maps more may be logged.
      
      Side-effect #2, is harmful, because the list rli->tables_to_lock is an
      extended structure from TABLE_LIST in which the extra fields are
      filled from the table maps that are processed. Since
      open_and_lock_tables appends tables to the list after all table map
      events have been processed we end up with entries without
      replication/table map data on them. Thus when trying to access that
      info for these extra tables, the server will crash.
      
      SOLUTION: We fix side-effect #2 by making sure that we access the
      replication part of the structure for those in the list that were
      accounted for when processing the correspondent table map events. All
      in all, we never go beyond rli->tables_to_lock_count.
      
      We also deploy an assertion when clearing rli->tables_to_lock, making
      sure that the base tables are not in the list anymore (were closed in
      close_thread_tables).
      580664b2
  2. 10 Feb, 2012 7 commits
  3. 07 Feb, 2012 2 commits
  4. 06 Feb, 2012 7 commits
    • Georgi Kodinov's avatar
    • Georgi Kodinov's avatar
    • Georgi Kodinov's avatar
      merge mysql-5.5->mysql-5.5-security · 91c1c930
      Georgi Kodinov authored
      91c1c930
    • Georgi Kodinov's avatar
      merged mysql-5.1->mysql-5.1-security · d29ae491
      Georgi Kodinov authored
      d29ae491
    • Georgi Kodinov's avatar
      merged mysql-5.0->mysql-5.0-security · 8a74ba24
      Georgi Kodinov authored
      8a74ba24
    • Vasil Dimov's avatar
      Merge mysql-5.1 -> mysql-5.5 · 56e3f68c
      Vasil Dimov authored
      The actual Bug#11754376 does not exist in MySQL 5.5 because at startup
      we drop entries for temporary tables from InnoDB dictionary cache (only
      if ROW_FORMAT is not REDUNDANT). But nevertheless the bug in
      normalize_table_name_low() is present so we fix it.
      56e3f68c
    • Vasil Dimov's avatar
      Fix Bug#11754376 45976: INNODB LOST FILES FOR TEMPORARY TABLES ON · 1c4fd3bb
      Vasil Dimov authored
      GRACEFUL SHUTDOWN
      
      During startup mysql picks up .frm files from the tmpdir directory and
      tries to drop those tables in the storage engine.
      
      The problem is that when tmpdir ends in / then ha_innobase::delete_table()
      is passed a string like "/var/tmp//#sql123", then it wrongly normalizes it
      to "/#sql123" and calls row_drop_table_for_mysql() which of course fails
      to delete the table entry from the InnoDB dictionary cache.
      ha_innobase::delete_table() returns an error but nevertheless mysql wipes
      away the .frm file and the entry in the InnoDB dictionary cache remains
      orphaned with no easy way to remove it.
      
      The "no easy" way to remove it is to create a similar temporary table again,
      copy its .frm file to tmpdir under "#sql123.frm" and restart mysqld with
      tmpdir=/var/tmp (no trailing slash) - this way mysql will pick the .frm file
      after restart and will try to issue drop table for "/var/tmp/#sql123"
      (notice do double slash), ha_innobase::delete_table() will normalize it to
      "tmp/#sql123" and row_drop_table_for_mysql() will successfully remove the
      table entry from the dictionary cache.
      
      The solution is to fix normalize_table_name_low() to normalize things like
      "/var/tmp//table" correctly to "tmp/table".
      
      This patch also adds a test function which invokes
      normalize_table_name_low() with various inputs to make sure it works
      correctly and a mtr test that calls this test function.
      
      Reviewed by:	Marko (http://bur03.no.oracle.com/rb/r/929/)
      1c4fd3bb
  5. 05 Feb, 2012 1 commit
  6. 03 Feb, 2012 4 commits
  7. 02 Feb, 2012 12 commits
  8. 01 Feb, 2012 1 commit
  9. 31 Jan, 2012 5 commits