其实你数据库的表和字段都存放在了一个系统表中emmm

备份数据库

#!/usr/bin/env python
# coding: utf-8

import os
import pymysql
import time

''' 定义变量 '''
databases = ['pet']  # 定义要备份的数据库名
sql_host = 'localhost'
sql_user = 'root'  # 数据库登陆用户
sql_pwd = '422518'  # 数据库登陆密码
root_path = './'  # 存放sql文件的地址


''' 创建存放备份文件的文件夹 '''
mkdir_dir = root_path+time.strftime('%Y%m%d')+"/"  # 在/home/work/目录下用当天时间的格式创建目录
if not os.path.exists(mkdir_dir):  # 判断如果没有当天时间目录
    os.mkdir(mkdir_dir)  # 创建
print('创建文件夹成功:', os.path.abspath(mkdir_dir))  # 打印创建成功


''' 开始备份到指定文件夹 '''
os.chdir(mkdir_dir)  # 改变当前工作目录到指定的路径
for database_name in databases:  # 循环zabbix数据库
    today_sql = database_name+'_'+time.strftime('%Y%m%d')+'.sql'  # 定义数据库文件名变量
    # 编写cmd语句
    sql_comm="mysqldump -u%s -p%s %s > %s --default_character-set=utf8"%(sql_user,sql_pwd,database_name,today_sql)  # 定义备份数据库变量
    if os.system(sql_comm) == 0:  # 如果上一条执行结果等于0,表示成功
        print(database_name, 'is backup successfully!')  # 打印成功信息
        print('备份文件地址:',os.path.abspath('./')+today_sql)
    else:  # 备份失败
        print(database_name, 'is backup fai!')  # 打印成功信息

命令行还原数据库(执行sql文件)

#!/usr/bin/env python
# coding: utf-8

import os
import pymysql
import time

''' 定义变量 '''
databases = ['pet']  # 定义要备份的数据库名
sql_host = 'localhost'
sql_user = 'root'  # 数据库登陆用户
sql_pwd = '422518'  # 数据库登陆密码
database_name = 'pet'  # 数据库名字
sql_path = './20210415/pet_20210415.sql'  # 存放sql文件的地址

''' 开始还原数据到指定文件夹 '''
if not os.path.exists(sql_path):
    print('文件不存在')
else:
    sql_comm="mysql –u%s –p%s -D%s < %s"%(sql_user,sql_pwd,database_name,os.path.abspath(sql_path))  # 定义备份数据库变量
    print(sql_comm)
    if os.system(sql_comm) == 0:  # 如果上一条执行结果等于0,表示成功
        print(database_name, '还原成功')  # 打印成功信息
    else:  # 备份失败
        print(database_name, '还原失败')  # 打印成功信息

使用pymysql还原数据库(执行sql文件)

#!/usr/bin/env python3
# coding: utf-8
import pymysql

sql_host = 'localhost'
sql_user = 'root'  # 数据库登陆用户
sql_pwd = '422518'  # 数据库登陆密码
database_name = 'pet'  # 数据库名字
sql_path = './20210415/pet_20210415.sql'  # 存放sql文件的地址

connect = pymysql.connect(host=sql_host, user=sql_user, password=sql_pwd, database=database_name)
cursor = connect.cursor()
try:
    with open(sql_path,encoding='utf-8',mode='r') as f:
        # 读取整个sql文件,以分号切割。[:-1]删除最后一个元素,也就是空字符串
        sql_list = f.read().split(';')
        for x in sql_list:
            # sql语句添加分号结尾
            sql_item = x.strip() + ';'
            cursor.execute(sql_item)
            print("执行成功sql: %s"%sql_item)
except Exception as e:
    print(e)
    print('执行失败sql: %s'%sql_item)
finally:
    # 关闭mysql连接
    cursor.close()
    connect.commit()
    connect.close()

问题补充

需要将MySQL的bin文件夹配置到环境变量中,除此之外MySQL8.0之前的数据库需要加一个参数,记不太清了,可以把sql_comm打印出来,在cmd执行一下,等报错了再百度嘿嘿

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