python开发数据库_python实现数据库增量备份

一、目的

每天将数据库A中某些表的数据增量备份到数据库B中相应的表中

二、应用场景

做了个运维服务管理平台,其中有一部分是对公司各游戏下载次数的统计。因为部分游戏下载服务器是在外网(其余通过CDN提供下载),统计的方法是直接在游戏下载服务器上每天执行脚本分析下载日志,然后将各游戏每天的下载次数数据插入到外网的一个数据库。运维服务管理平台web服务端部署在内网。

发现问题:运维服务管理平台因为是使用外网的数据,导致访问速度比较慢

解决方案:运维服务管理平台使用内网数据库,将外网数据库中每天的游戏更新次数数据,每天增量插入到内网的数据库中。

三、具体步骤

1、编写python脚本,查询外网数据库中相应表中昨天的数据,然后插入到内网数据库中,代码如下# coding=utf-8

"""

#Author: blackholll

#Email: blackholll@163.com

#Created: 2014-04-16

#Purpose: sync increment date between two datebases

#Tables: ywreport_gameupdate,ywreport_lobbylogintimes

"""

import MySQLdb

import datetime

todaydate = datetime.datetime.now() #获取今天的日期

yesterdaydate = str((todaydate-datetime.timedelta(days=1)).date()) #获取昨天的日期

#连接数据库

try:

connfrom = MySQLdb.connect(host='1.1.1.1',user='blackholll',passwd='123456',db='dbname',port=3306,charset='utf8')

curfrom = connfrom.cursor()

connto = MySQLdb.connect(host='192.168.1.6',user='blackholll',passwd='123456',db='dbname2',port=3306,charset='utf8')

curto = connto.cursor()

#for table ywreport_gameupdate

sqls= "select *from ywreport_gameupdate where date='%s'"%yesterdaydate #查询昨天的数据

curfrom.execute("select *from ywreport_gameupdate where date='%s'"%yesterdaydate)

rows = curfrom.fetchall()

for row in rows:

print row

sqlstr = "insert into ywreport_gameupdate(id,gameid,date,plateform_id,subarea,server_id,updates,operations,uptype_id,areaid) values(%d,'%s','%s','%d','%d',%d,%d,'%s',%d,%d)"%(row[0],row[1],row[2],row[3],row[4],row[5],row[6],row[7],row[8],row[9])

curto.execute(sqlstr)

#for table ywreport_lobbylogintimes

curfrom.execute("select *from ywreport_lobbylogintimes where date='%s'"%yesterdaydate) #查询昨天的数据

rows = curfrom.fetchall()

for row in rows:

sqlstr = "insert into ywreport_lobbylogintimes(id,server_id,date,lobbytype_id,logintimes) values(%d,%d,'%s',%d,%d)"%(row[0],row[1],row[2],row[3],row[4])

print sqlstr

curto.execute(sqlstr)

#关闭数据库连接

connfrom.close()

curfrom.close()

connto.close()

curto.close()

except MySQLdb.Error,e:

print e

注:本脚本实现了将1.1.1.1上数据库中ywreport_gameupdate和ywreport_lobbylogintimes表中昨天的数据插入到192.168.1.6相应的表中,

表名可以不同,字段名也可以不同,只需要稍微改下代码就行了。 另:本脚本需要安装mysqldb模块,安装方法在此不作说明,读者可以百度

2、通过linux的contab或者windows的计划任务实现每天定时执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以提供一个python脚本,它可以帮助你进行增量备份,只保存一个月的文件:import os import datetime import shutil# 设置备份源路径 src_dir = 'C:/your_source_dir/'# 设置备份目标路径 dest_dir = 'C:/your_destination_dir/'# 设置保存时间为1个月 now = datetime.datetime.now() one_month_ago = now - datetime.timedelta(weeks=4)# 遍历备份源路径 for file in os.listdir(src_dir): # 获取每个文件的修改时间 file_modified_time = datetime.datetime.fromtimestamp(os.stat(src_dir + file).st_mtime) # 如果文件修改时间大于1个月前,则进行备份 if file_modified_time > one_month_ago: shutil.copy(src_dir + file, dest_dir) ### 回答2: 数据库备份是非常重要的,保证数据的完整性和安全性。以下是一个使用Python编写的数据库增量备份脚本,以每月为单位保留备份文件。 ```python import os import shutil import datetime # 设置备份目录和数据库名 backup_dir = "/path/to/backup/" database_name = "your_database.db" # 获取当前日期 current_date = datetime.datetime.now() # 创建备份文件名 backup_file_name = f"{database_name}_{current_date.strftime('%Y%m%d')}.db" # 获取一个月前的日期 one_month_ago = current_date - datetime.timedelta(days=30) # 遍历备份目录,删除一个月之前的备份 for file_name in os.listdir(backup_dir): file_path = os.path.join(backup_dir, file_name) # 判断文件是否为备份文件 if file_name.startswith(database_name) and file_name.endswith(".db"): # 获取备份文件的日期 file_date = datetime.datetime.strptime(file_name.split("_")[1].split(".")[0], "%Y%m%d") # 判断备份文件日期是否早于一个月前 if file_date < one_month_ago: # 删除过期的备份文件 os.remove(file_path) # 执行数据库备份 shutil.copy(database_name, os.path.join(backup_dir, backup_file_name)) ``` 该脚本首先设置备份目录和数据库名称,然后获取当前日期,并创建备份文件名。接下来,计算一个月前的日期,遍历备份目录下的文件,找到之前的备份文件并删除。 最后,使用`shutil.copy()`函数执行数据库备份,将数据库文件复制到备份目录下,并使用备份文件名进行命名。 你可以将`/path/to/backup/`替换为实际的备份目录路径,将`your_database.db`替换为实际的数据库文件名。 这样,每次运行该脚本时,都会将最新的数据库备份备份目录,并在备份目录中保留一个月的备份文件。 ### 回答3: 下面是一个可以实现数据库增量备份Python脚本示例: ```python import os import shutil import datetime # 数据库备份目录 backup_dir = "/path/to/backup" # 数据库文件目录 db_dir = "/path/to/db" # 备份的月份数 months_to_keep = 1 # 获取当前日期 current_date = datetime.datetime.now().strftime("%Y-%m-%d") # 获取备份目录的日期列表 backup_dates = sorted([d for d in os.listdir(backup_dir) if os.path.isdir(os.path.join(backup_dir, d))]) # 删除超过指定月份数的备份 if len(backup_dates) >= months_to_keep: for i in range(len(backup_dates) - months_to_keep + 1): shutil.rmtree(os.path.join(backup_dir, backup_dates[i])) # 创建当天的备份目录 current_backup_dir = os.path.join(backup_dir, current_date) os.makedirs(current_backup_dir) # 备份数据库文件 for file_name in os.listdir(db_dir): file_path = os.path.join(db_dir, file_name) shutil.copy(file_path, current_backup_dir) ``` 上述脚本通过指定的备份目录和数据库文件目录进行增量备份,并将备份文件按日期保存在备份目录中。通过比较备份目录中的备份日期数量和设置的月份数来确定是否需要删除旧的备份。如果备份目录中的日期数量超过了设定的月份数,则按日期排序删除最早的备份目录。之后,脚本创建当天的备份目录,并将数据库文件复制到该目录中,即完成了增量备份。 请注意,上述示例是基于操作系统文件复制和删除来实现的,对于不同的数据库类型,可能需要采用不同的备份和恢复机制。此外,该脚本只是示例,可能需要根据实际需求进行适当的修改和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值