linux数据库备份脚本
部署服务器,需要安装个MySQL,所以有备份数据库数据的定时任务的需求:
写了两种方法,先记录下来,
方法一:
1.编写相应脚本:
time=$(date "+%Y%m%d")
mysqldump -u*** -p**** test > /data/test/test${time}.sql
2.编辑crontabding定时任务,然后重启;
1 0 * * * sh /data/test/test.sh (每天都执行)
方法二:
使用python脚本:
import os
import subprocess
import time
import datetime
DB_USERNAME = "****"
DB_PASSWORD = "****"
PATH = "/data/dbback/bk"
DEFAULT_DB = "law_sh"
def backDb(dbName):
if(dbName==None):
dbName=DEFAULT_DB
targetPath=PATH + os.sep + dbName + "-" + time.strftime('%Y-%m-%d',time.localtime()) + ".sql"
command="mysqldump -u" + DB_USERNAME + " -p" + DB_PASSWORD + " " + dbName + " >" + targetPath
print('execute command : ',command)
p=subprocess.Popen(command,shell=True,)
p.wait()
print("------------- db backup successful ---------")
delUselessFile()
print("------------- delete invalid backFile successful ---------")
return
def recover(fileName):
targetPath=PATH +os.sep+ fileName
dbName=fileName.split("-")[0]
command="mysql -u" + DB_USERNAME + " -p" + DB_PASSWORD + " " + dbName + " <" + targetPath
print('execute command : ',command)
p=subprocess.Popen(command,shell=True,)
p.wait()
print("------------- db recover successful ---------")
return
def delUselessFile():
print('where are you ?')
files=os.listdir(PATH)
for delFile in files:
if isOverDue(delFile):
os.remove(PATH+os.sep+delFile)
print(' delete file ',delFile)
def isOverDue(file):
cpDate=datetime.datetime.now()-datetime.timedelta(days=7)
dateString = file[file.find("-") + 1:file.find(".")]
fileDate= datetime.datetime.strptime(dateString,'%Y-%m-%d')
print(fileDate.strftime('%Y-%m-%d'),' -- ',cpDate.strftime('%Y-%m-%d'))
if(fileDate<cpDate):
return True
else:
return False
backDb('law_sh')
backDb('law_pd')
方法一更加简单,方法二增加成本,但对于这类基本不会改动的脚本,也关系不大,看自己的选择。

浙公网安备 33010602011771号