• 1
  • 0
分享

一、引言

对mysql数据库进行备份

最近比较苦逼,拿着测试的钱,干着运维的活,

估计这只有小屌丝能理解。。

小屌丝表示 不服。。。。

由于要做数据备份,所以就写了一个脚本,让它自己跑着吧~~

二、代码实战

代码示例

# -*- coding:utf-8 -*-
# @Time   : 2022-07-29
# @Author : Carl_奕然

#DB基本信息
import os
import time
import datetime
import glob
import shutil
"""
Python3.7 来执行mysql数据备份操作
自动保持7天的数据
备份的sql文件名精确到时分秒,这样即使一天备份多次,也不会进行覆盖
"""
#数据库基本信息设定
DB_HOST = '输入数据库地址'
DB_USER = '输入数据库账号'
DB_USER_PASSWORD = '输入数据库密码'
DB_PORT = '端口号3306'
#多库备份
#写法一:把需要备份的库名写到txt文件中,然后读取txt文件内的数据
#DB_NAME = '/backup/dbnames.txt'
#写法二:通过执行sql语句来匹配下载的库
# sqlStr1 = "show databases like 'iot%'"
#单库备份
DB_NAME = 'iot_test'
#备份路径
BACKUP_PATH = '../conn_DB/sql_path/'
#设置编码格式
DB_CharSet = 'utf8'
#创建datatime,作为备份文件名称
DATETIME = time.strftime('%Y%m%d')
#这里主要是做.sql文件的日期区分
DT_time = time.strftime("%Y%m%d_%H%M%S")
TODAYBACKUPPATH = BACKUP_PATH + DATETIME
#保留7天的备份文件
print ('del folder seven days ago')
folders = glob.glob('/backup/dbbackup/*')
today = datetime.datetime.now()
for item in folders:
    try:
        foldername = os.path.split(item)[1]
        day = datetime.datetime.strptime(foldername, "%Y%m%d")
        diff = today - day
        if diff.days >= 7:
            shutil.rmtree(item)
    except:
        pass
print("creating backup folder")
#查看备份文件夹是否存在,不存在,则创建
if not os.path.exists(TODAYBACKUPPATH):
    os.makedirs(TODAYBACKUPPATH)
# Code for checking if you want to take single database backup or assinged multiple backups in DB_NAME.
#开始备份文件
print ("checking for databases names file.")
if os.path.exists(DB_NAME):
    file1 = open(DB_NAME)
    multi = 1
    print("Databases file found...")
    print ("Starting backup of all dbs listed in file " + DB_NAME)
else:
    print ("Databases file not found...")
    print ("Starting backup of database " + DB_NAME)
    multi = 0
# Starting actual database backup process.
if multi:
   in_file = open(DB_NAME,"r")
   flength = len(in_file.readlines())
   in_file.close()
   p = 1
   dbfile = open(DB_NAME,"r")
   while p <= flength:
       # 从数据库读取文件
       db = dbfile.readline()
       db = db[:-1]
       #在python中通过cmd执行mysqldump备份语句
       # dumpcmd = "mysqldump -u " + DB_USER + "-h"+DB_HOST + " -p" + DB_USER_PASSWORD + " " + db + " > " + TODAYBACKUPPATH + "/" + db + ".sql"
       # os.system(dumpcmd)
#在python中通过cmd来执行mysqldump命令的另一种写法
       os.system( "mysqldump -h%s -u%s -p%s %s --default_character-set=%s > %s/%s_%s.sql" % (
           DB_HOST, DB_USER, DB_USER_PASSWORD, db, DB_CharSet, TODAYBACKUPPATH, DT_time, db))
       p = p + 1
   dbfile.close()
else:
   db = DB_NAME
   # dumpcmd = "mysqldump -u " + DB_USER + " -p" + DB_USER_PASSWORD + " " + db + " > " + TODAYBACKUPPATH + "/" + db + ".sql"
   # os.system(dumpcmd)
   os.system("mysqldump -h%s -u%s -p%s %s --default_character-set=%s > %s/%s_%s.sql" % (
       DB_HOST, DB_USER, DB_USER_PASSWORD, db, DB_CharSet, TODAYBACKUPPATH,DT_time, db))
#结束后,打印执行状态信息
print ("Backup script completed")
print("Your backups has been created in '" + TODAYBACKUPPATH + "' directory")

在执行的过程中,我遇到了一个问题

20200729180053362.png

遇到这个问题,多半是mysql配置的问题,

嗯,看一下 mysqldump.exe是否在指定路径,或者是否配置到系统环境变量

>我今天重新安装了一下mysql,这种问题就不存在了<

我贴一下执行的结果,

执行一个数据库

2020072918032682.png

执行多个数据库

20200729180357133.png

1、把备份数据文件下载到本地

备份文件,

代码示例:

# -*- coding:utf-8 -*-
# @Time   : 2022-07-29
# @Author : Carl_奕然

import os
import paramiko
def RemoteScp(host_ip, host_port, host_username, host_password, remote_file, local_file):
  scp = paramiko.Transport((host_ip, host_port))
  scp.connect(username=host_username, password=host_password)
  sftp = paramiko.SFTPClient.from_transport(scp)
  sftp.get(remote_file, local_file)
  scp.close()
  return ("success")
