Automate Daily Backups of Settings Tables Records to an Archive Database

Check this against your version

This article was last updated on Feb 12, 2026, before Applicare 10.0 was released (Jun 19, 2026), and has not been re-checked for Applicare 10.0. Confirm the steps in your environment or contact Support.

Step 1: Before backing up the database, create the applicarearchive schema, execute the applicare-related sql's and ensure all tables are created.

Step 2: Connect to the database via MySQL Workbench, open a new SQL query tab, and execute the following command.

NOTE: Replace the <targetDB> placeholder with actual backup database name before running the query.

DELIMITER //
DROP PROCEDURE IF EXISTS applicarearchive.sp_MasterArchive_Settings //
CREATE PROCEDURE applicarearchive.sp_MasterArchive_Settings()
BEGIN
  DECLARE v_done INT DEFAULT FALSE;
  DECLARE v_table_name VARCHAR(255);
  DECLARE v_source_db VARCHAR(100) DEFAULT '<targetDB>';
  DECLARE v_backup_db VARCHAR(100) DEFAULT 'applicarearchive';
  DECLARE v_columns TEXT;

  -- Full Table List
  DECLARE table_cursor CURSOR FOR
      SELECT tname FROM (
          SELECT 'mg_dash_config' AS tname UNION SELECT 'mg_dash_exclude_api' UNION SELECT 'mg_dash_property' UNION
          SELECT 'server' UNION SELECT 'application' UNION SELECT 'settings' UNION SELECT 'user_settings' UNION
          SELECT 'configs_modified_time' UNION SELECT 'aop_config' UNION SELECT 'op_center_config' UNION
          SELECT 'eum_url' UNION SELECT 'monitor_config' UNION SELECT 'btm_txn_settings' UNION
          SELECT 'business_transaction' UNION SELECT 'web_transaction' UNION SELECT 'java_transaction' UNION
          SELECT 'processes_to_monitor' UNION SELECT 'lamaconfig' UNION SELECT 'lamaconfig_apps' UNION
          SELECT 'lamaconfig_snmpapps' UNION SELECT 'lama_errors' UNION SELECT 'lama_holidays' UNION
          SELECT 'apiconfig' UNION SELECT 'api_threshold' UNION SELECT 'api_exclude_api' UNION
          SELECT 'api_count_alert_config' UNION SELECT 'mbean_prop_identifier' UNION
          SELECT 'runtime_mbean_properties' UNION SELECT 'runtime_mbean_types' UNION
          SELECT 'mbean_prop_persisted' UNION SELECT 'alert_definitions' UNION SELECT 'reports_schedule' UNION
          SELECT 'reports_scheduler' UNION SELECT 'log_monitor' UNION SELECT 'log_alerts' UNION
          SELECT 'log_file' UNION SELECT 'log_patterns' UNION SELECT 'login_stat' UNION
          SELECT 'user_actions' UNION SELECT 'user_applications' UNION SELECT 'user_roles' UNION
          SELECT 'user_subscription' UNION SELECT 'users' UNION SELECT 'users_login_info' UNION
          SELECT 'ldap_user' UNION SELECT 'ldap_user_applications' UNION SELECT 'ldap_user_role' UNION
          SELECT 'single_sign_user' UNION SELECT 'single_sign_user_applications' UNION
          SELECT 'single_sign_user_role' UNION SELECT 'server_availability_config' UNION
          SELECT 'server_details' UNION SELECT 'server_domain' UNION SELECT 'session_info' UNION
          SELECT 'kubernetes_config' UNION SELECT 'aws_user'
      ) mapping;

  DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE;
  -- Ensure Log table exists
  CREATE TABLE IF NOT EXISTS applicarearchive.archive_log (
      id INT AUTO_INCREMENT PRIMARY KEY,
      table_name VARCHAR(255),
      rows_moved INT,
      sync_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
      status VARCHAR(255)
  );
  SET FOREIGN_KEY_CHECKS = 0;
  OPEN table_cursor;
  read_loop: LOOP
      FETCH table_cursor INTO v_table_name;
      IF v_done THEN LEAVE read_loop; END IF;
      -- RESET columns variable for each loop
      SET v_columns = NULL;
      -- FIND MATCHING COLUMNS (Using LOWER for maximum compatibility)
      SELECT GROUP_CONCAT(CONCAT('`', src.COLUMN_NAME, '`')) INTO v_columns
      FROM information_schema.columns src
      WHERE src.table_schema = v_source_db
        AND LOWER(src.table_name) = LOWER(v_table_name)
        AND src.COLUMN_NAME IN (
            SELECT COLUMN_NAME
            FROM information_schema.columns
            WHERE table_schema = v_backup_db
              AND LOWER(table_name) = LOWER(v_table_name)
        );
      IF v_columns IS NOT NULL AND v_columns != '' THEN
          -- 1. TRUNCATE archive
          SET @truncate_sql = CONCAT('TRUNCATE TABLE `', v_backup_db, '`.`', v_table_name, '`');
          PREPARE t_stmt FROM @truncate_sql;
          EXECUTE t_stmt;
          DEALLOCATE PREPARE t_stmt;
          -- 2. INSERT fresh data
          SET @move_sql = CONCAT(
              'INSERT INTO `', v_backup_db, '`.`', v_table_name, '` (', v_columns, ') ',
              ' SELECT ', v_columns, ' FROM `', v_source_db, '`.`', v_table_name, '`'
          );
          PREPARE m_stmt FROM @move_sql;
          EXECUTE m_stmt;
          SET @rows_affected = ROW_COUNT();
          DEALLOCATE PREPARE m_stmt;
          INSERT INTO applicarearchive.archive_log (table_name, rows_moved, status)
          VALUES (v_table_name, @rows_affected, 'SUCCESS');
      ELSE
          -- DETAILED ERROR LOGGING
          INSERT INTO applicarearchive.archive_log (table_name, rows_moved, status)
          VALUES (v_table_name, 0, 'FAIL: Could not find matching table/columns in Archive');
      END IF;
  END LOOP;
  CLOSE table_cursor;
  SET FOREIGN_KEY_CHECKS = 1;
