前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python】还怕MySQL数据库崩了?定时自动备份并发送邮箱

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

作者头像
偶尔敲代码
发布2024-01-17 14:12:59
2220
发布2024-01-17 14:12:59
举报
文章被收录于专栏:偶尔敲代码

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

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

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

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

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

代码语言:javascript
复制
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服务

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

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

代码语言:javascript
复制
# 发送邮件
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))

▼ 收到脚本发送的备份

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

▼ 计划任务设置

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 偶尔敲代码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档