最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Python編寫MySQL數(shù)據(jù)庫備份腳本

 更新時(shí)間:2025年06月06日 10:31:39   作者:運(yùn)維_攻城獅  
這篇文章主要為大家詳細(xì)介紹了一個(gè)使用Python編寫的MySQL數(shù)據(jù)庫備份腳本,包含壓縮,日志記錄和自動(dòng)清理舊備份功能,有需要的可以參考一下

前言

以下是一個(gè)使用Python編寫的MySQL數(shù)據(jù)庫備份腳本,包含壓縮、日志記錄和自動(dòng)清理舊備份功能:

腳本內(nèi)容:

import subprocess
import gzip
import os
import logging
import argparse
from datetime import datetime, timedelta

# 配置日志記錄
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s',
    handlers=[
        logging.FileHandler('db_backup.log'),
        logging.StreamHandler()
    ]
)

def backup_mysql(host, user, password, database, backup_dir, retain_days):
    try:
        # 創(chuàng)建備份目錄
        os.makedirs(backup_dir, exist_ok=True)
        
        # 生成備份文件名
        timestamp = datetime.now().strftime('%Y%m%d%H%M%S')
        backup_file = os.path.join(backup_dir, f"{database}_{timestamp}.sql")
        compressed_file = f"{backup_file}.gz"

        # 執(zhí)行mysqldump命令
        logging.info(f"Starting backup for database: {database}")
        with open(backup_file, 'w') as f:
            cmd = [
                'mysqldump',
                f'-h{host}',
                f'-u{user}',
                f'-p{password}',
                '--single-transaction',
                '--routines',
                '--triggers',
                database
            ]
            result = subprocess.run(cmd, stdout=f, stderr=subprocess.PIPE, text=True)

        if result.returncode != 0:
            raise Exception(f"mysqldump failed: {result.stderr}")

        # 壓縮備份文件
        with open(backup_file, 'rb') as f_in:
            with gzip.open(compressed_file, 'wb') as f_out:
                f_out.writelines(f_in)
        os.remove(backup_file)
        logging.info(f"Backup compressed: {compressed_file}")

        # 清理舊備份
        cutoff = datetime.now() - timedelta(days=retain_days)
        for filename in os.listdir(backup_dir):
            filepath = os.path.join(backup_dir, filename)
            if os.path.isfile(filepath) and filename.endswith('.sql.gz'):
                file_time = datetime.fromtimestamp(os.path.getmtime(filepath))
                if file_time < cutoff:
                    os.remove(filepath)
                    logging.info(f"Deleted old backup: {filename}")

    except Exception as e:
        logging.error(f"Backup failed: {str(e)}")
        raise

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='MySQL Database Backup Tool')
    parser.add_argument('--host', required=True, help='MySQL host')
    parser.add_argument('--user', required=True, help='MySQL username')
    parser.add_argument('--password', required=True, help='MySQL password')
    parser.add_argument('--database', required=True, help='Database name')
    parser.add_argument('--backup-dir', default='./backups', help='Backup directory')
    parser.add_argument('--retain-days', type=int, default=7, 
                       help='Number of days to retain backups')
    
    args = parser.parse_args()
    
    try:
        backup_mysql(
            args.host,
            args.user,
            args.password,
            args.database,
            args.backup_dir,
            args.retain_days
        )
        logging.info("Backup completed successfully")
    except:
        logging.error("Backup process terminated with errors")

功能說明:

  • 自動(dòng)壓縮:使用gzip壓縮備份文件,節(jié)省存儲(chǔ)空間
  • 日志記錄:同時(shí)輸出到文件和控制臺(tái)
  • 舊備份清理:自動(dòng)刪除超過指定天數(shù)的舊備份
  • 事務(wù)備份:使用–single-transaction保證備份一致性
  • 存儲(chǔ)過程/觸發(fā)器:包含–routines和–triggers參數(shù)
  • 錯(cuò)誤處理:完善的異常捕獲和錯(cuò)誤日志記錄

使用方式

bash

python mysql_backup.py \
  --host=localhost \
  --user=root \
  --password=your_password \
  --database=your_database \
  --backup-dir=/path/to/backups \
  --retain-days=7

