• Marko Mäkelä's avatar
    MDEV-25854: Remove garbage tables after restoring a backup · f778a5d5
    Marko Mäkelä authored
    In commit 1c5ae991 (MDEV-25666)
    we had changed Mariabackup so that it would no longer skip files
    whose names start with #sql. This turned out to be wrong.
    Because operations on such named files are not protected by any
    locks in the server, it is not safe to copy them.
    
    Not copying the files may make the InnoDB data dictionary
    inconsistent with the file system. So, we must do something
    in InnoDB to adjust for that.
    
    If InnoDB is being started up without the redo log (ib_logfile0)
    or with a zero-length log file, we will assume that the server
    was restored from a backup, and adjust things as follows:
    
    dict_check_sys_tables(), fil_ibd_open(): Do not complain about
    missing #sql files if they would be dropped a little later.
    
    dict_stats_update_if_needed(): Never add #sql tables to
    the recomputing queue. This avoids a potential race condition when
    dropping the garbage tables.
    
    drop_garbage_tables_after_restore(): Try to drop any garbage tables.
    
    innodb_ddl_recovery_done(): Invoke drop_garbage_tables_after_restore()
    if srv_start_after_restore (a new flag) was set and we are not in
    read-only mode (innodb_read_only=ON or innodb_force_recovery>3).
    
    The tests and dbug_mariabackup_event() instrumentation
    were developed by Vladislav Vaintroub, who also reviewed this.
    f778a5d5
alter_copy_excluded.opt 31 Bytes