面试题答案
一键面试实现思路
- 数据库连接:使用
pymysql
库连接MySQL数据库,并通过DBUtils
库实现连接池,优化数据库连接,避免频繁创建和销毁连接带来的性能开销。 - 备份逻辑:利用
mysqldump
命令进行全量备份。在Python中通过subprocess
模块调用系统命令执行备份操作。 - 定时任务:使用
schedule
库来设置定时任务,每天凌晨2点执行备份操作。 - 文件命名:以当天日期命名备份文件,并存储在指定目录下。
关键代码
import pymysql
from dbutils.pooled_db import PooledDB
import subprocess
import schedule
import time
from datetime import datetime
# 数据库连接池配置
POOL = PooledDB(
creator=pymysql,
host='your_host',
port=3306,
user='your_user',
password='your_password',
database='your_database',
autocommit=True,
maxconnections=10
)
def backup_database():
# 获取当前日期作为文件名
date_str = datetime.now().strftime('%Y%m%d')
backup_file = f'/path/to/backup/{date_str}.sql'
# 从连接池获取连接
conn = POOL.connection()
try:
with conn.cursor() as cursor:
cursor.execute('SELECT VERSION()')
version = cursor.fetchone()[0]
print(f"Database version: {version}")
# 构建mysqldump命令
command = f'mysqldump -u your_user -pyour_password your_database > {backup_file}'
subprocess.run(command, shell=True, check=True)
print(f"Database backup successful: {backup_file}")
except subprocess.CalledProcessError as e:
print(f"Backup failed: {e}")
finally:
# 归还连接到连接池
conn.close()
# 设置定时任务,每天凌晨2点执行备份
schedule.every().day.at("02:00").do(backup_database)
while True:
schedule.run_pending()
time.sleep(1)
请将your_host
、your_user
、your_password
、your_database
和/path/to/backup
替换为实际的数据库主机、用户名、密码、数据库名以及备份文件存储路径。