之前给公司做的一个小软件数据库一直放在自己电脑上,用的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服务
看这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))
▼ 收到脚本发送的备份
我是本机去备份服务器上的数据库,所以在本机设置了个计划任务,指定每周某个工作日运行备份程序。程序调用的命令行,如果提示“不是内部或外部命令,也不是可运行的程序”,将起始路径添加进去就行。
▼ 计划任务设置
源码和mysqldump.exe 可公众号回复:MYSQL 获取,两个文件放同一目录运行。
- End -
更多精彩文章
点击下方名片关注【偶尔敲代码】