END //
DELIMITER ;

NOTE: The query above only backs up data from the settings tables, rather than the entire database.

Step 3: Run the query below to enable the MySQL Event Scheduler and schedule the sp_BatchArchiveYesterday procedure to run daily at 1:00 AM.

SET GLOBAL event_scheduler = ON;
DELIMITER //
DROP EVENT IF EXISTS applicarearchive.setting_table_daily_archive_at_1am; //
CREATE EVENT applicarearchive.setting_table_daily_archive_at_1am
ON SCHEDULE EVERY 1 DAY
STARTS (CURRENT_DATE + INTERVAL 1 DAY + INTERVAL 1 HOUR)
DO
  BEGIN
    TRUNCATE TABLE applicarearchive.archive_log;
    CALL applicarearchive.sp_MasterArchive_Settings();
  END //

DELIMITER ;

To modify the scheduled time, first execute the query below to drop the existing event, then re-create it with your desired schedule.

DROP EVENT IF EXISTS applicarearchivesettings.daily_archive_at_1am;

To change the time to 8:00 PM, We need to adjust the INTERVAL in the STARTS clause. Since MySQL uses a 24-hour format, 8:00 PM is 20 hours.

E.g.

SET GLOBAL event_scheduler = ON;
DELIMITER //
DROP EVENT IF EXISTS applicarearchive.setting_table_daily_archive_at_8pm //
CREATE EVENT applicarearchive.setting_table_daily_archive_at_8pm
ON SCHEDULE EVERY 1 DAY
STARTS (CURRENT_DATE + INTERVAL 1 DAY + INTERVAL 20 HOUR)
DO
  BEGIN
    TRUNCATE TABLE applicarearchive.archive_log;
    CALL applicarearchive.sp_MasterArchive_Settings();
  END //

DELIMITER ;

NOTE: Execute the below query to confirm the event is saved in the system.

SHOW EVENTS FROM applicarearchive;

Screenshot 1 — Automate Daily Backups of Settings Tables Records to an Archive Database

Step 4: We need to create the archive_log table in your archive database. This table will record which table was processed, how many rows were moved, and exactly when it finished.

CREATE TABLE IF NOT EXISTS applicarearchive.archive_log (
    id INT AUTO_INCREMENT PRIMARY KEY,
    table_name VARCHAR(255),
    rows_moved INT,
    finish_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    status VARCHAR(255)
);

Explanation of the Columns:

  • id: A unique number for every entry.

  • table_name: Records the table name (and the column name used, e.g., oshistory_detail [dt]).

  • rows_moved: The number of records successfully transferred for "Yesterday".

  • finish_time: The exact date and time the backup for that specific table completed.

  • status: The status column is your best friend. If a table fails because of a schema change (like a missing column in the archive), you will see "FAIL: Could not find matching table/columns" immediately.

Step 5: Execute query to see the results. It will show you the most recent backups at the top.

SELECT * FROM applicarearchive.archive_log ORDER BY finish_time DESC;

Screenshot 2 — Automate Daily Backups of Settings Tables Records to an Archive Database

Was this article helpful?

Votes, comments and follows are kept by Zendesk, so they need a Help Center account. These buttons open this article there.

Opens Zendesk · needs internet and sign-in

Still stuck? Contact support