Skip to content
  • Justin Jose's avatar
    ec2e6449
    BUG#26035544:'BINLOG_ERROR_ACTION' IS SET TO 'ABORT_SERVER'. · ec2e6449
    Justin Jose authored
                  HENCE ABORTING THE SERVER.
    
      Description:
      ------------
      When ‘gtid_purged’ is set to its max value, server stops
      after executing the next transaction with an error,
      'ERROR 1598 (HY000): Binary logging not possible.
        Message: An error occurred during flush stage of the
        commit.‘binlog_error_action’ is set to ‘ABORT_SERVER’.
        Hence aborting the server.'
     

      Analysis:
      ---------
      Reason for server is being stopped is due to max-out of
      GTID's integer component(GNO) while assigning new
      automatic GTID.
      - When gtid_purgedis set to
        CONCAT(@@GLOBAL.server_uuid,':1-9223372036854775805'),
        server updates gtid_executed with the same value.
      - During the second transaction, when assigning new
        automatic GTID, GTID(GNO) hits the
        max_limit(9223372036854775807).
      - Server returns error from get_automatic_gno().
        Then sets binlog_error_action=ABORT_SERVER.
      - Server then prints out the error message and triggers
        abort signal.
      - It is documented that the server shuts down immediately
        if the binary log cannot be written:
        'https://dev.mysql.com/doc/refman/8.0/en/
        replication-options-binary-log.html
        #sysvar_binlog_error_action'
      Hence, Server shutdown is intentional, and default
      behavior.
    
      Error message text "An error occurred during flush stage
      of the commit" is imprecise and a bit internal. It would
      be better to mention that the limit for generated GTIDs
      has been reached, and suggest how to fix the problem.
      There is also no warning message when system getting
      close to GTID max limit.
     

      Fix:
      ----
      1. Give a better error message when exhausting the range
         and acting according to
         binlog_error_action=ABORT_SERVER.
      2. Set GTID Threshold as 99% of the max GTID limit.
         Generate a warning message in the error log when,
          - auto generated GTID is above threshold.
          - setting gtid above threshold using SET gtid_purged.
      Point #2 is only implemented for mysql-8.0 onwards.
    
      RB#25130
    ec2e6449
    BUG#26035544:'BINLOG_ERROR_ACTION' IS SET TO 'ABORT_SERVER'.
    Justin Jose authored
                  HENCE ABORTING THE SERVER.
    
      Description:
      ------------
      When ‘gtid_purged’ is set to its max value, server stops
      after executing the next transaction with an error,
      'ERROR 1598 (HY000): Binary logging not possible.
        Message: An error occurred during flush stage of the
        commit.‘binlog_error_action’ is set to ‘ABORT_SERVER’.
        Hence aborting the server.'
     

      Analysis:
      ---------
      Reason for server is being stopped is due to max-out of
      GTID's integer component(GNO) while assigning new
      automatic GTID.
      - When gtid_purgedis set to
        CONCAT(@@GLOBAL.server_uuid,':1-9223372036854775805'),
        server updates gtid_executed with the same value.
      - During the second transaction, when assigning new
        automatic GTID, GTID(GNO) hits the
        max_limit(9223372036854775807).
      - Server returns error from get_automatic_gno().
        Then sets binlog_error_action=ABORT_SERVER.
      - Server then prints out the error message and triggers
        abort signal.
      - It is documented that the server shuts down immediately
        if the binary log cannot be written:
        'https://dev.mysql.com/doc/refman/8.0/en/
        replication-options-binary-log.html
        #sysvar_binlog_error_action'
      Hence, Server shutdown is intentional, and default
      behavior.
    
      Error message text "An error occurred during flush stage
      of the commit" is imprecise and a bit internal. It would
      be better to mention that the limit for generated GTIDs
      has been reached, and suggest how to fix the problem.
      There is also no warning message when system getting
      close to GTID max limit.
     

      Fix:
      ----
      1. Give a better error message when exhausting the range
         and acting according to
         binlog_error_action=ABORT_SERVER.
      2. Set GTID Threshold as 99% of the max GTID limit.
         Generate a warning message in the error log when,
          - auto generated GTID is above threshold.
          - setting gtid above threshold using SET gtid_purged.
      Point #2 is only implemented for mysql-8.0 onwards.
    
      RB#25130
Loading