Ru-b2-SQL-Backups/rub2
2023-07-30 16:08:05 -06:00

52 lines
1.5 KiB
Ruby
Executable File

#!/usr/bin/env ruby
# frozen_string_literal: true
require_relative 'mysql_database_config'
require_relative 'mysql_database_backup'
require_relative 'mysql_database_restore'
require_relative 'loggman'
config_file = 'config.json'
logger = Loggman.new
begin
if ARGV[0] == '--restore'
unless File.exist?(config_file)
logger.error('Configuration file does not exist. Please run the first time setup.')
exit 1
end
config = JSON.parse(File.read(config_file))
backup_dir = config['backup_dir'] || '.'
b2_enabled = config['b2_enabled'] || false
local_backups = Dir[File.join(backup_dir, '*_*.sql')]
remote_backups = b2_enabled ? `./b2 ls #{config['b2']['bucket_name']}`.split("\n") : []
if local_backups.empty? && remote_backups.empty?
logger.error('No backup found. Please ensure a backup exists in the local directory or in the B2 bucket (if B2 is enabled).')
exit 1
end
logger.info('Restoring backup...')
restore = MysqlDatabaseRestore.new(config_file, logger)
restore.restore
else
logger.info('Starting script.')
config_generator = MysqlDatabaseConfig.new(config_file)
config_generator.generate
logger.info("Generated MySQL database configuration file: #{config_file}.")
backup = MysqlDatabaseBackup.new(config_file, logger)
backup.backup
logger.info('Performed MySQL database backup.')
logger.info('Script completed successfully.')
end
rescue StandardError => e
logger.error("An error occurred: #{e.message}")
logger.debug("Backtrace: #{e.backtrace}")
end