建議改進(jìn)方向:

  • 添加郵件通知功能
  • 支持遠(yuǎn)程備份到云存儲(chǔ)
  • 添加備份驗(yàn)證功能
  • 支持多數(shù)據(jù)庫并行備份
  • 添加備份恢復(fù)功能

注意:需要提前安裝MySQL客戶端工具(包含mysqldump),建議在服務(wù)器上直接運(yùn)行。

方法補(bǔ)充

下面小編整理了一些其他Python備份mysql數(shù)據(jù)庫的方法,希望對(duì)大家有所幫助

Python定時(shí)按日期備份MySQL數(shù)據(jù)并壓縮

#-*- coding:utf-8 -*-
import os
import time
import tarfile
import zipfile
'''
mysqldump
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help
'''
db_host="localhost"
db_user="root"
db_passwd="root"
db_name="crm"
db_charset="utf8"
db_backup_name=r"c:\crm_%s.sql" %(time.strftime("%Y%m%d%H%M"))
zip_src = db_backup_name
zip_dest = zip_src + ".zip"
def zip_files():
f = zipfile.ZipFile(zip_dest, 'w' ,zipfile.ZIP_DEFLATED)
f.write(zip_src)
f.close()
if __name__ == "__main__":
print("begin to dump mysql database crm...");
os.system("mysqldump -h%s -u%s -p%s %s --default_character-set=%s > %s" %(db_host, db_user, db_passwd, db_name, db_charset, db_backup_name))
print("begin zip files...")
zip_files()
print("done, pyhon is great!")

python 自動(dòng)備份 mysql數(shù)據(jù)庫

import os
import sys  
# import glob 
import filecmp
import time
import datetime
import subprocess 
import sys 

databackup_dir_path = r'E:\databackup'
mysqldump_path = r'E:\Program Files\MariaDB 10.5\bin\mysqldump'
mysql_ip = '127.0.0.1'
mysql_username='root'
mysql_password='root'
mysql_port=3306

backDatabaseNames =  ["kwjl5","kwjl5c2","kwjl5ga" ]

def deleteOldFile(path,day):
    for eachfile in os.listdir(path):
        filename = os.path.join(path, eachfile)
        # backup_ 開頭的文件才會(huì)被刪除
        if os.path.isfile(filename) :  
            lastmodifytime = os.path.getmtime(filename)
            # 設(shè)置刪除多久之前的文件
            endfiletime = time.time() - 3600 * 24 * day
            if endfiletime > lastmodifytime:
                if filename[0:7] == "backup_" and filename[-4:] == ".sql":
                    os.remove(filename)
                    print ("刪除文件 %s 成功" % filename)
        # 如果是目錄則遞歸調(diào)用當(dāng)前函數(shù)
        elif os.path.isdir(filename):  
            deleteOldFile(filename,day)


def backupmysql(dbname): 
  time1_str = datetime.datetime.now().strftime('%Y_%m_%d')
  cmd =[]
  cmd.append("\"" + mysqldump_path + "\"")  
  cmd.append("--opt")
  cmd.append("--single-transaction=TRUE")
  cmd.append("--user="+ mysql_username)
  cmd.append("--password="+ mysql_password)
  cmd.append("--host="+ mysql_ip)
  cmd.append("--protocol=tcp")
  cmd.append("--port="+ str(mysql_port))
  cmd.append("--default-character-set=utf8")
  cmd.append("--single-transaction=TRUE")
  cmd.append("--routines")
  cmd.append("--events \"%s\" > \"%s\\backup_%s_%s.sql\" " % (dbname, databackup_dir_path, dbname,time1_str) )
  #cmd.append(" \n pause")
  strcmd = str.join(" ",cmd )
  print("cmd=>" + strcmd)
  # os.system(strcmd) 
  try: 
      retcode = subprocess.call(strcmd, shell=True) 
      if retcode < 0: 
        print(sys.stderr, "Child was terminated by signal", -retcode )
      else:
        print(sys.stderr, "Child returned", retcode )
  except OSError as e: 
      print(sys.stderr, "Execution failed:", e )


# 刪除老文件 15天以前的文件會(huì)被刪掉
deleteOldFile(databackup_dir_path,15)

#逐個(gè)數(shù)據(jù)庫備份
for f in backDatabaseNames: 
  backupmysql(f)

print("執(zhí)行完成")
 

