• Luis Soares's avatar
    BUG#11745230: 12133: MASTER.INDEX FILE KEEPS MYSQLD FROM STARTING IF · eec4836a
    Luis Soares authored
                  BIN LOG HAS BEEN MOVED 
    
    When moving the binary/relay log files from one location to
    another and restarting the server with a different log-bin or
    relay-log paths, would cause the startup process to abort. The
    root cause was that the server would not be able to find the log
    files because it would consider old paths for entries in the
    index file instead of the new location.  What's even worse, the
    relative paths would not be considered relative to the path
    provided in log-bin and relay-log, but to mysql_data_dir.
          
    We fix the cases where the server contains relative paths. When
    the server is reading from the index file, it checks whether the
    entry contains relative paths. If it does, we replace it with the
    absolute path set in log-bin/relay-log option. Absolute paths
    remain unchanged and the index must be manually edited to
    consider the new log-bin and/or relay-log path (this should be
    documented). This is a fix for a GA version, that does not break
    behavior (that much).
          
    For development versions, we should go with Zhenxing's approach 
    that removes paths altogether from index files.
    
    mysql-test/include/begin_include_file.inc:
      Added parameter to keep the begin_include_file.inc silent. Useful when 
      including scripts that contain platform dependent parameters, for example:
      
      --let $rpl_server_parameters=--log-bin=$tmpdir/slave-bin --relay-log=$tmpdir/slave-relay-bin
      --let $keep_include_silent=1
      source include/rpl_start_server.inc;
      --let $keep_include_silent=0
      
      We want the paths ($tmpdir/slave-bin and $tmpdir/slave-relay-bin) not to be in the 
      result file.
    mysql-test/suite/rpl/t/rpl_binlog_index.test:
      Test case.
    sql/log.cc:
      When finding the corresponding log entry in the index file, we first 
      normalize the paths before doing the comparison. This will make relative
      paths to be turned into absolute paths (based on the opt_bin_logname or
      opt_relay_logname) and then compared against also, expanded paths entered, 
      through CHANGE MASTER for instance.
    sql/log.h:
      Added normalize_binlog_name, which turns relative paths, into absolute paths
      given the parameter: is_relay_log ? opt_relay_logname : opt_bin_logname .
    sql/mysqld.cc:
      Exposing opt_bin_logname.
    sql/mysqld.h:
      Exposing opt_bin_logname.
    eec4836a
log.cc 190 KB