python自动备份数据库快捷打开关闭3306远程

本文介绍了作者在经历数据库勒索事件后,如何使用Python脚本进行每日数据库备份,同时提供了一个快捷的方法在Linux命令行上打开和关闭3306端口,以保护数据库安全。脚本包括定时备份功能和信号处理以确保端口在程序关闭时自动关闭。
摘要由CSDN通过智能技术生成

序言

经历了上次的数据库勒索事件后一直想着怎么样有效的解决此问题,于是想到了,第一是修改密码难度,第二是将数据库的内容给备份下来。
但是在linux的命令行上去创建数据库和修改内容实在是太过于麻烦,于是想到了,使用python脚本来快捷打开和关闭端口,这样可以在进行维护时在本地就可以访问服务器的数据库,并且使用python脚本进行每日数据库的备份。

每日备份数据库

import os
import datetime
import time
def back():
    global x
    cmd = "mysqldump -u <你的账户> -p<你的密码> <数据库的名字> > DatabaseBack-"+str(datetime.datetime.now().date()) +".sql"
    # 例如,我使用root账户密码是000000来备份teacher数据库,实际的密码千万不要这么简单!!!详情请看前期VCR
    # cmd = "mysqldump -u root -p000000 teacher > teacherDatabaseBack-"+ str(x) +".sql"
    os.system(cmd)
    print("备份"+ str(datetime.datetime.now().date()) +" ok!")


def main():
    back()
    while(True):
        time.sleep(3600*24)
        # 没有去做时间的判定,直接使用了一天的时间进行休眠
        back()

if __name__ == "__main__":
    main()

其实最关键的也只是那句备份数据库的cmd命令,而python只是做了一个每隔一天时间备份一次,然后你需要在linux上使用nohup来进行后台运行

nohup python BackDatabase.py > output.log 2>&1 &

然后就会先进行一次备份,然后每天自动的进行备份啦,当过了很多天后,你的文件夹会是这个样子的
在这里插入图片描述
似乎前缀有点长,自己设置清晰的即可,至少很直观对吧?应该

Q&A

Q1:为什么不执行每十天,每一个月进行删除前期的?
A1:不是每个人会时时刻刻关注着自己的数据库是否崩了,所以,也许当你很久之后打开网站发现数据拉取失败时,你才会去看又出啥问题了,如果这个时候已经过了十天或者一个月,那么你的数据库彻底玩完。所以,对于个人使用,我仍然觉得每一天的都保存下来才是最棒的,sql文件并不大,也不用担心满盘。当然,看着心烦,你仍然可以选择时不时上去清理一下,请务必检查最新得文件中是有数据得,而不是空。或许应该进行一些判别,当数据库记录为空时则进行异常处理?

Q2:运行了就可以高枕无忧了吗?
A2:应该或许来说,是的,此方法保存了你每天数据库的变化,就算是损失你也最多会失去当天的数据,请注意,此程序以后台运行,当你重启linux后务必重新运行!!!

快捷打开3306远程

至少对于我来说,在linux上敲数据库创建的命令属实有点不必要,所以在本地访问linux的远程数据库就显得很有必要,但是3306端口随时打开会被爆破咋办?那就按需!

import os
import signal
import sys

openstr = "sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent"
# 打开3306端口
shutdownstr = "sudo firewall-cmd --zone=public --remove-port=3306/tcp --permanent"
# 关闭3306端口
reloadstr = "sudo firewall-cmd --reload"
# 重新载入配置
def open3306():
    os.system(openstr)
    os.system(reloadstr)
def shutdown3306():
    os.system(shutdownstr)
    os.system(reloadstr)
def listport():
    os.system("sudo firewall-cmd --list-ports")

def signal_handler(sig, frame):
    print("正在执行关闭数据库……")
    # 在这里执行您希望在用户按下Ctrl+C时执行的操作
    shutdown3306()
    sys.exit(0)

# 注册信号处理程序
signal.signal(signal.SIGINT, signal_handler)
def main():
    x = int(input("选择您的操作:1、打开3306端口。2、关闭3306端口。3、查看当前打开端口"))
    if(x==1):
        print("正在打开3306……")
        open3306()
        print("打开成功!")
    elif(x==2):
        print("正在关闭3306……")
        shutdown3306()
        print("关闭成功!")
    if(x==3):
        print("正在列出防火墙端口……")
        listport()

while(True):
    main()

没错这里还是简单得cmd配合python得脚本,然后在其中使用了 一个关闭信号,当你使用正常手段关闭此程序时,它将执行关闭端口得操作,确保了,你要是忘记关闭端口了,能够让端口在程序关闭时关闭。
有个问题,就是当ssh断开连接时,并不会触发这个信号,或许应该加上时间判别,当十分钟内未进行操作时,自动关闭端口,但是似乎又会显得麻烦,比如你在用idea远程调试数据库,时间肯定超过十分钟,一天?
虽然风险增加但是自由度更高了,所以,或许加上合适的时间判别能更好。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值