其实你数据库的表和字段都存放在了一个系统表中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执行一下,等报错了再百度嘿嘿