• Marko Mäkelä's avatar
    MDEV-34483 Backup may copy unnecessarily much log · 852d42e9
    Marko Mäkelä authored
    In mariadb-backup --backup there are multiple mechanisms for ensuring that
    a sufficient amount of the InnoDB write-ahead log (ib_logfile0) is being
    copied at the end of the backup. The backup needs to include the latest
    committed transaction. While further transaction commits are blocked by
    BACKUP STAGE BLOCK_COMMIT, ongoing transactions may modify the database
    contents and write log records. We were unnecessarily copying such log,
    which would also cause further effort of rolling back incomplete
    transactions after the backup is restored.
    
    backup_wait_for_lsn(): Declare as static, and refactor some code
    to separate functions backup_wait_for_lsn_low() and
    backup_wait_timeout().
    
    backup_wait_for_commit_lsn(): A new function to determine the current
    LSN (within BACKUP STAGE BLOCK_COMMIT) and to wait for the log to be
    copied until that. Invoked by BackupStages::stage_block_commit().
    
    xtrabackup_backup_func(): Remove a condition that had already been
    checked by a caller of backup_wait_timeout().
    
    server_lsn_after_lock: Declare as a local variable in
    BackupStages::stage_block_ddl().
    
    log_copying_thread(), io_watching_thread(): Use metadata_last_lsn
    instead of metadata_to_lsn as the stop condition.
    
    BackupStages::stage_block_commit(): Ensure that the log tables
    (in particular, mysql.general_log) will have been copied before
    the BACKUP STAGE BLOCK_COMMIT is being followed by any further
    SQL statements.
    
    Reviewed by: Debarun Banerjee
    Tested by: Matthias Leich
    852d42e9
log_tables.result 1000 Bytes