• 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)
  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 概念Hamcrest是用于编写匹配器对象的框架。他提供了一套匹配符Matcher,这些匹配符更接近自然语言,可读性高,更加灵活。Hamcrest还有很好的可扩展性,能够创建自定义的匹配器。支持语言Hamcest支持多种语言,在Hamcest 官网便可以看到:http://hamcrest.org/JavaPythonRubyObjective-CPHPErlangSwift示例from hamcrest import * import unittest class BiscuitTest(unittest.TestCase):  &...
            1 1 2005
            分享
          • 推荐标签:软件测试技术测试用例测试方法在信息技术外包世界,对一个公司拥有它的应用程序和被其他人开发或者维护的框架是普遍的。当销售商完成这个生意,一个普通的实验是把测试过渡活动当成是一个整体。你如何设计一个传统实验的可接受标准以至于它可测试并且被清晰沟通?作为测试,我们通常讨论当一个应用程序被创建时如何接近测试并且被在我们自己公司内的团队维护,但是我们很少讨论当从一个外包供应商到另一个变化时发生了什么。在信息技术外包的世界,对一个公司拥有它的被其他人开发和维护的应用程序和架构是普遍的。当销售商完成这笔生意,有合同涉及组建管理,实时服务水平,关于发布内容的委员会,等等。一个普通的合同部分是测试交换...
            0 0 2023
            分享
          •   有一份51Testing测试行业调查问卷需要您的助力,差不多三分钟的时间即可填完。我们给您准备了一份价值398元的测试课程作为礼品,感谢您的帮忙~链接:http://vote.51testing.com/  最近,我与微软的高级软件工程师KlausHemstitch进行了交谈。过去7年里,Klaus Hemstitch一直在微软的Office 365团队工作。每天他的团队要确保所有的网络组件能在每个主流浏览器上正常工作。我很想知道在构建可扩展且有益的自动化测试时,他们如何解决那些困难的任务。  · 您在微软工作多久了?以前在哪里工作?  我从2013年开始在微软工作,之前在奥多比(Adob...
            0 0 1134
            分享
          • 1、请详细阐述接口测试和UI测试在测试活动中是如何协同测试的?UI与接口测试的协同可以从下面的方向考虑:UI的操作实际上就是用另一种方式调用接口,那么接口有多少种参数组合就要求UI用例要构造多少种操作进行调用;UI操作所需要的数据可以用接口来生成;接口测试可以保证数据和逻辑的准确性,UI测试需要考虑交互和界面展示的逻辑正确性;UI测试需要重视接口调用不成功或者接口异常情况下UI的呈现方式和用户体验;UI中可能会有一些状态的缓存信息(这样就不需要每次频繁调用接口去获取了),比如鉴权信息等,需要重点关注这些缓存的更新策略。2、接口测试中上下游接口有数据依赖如何处理?上下游接口的数据依赖无非就是准备...
            15 16 1523
            分享
          •   什么是数据管理?  女士们,先生们,欢迎来到数据管理的世界——数字球美女,商业机器背后的驱动力。简而言之,数据管理是收集、保护和利用数据的做法,这些策略安全、高效且具有成本效益。想象一下,有一个数字图书管理员,但不是严厉的喝斥,而是让你毫不费力地访问数据。无论你的组织规模如何,这个魔法都会创造奇迹。  数据管理的组成部分  数据管理不单单是几个字符,它是一个由多个组件组成的合奏,演奏着一首美丽的交响乐。首先,我们有数据管理指挥家设定节奏,定义规则,并确保数据管理工作在法律允许范围内。接下来是数据质量,这是一个精致的女高音,确保数据是准确的,有关联的,最重要的是可用的。  接着是数据整合,我...
            0 0 316
            分享
      • 51testing软件测试圈微信