if __name__ == '__main__':
  host_ip = '输入远程服务器的ip'
  host_port = 22
  host_username = '输入远程服务器的账号'
  host_password = '输入远程服务器的密码'
  remote_path = '输入要备份的文件名称:/conn_DB/test.sql'
  local_path = '输入备份到本地的文件路径就名称:/DB_backup/test.sql'
  RemoteScp(host_ip, host_port, host_username, host_password, remote_path, local_path)

2、备份文件夹

代码示例

# -*- coding:utf-8 -*-
# @Time   : 2022-07-29
# @Author : Carl_奕然

import os
import paramiko
def RemoteScp(host_ip, host_port, host_username, host_password, remote_path, local_path):
  scp = paramiko.Transport((host_ip, host_port))
  scp.connect(username=host_username, password=host_password)
  sftp = paramiko.SFTPClient.from_transport(scp)
  try:
    remote_files = sftp.listdir(remote_path)
    for file in remote_files:  #遍历读取远程目录里的所有文件
      local_file = local_path + file
      remote_file = remote_path + file
      sftp.get(remote_file, local_file)
  except IOError:  # 如果目录不存在则抛出异常
    return ("remote_path or local_path is not exist")
  scp.close()
if __name__ == '__main__':
  host_ip = '输入远程服务器的ip'   
  host_port = 22       
  host_username = '输入远程服务器的账号'
  host_password = '输入远程服务器的密码'
  remote_path = '输入要备份的文件夹目录:/conn_DB/'     
  local_path = '输入备份到本地的文件夹目录:/DB_backup/'     
  RemoteScp(host_ip, host_port, host_username, host_password, remote_path, local_path)
  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   日前,叮咚买菜(DDL.NYSE)公布了2022年第四季度财报。报告显示,2022年第四季度,叮咚买菜该季度实现营收62.0亿人民币,同比增长13.1%;非美国通用会计准则下的净利润为1.16亿元,2021年同期则为净亏损10.96亿元;美国通用会计准则下的净利润4990万元,是公司首次实现了单季GAAP净利润转正,实现全面盈利。  叮咚买菜之所以能够实现盈利,首先是2022年四季度的毛利率达到了32.9%,比上一年同期提升了5.2个百分点,毛利额为20.4亿元,同比上一年同期增长34.2%。  其次,叮咚买菜2022年四季度的履单费用率为24.1%,比2021年同期优化了8.5个百分点,...
            0 0 1275
            分享
          •   响应时间  响应时间是指某个请求或操作从发出到接收到反馈所消耗的时间,包括应用服务器(客户端)处理时间、网络传输时间以及数据库服务器处理时间。比如一个页面从点击/输入到完全加载的时间;完成一次增加、删除、修改或者查询动作的事务响应时间等。  一个请求在网络上的传输往往要经历多个网络节点才能到达目标服务器,我们假设请求经历了三个网络节点的传输时间B1、B2、B3,客户端的处理时间为A,服务器的响应时间为C。则一次请求的完整路径可以描述为下图:  客户端从发出请求到接收到服务器反馈的完整链路时间为A—>B1—>B2—>B3—>C(节点处理时间都包括接收和发送两个过程)。...
            0 0 991
            分享
          • Selenium 是什么?Selenium是一个用于Web应用程序测试的工具,可以模拟真正的用户操作,支持多种浏览器,如Firefox,Safari,Google Chrome,Opera等。Selenium 模拟的就是一个真实的用户的操作行为,我们完全不用担心 cookie 追踪和隐藏字段的干扰。一、核心代码talking is cheap,话不多说,上代码!from selenium import webdriver import time # 注意这里使用了我本机的谷歌浏览器驱动 browser = webdriver...
            0 0 1605
            分享
          • 随着智能手机的普及,移动app测试越来越重要。现在很多互联网都把注意精力放在了移动端,移动app尽量提供完美的用户体验。但是诸如崩溃,冻结问题,加载时间慢,不直观的导航以及侵犯隐私之类的严重错误可能会触发用户立即卸载应用程序。现在,移动应用程序已成为我们日常微时刻不可或缺的一部分,人们平均每天花费3-4个小时。移动应用在职业和个人生活中对每个人都起着关键作用。因此,手机移动端测试在构建移动应用程序以提供流畅的用户体验和功能方面扮演着重要角色。移动应用测试金字塔软件测试的人都知道Mike Cohn的测试自动化金字塔。典型的金字塔由三层组成。顶部是自动化集成测试层的中间,是一个自动化的端到端测试层...
            1 0 1877
            分享
          •   今天分享个小案例给大家,欢迎大家针对下面的案例,提出有不同的看法、不同的解决方案,期待你积极的参与哟~~  案(lai)例(lou):  A给B评审测试用例,A说:"服务器开关的case需要添加测试用例",B说:"这个不在测试范围内,之前开会的时候说了测试主要关注客户端测试,不进行服务器的相关测试,所以不需要添加测试用例"。  两人针对自己的内容反复强调,在工位上小声的争吵了半个小时(其中A用过举例子的方式,A事后觉得例子没有说服力),最后带着略有不满找到leader,让leader来解决  如果你是A,没有leader,你应该怎么解决?  如果你是...
            1 0 2811
            分享
      • 51testing软件测试圈微信