import mysql.connector
import subprocess
import os
from datetime import datetime
# Configuration
LOCAL_DB_CONFIG = {
‘user’: ‘*’,
‘password’: ‘*’,
‘host’: ‘*’,
‘database’: ‘*’
}
CLOUD_DB_CONFIG = {
‘user’: ‘*’,
‘password’: ‘*’,
‘host’: ‘*’,
‘database’: ‘*’
}
# BACKUP_DIR = ‘/home/changhee/wp63_local_sqls’ #development
BACKUP_DIR = ‘/data/mariadb_backup/wordpress63_homeserver1_sqls’ #production
def create_backup():
date = datetime.now().strftime(“%Y%m%d“)
backup_file = f“{BACKUP_DIR}/{LOCAL_DB_CONFIG[‘database’]}–{date}.sql”
os.makedirs(BACKUP_DIR, exist_ok=True)
dump_command = [
‘mysqldump’,
f“-u{LOCAL_DB_CONFIG[‘user’]}“,
f“-p{LOCAL_DB_CONFIG[‘password’]}“,
LOCAL_DB_CONFIG[‘database’]
]
with open(backup_file, ‘w’) as f:
result = subprocess.run(dump_command, stdout=f)
return result.returncode, backup_file
def sync_to_cloud(backup_file):
import_command = [
‘mysql’,
f“-h{CLOUD_DB_CONFIG[‘host’]}“,
f“-u{CLOUD_DB_CONFIG[‘user’]}“,
f“-p{CLOUD_DB_CONFIG[‘password’]}“,
CLOUD_DB_CONFIG[‘database’]
]
with open(backup_file, ‘r’) as f:
result = subprocess.run(import_command, stdin=f)
return result.returncode
def chmod_directory(directory_path): # Alternative method using os.chmod
# Method 1: Using subprocess with sudo chmod command (recommended for Linux/Unix)
result = subprocess.run([‘sudo’,‘chmod’, ‘-R’, ‘766’, directory_path])
return result.returncode
def verify_permissions(directory_path):
result = subprocess.run(
[‘ls’, ‘-lR’, directory_path],
capture_output=True,
text=True
)
return result.returncode
def cleanup_old_backups(backup_valid_days):
backup_pattern = ‘wordpress63_homeserver1-20*.sql’
result = subprocess.run([‘find’, BACKUP_DIR, ‘-name’, backup_pattern, ‘-type’, ‘f’, ‘-mtime’, backup_valid_days, ‘-delete’])
return result.returncode
if __name__ == “__main__”:
try:
result = chmod_directory(BACKUP_DIR) # run with sudo command
if(int(result) == 0):
print(f“Directory : {BACKUP_DIR} permissions changed successfully.”)
else:
print(f“Directory : {BACKUP_DIR} permissions is failed to change”)
result, backup_file = create_backup()
if(int(result) == 0):
print(f“Local database dump : {backup_file} created successfully.”)
result = sync_to_cloud(backup_file)
if(int(result) == 0):
print(f“Database synced from {LOCAL_DB_CONFIG[‘host’]}:{LOCAL_DB_CONFIG[‘database’]} to {CLOUD_DB_CONFIG[‘host’]}:{CLOUD_DB_CONFIG[‘database’]} successfully.”)
else:
print(f“Database synced from {LOCAL_DB_CONFIG[‘host’]}:{LOCAL_DB_CONFIG[‘database’]} to {CLOUD_DB_CONFIG[‘host’]}:{CLOUD_DB_CONFIG[‘database’]} failed.”)
else:
print(f“Local database dump : {backup_file} created failed.”)
valid_expired_days = str(‘+14’)
result = cleanup_old_backups(valid_expired_days)
if(int(result) == 0):
print(f“Old backups {valid_expired_days} deleted successfully.”)
except Exception as e:
print(f“An error occurred: {e}“)