腳本簡單易懂, 就幾句話. 改改參數(shù)即可.

到此這篇關(guān)于基于Python編寫MySQL數(shù)據(jù)庫備份腳本的文章就介紹到這了,更多相關(guān)Python備份MySQL數(shù)據(jù)庫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用pyecharts實(shí)現(xiàn)地圖可視化的例子

    利用pyecharts實(shí)現(xiàn)地圖可視化的例子

    今天小編就為大家分享一篇利用pyecharts實(shí)現(xiàn)地圖可視化的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python實(shí)現(xiàn)生成簡單的Makefile文件代碼示例

    Python實(shí)現(xiàn)生成簡單的Makefile文件代碼示例

    這篇文章主要介紹了Python實(shí)現(xiàn)生成簡單的Makefile文件代碼示例,本文給出了兩段實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-03-03
  • python爬取內(nèi)容存入Excel實(shí)例

    python爬取內(nèi)容存入Excel實(shí)例

    這篇文章主要為大家詳細(xì)介紹了python爬取內(nèi)容存入Excel實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 使用flask如何獲取post請(qǐng)求參數(shù)

    使用flask如何獲取post請(qǐng)求參數(shù)

    近日在使用flask框架獲取前端的請(qǐng)求時(shí)獲取參數(shù)時(shí),遇到了幾個(gè)問題,所以下面這篇文章主要給大家介紹了關(guān)于使用flask如何獲取post請(qǐng)求參數(shù)的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • Python Django 通用視圖和錯(cuò)誤視圖的使用代碼

    Python Django 通用視圖和錯(cuò)誤視圖的使用代碼

    這篇文章主要介紹了Python Django 通用視圖和錯(cuò)誤視圖的使用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • Python數(shù)據(jù)挖掘中常用的五種AutoEDA 工具總結(jié)

    Python數(shù)據(jù)挖掘中常用的五種AutoEDA 工具總結(jié)

    大家好,我們都知道在數(shù)據(jù)挖掘的過程中,數(shù)據(jù)探索性分析一直是非常耗時(shí)的一個(gè)環(huán)節(jié),但也是繞不開的一個(gè)環(huán)節(jié),本篇文章帶你盤點(diǎn)數(shù)據(jù)挖掘中常見的5種 AutoEDA 工具
    2021-11-11
  • python版簡單工廠模式

    python版簡單工廠模式

    這篇文章主要為大家詳細(xì)介紹了python版簡單工廠模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Jupyter notebook中如何添加Pytorch運(yùn)行環(huán)境

    Jupyter notebook中如何添加Pytorch運(yùn)行環(huán)境

    這篇文章主要介紹了Jupyter notebook中如何添加Pytorch運(yùn)行環(huán)境,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • pyTorch深度學(xué)習(xí)多層感知機(jī)的實(shí)現(xiàn)

    pyTorch深度學(xué)習(xí)多層感知機(jī)的實(shí)現(xiàn)

    這篇文章主要為大家介紹了pyTorch深度學(xué)習(xí)多層感知機(jī)的實(shí)現(xiàn),文中附含詳細(xì)示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫
    2021-09-09
  • Selenium元素定位錯(cuò)誤的處理大全

    Selenium元素定位錯(cuò)誤的處理大全

    在Selenium自動(dòng)化測(cè)試中,元素定位失敗是最常見的錯(cuò)誤類型,其中NoSuchElementException占據(jù)了90%以上的問題,理解錯(cuò)誤產(chǎn)生的根本原因是解決問題的第一步,本文給大家介紹了Selenium元素定位錯(cuò)誤的處理大全,徹底解決元素定位失敗問題,需要的朋友可以參考下
    2025-09-09

最新評(píng)論

漳浦县| 玉树县| 天台县| 格尔木市| 敦化市| 安达市| 蓬安县| 合肥市| 兰州市| 荃湾区| 定西市| 宣城市| 大丰市| 上林县| 古浪县| 濮阳县| 甘德县| 武清区| 离岛区| 霍城县| 泗水县| 壤塘县| 永川市| 景德镇市| 清原| 青海省| 清原| 泗洪县| 洪江市| 清原| 广元市| 崇信县| 招远市| 逊克县| 大洼县| 诸暨市| 民县| 邢台市| 张家港市| 嵊泗县| 盐城市|