【Python】还怕MySQL数据库崩了?定时自动备份并发送邮箱

之前给公司做的一个小软件数据库一直放在自己电脑上,用的MySQL存储数据,让我的电脑运行速度越来越拉胯了,下决心把数据库搬到公司服务器上去了。

平常数据量不大,我也懒得维护,只担心数据库崩了就惨淡了。因此,速速写了个备份脚本,备份到本地的同时,也发送一份到邮箱确保万无一失。(注:根据数据重要程度自行决定是否发送到邮箱)

原理很简单,用命令行执行MySQL自带的 mysqldump.exe。因想增加日期备注和发送邮件,就无法单纯用命令行完成了,还是用python来实现。

主要用到两个依赖库 pymysql 和 email,分别用于数据库连接和邮件发送。

数据库连接和备份代码如下,如果是数据库所在电脑执行脚本,可不需要IP地址。

host = "42.168.1.6"  # 远程服务器IP地址
port = 3306  # MySQL默认端口号为3306
user = "数据库用户名"
password = "数据库密码"
database = "数据库名称"


backup_dir = "F:/code_back/"# 备份目录,需保证目录存在
backup_file = "xxxx_" + time.strftime("%Y%m%d", time.localtime()) + ".sql"# 备份文件名:xxxx_+数字日期格式.sql
backup_cmd = f"mysqldump -h {host} -P {port} -u {user} -p{password} {database} > {backup_dir}{backup_file}"
#backup_cmd = f"mysqldump -u {user} -p{password} {database} > {backup_dir}{backup_file}" #如果是本地数据库就用这行


os.system(backup_cmd)# 执行备份命令

以上就可以实现数据库备份到指定文件夹了。

接下来是发送邮件,将备份文件通过附件的形式发送到指定邮箱。

发件邮箱需开通SMTP服务,一般在邮箱设置里,建议使用授权码,这样不需要邮箱登录密码,保护邮箱安全。

▼ 163的SMTP服务

d4621f47208e590e13c484f489eee5c9.jpeg

看这SMTP服务,想起15年前流行的键盘记录和各种木马哈哈。

在代码中填入发件邮箱、发件邮箱授权码、收件邮箱就可以了。

# 发送邮件
sender = "xxxxx@163.com"
receiver = "yyyyy@qq.com"
subject = "备份-" + time.strftime("%Y%m%d", time.localtime())
smtp_server = "smtp.163.com"  # SMTP服务器地址
smtp_port = 25  # SMTP服务器端口号
smtp_user = sender  # 发件人邮箱地址
smtp_password = "xxxxx"  # 发件人邮箱授权码
content = "程序备份文件。"# 邮件正文
attachment = f"{backup_dir}{backup_file}"# 邮件附件


# 创建一个带附件的邮件对象
message = MIMEMultipart()
message["From"] = sender
message["To"] = receiver
message["Subject"] = subject


# 添加邮件正文
text = MIMEText(content)
message.attach(text)


# 添加邮件附件
with open(attachment, "rb") as file:
    attachment = MIMEApplication(file.read(), _subtype="sql")
    attachment.add_header("Content-Disposition", "attachment", filename=backup_file)
    message.attach(attachment)


# 连接SMTP服务器并发送邮件
try:
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.starttls()
    server.login(smtp_user, smtp_password)
    server.sendmail(sender, receiver, message.as_string())
    server.quit()


    print("邮件发送成功")
except Exception as e:
    print("邮件发送失败:", str(e))

▼ 收到脚本发送的备份

7f20c6ecd15da34f7a437161b905aa0b.jpeg

我是本机去备份服务器上的数据库,所以在本机设置了个计划任务,指定每周某个工作日运行备份程序。程序调用的命令行,如果提示“不是内部或外部命令,也不是可运行的程序”,将起始路径添加进去就行。

▼ 计划任务设置

62983fa2564cd00801cfcbf180b144bc.jpeg

源码和mysqldump.exe 可公众号回复:MYSQL  获取,两个文件放同一目录运行。

- End -

更多精彩文章

点击下方名片关注【偶尔敲代码】

adc58e4e4a6024f24f65fd4f6a84f748.gif

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值