python 备份数据库脚本

代码如下:

import os
import time
from datetime import datetime
import pymysql
import configparser
 
# 读取配置文件
config = configparser.ConfigParser()
config.read('config.ini')
 
# 连接数据库
def connect_db(host, user, password, db, charset):
    conn = pymysql.connect(host=host, user=user, password=password, db=db, charset=charset)
    return conn
 
# 备份数据库
def backup_db(host, user, password, db, charset, backup_path):
    # 创建数据库备份路径
    if not os.path.exists(backup_path):
        os.makedirs(backup_path)
    
    # 连接数据库
    conn = connect_db(host, user, password, db, charset)
    cursor = conn.cursor()
    
    # 执行数据库备份命令
    today = datetime.now().strftime("%Y%m%d%H%M%S")
    file_path = os.path.join(backup_path, f"{db}_{today}.sql")
    with open(file_path, 'w') as f:
        cursor.execute(f"SHOW CREATE DATABASE {db};")
        database_info = cursor.fetchone()
        f.write(f"/*!40100 SET NAMES utf8 */;\n")
        f.write(f"/*!40100 CREATE DATABASE `{db}` */;\n")
        f.write(database_info[1] + ";\n")
        cursor.execute("SHOW TABLES;")
        for table in cursor.fetchall():
            print(f"正在备份表: {table[0]}")
            cursor.execute(f"SHOW CREATE TABLE {table[0]};")
            create_table_info = cursor.fetchone()
            f.write(f"/*!40100 SET NAMES utf8 */;\n")
            f.write(create_table_info[1].replace(f"{db}.", '') + ";\n")
            cursor.execute(f"LOCK TABLES {table[0]} WRITE;")
            cursor.execute(f"SELECT * FROM {table[0]};")
            for row in cursor.fetchall():
                fields = ', '.join(str(value) for value in row)
                f.write(f"INSERT INTO `{table[0]}` VALUES ({fields});\n")
            cursor.execute("UNLOCK TABLES;")
    conn.close()
    print(f"数据库备份成功: {file_path}")
 
# 执行数据库备份
backup_db(
    config['DATABASE']['host'],
    config['DATABASE']['user'],
    config['DATABASE']['password'],
    config['DATABASE']['db'],
    config['DATABASE']['charset'],
    config['BACKUP']['backup_path']
)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值