批量备份,删除MySQL表(python脚本)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

                                       批量备份,删除MySQL表(python脚本)

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

#本脚本主要用来批量删除以RBCN开头命名,以数字结尾的表。先找出此类表,备份,远程拷贝(由于本主机的空间不足),删除本地备份文件,删除库表。
#引入MySQL模块
import MySQLdb
#引入re(正则表达式)模块
import re
#引入os模块(执行系统命令)
import os
#引入pexpect模块(可以实现通过ssh,ftp等程序自动交互)
import pexpect

#指定连接MySQL实例的账户,密码,字符集,及备份目录
User = 'root'
Passwd = '123456'
Db = 'db_test'
Charset = 'gbk'
Cmd = '/usr/bin/mysqldump'
Path = '/tmp/'

#指定关于远程拷贝的相关主机,密码,目录等
Scp_Path = '/usr/bin/scp'
Remote_Host = '172.31.x.x'
Remote_User = 'root'
Remote_Passwd = '123456'
Remote_Path = '/mnt/data/mysqlbackup/table_backup/'

#创建一个连接对象
con = MySQLdb.connect(host="localhost", port=3306, user="root", passwd="123456", db="db_test")
#创建游标,所有的查询,都在连接con的一个模块cursor上面运行的
cursor = con.cursor()
#查看数据库中存在的表名
sql = "SHOW TABLES"
cursor.execute(sql)
#从游标中取出所有记录放入一个元组序列
results = cursor.fetchall()

#通过for循环取出元组每个元素(其还是元组)
for result in results:
    #取出每个元素的值,引用re模块的match方法做匹配,其中\A代表匹配的开始位置,\Z代表匹配的末尾位置,\d代表任意数字。
    m2 = re.match(r"\ARBCN.*\d\Z", result[0])
    #判断m2的值为真,则进行以下处理(也就是匹配到的表)
    if m2:
       print result[0]
       #取出表名
       Table_name = result[0]
       #定义备份此表
       Backup_Cmd = "%s --default-character-set=%s -u%s -p%s %s %s > %s%s" %(Cmd,Charset,User,Passwd,Db,Table_name,Path,Table_name)
       #执行备份,判断如果备份成功,做如下处理
       if os.system(Backup_Cmd) == 0:
          print 'Successful backup',result[0]
          #定义远程拷贝
          Scp_Cmd = "%s %s%s 
%s@%s:%s" %(Scp_Path,Path,Table_name,Remote_User,Remote_Host,Remote_Path)
          #调用pexpect的spawn模块,执行Scp_Cmd命令
          scp = pexpect.spawn(Scp_Cmd)
          #密码验证
          scp.sendline('Remote_Passwd')
          scp.read()
          scp.close()
          #删除本地备份文件
          re_file = "%s%s" %(Path,Table_name)
          os.remove(re_file)
          #删除数据库中此表 
          sql2 = "DROP TABLE %s" %(Table_name)
          cursor.execute(sql2)        
       else:
          print 'Failed'

con.close()

#author:lyk
#time:2013/07/23
#added:此脚本并不完美,如ssh的timeout时间判断,验证远程主机是否已存在备份文件,md5值验证等。本环境为线上内网,所以,,,










本文转自 kuchuli 51CTO博客,原文链接:http://blog.51cto.com/lgdvsehome/1255172,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
14天前
|
运维 DataWorks 关系型数据库
DataWorks产品使用合集之DataWorks还有就是对于mysql中的表已经存在数据了,第一次全量后面增量同步的步骤如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
28 2
|
16天前
|
关系型数据库 MySQL Shell
备份 MySQL 的 shell 脚本(mysqldump版本)
【4月更文挑战第28天】
24 0
|
2天前
|
关系型数据库 MySQL Linux
服务器Linux系统配置mysql数据库主从自动备份
这是一个基本的配置主从复制和设置自动备份的指南。具体的配置细节和命令可能因您的环境和需求而有所不同,因此建议在操作前详细阅读MySQL文档和相关资源,并谨慎操作以避免数据丢失或不一致。
11 3
|
4天前
|
关系型数据库 MySQL 数据库连接
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
17 0
|
8天前
|
关系型数据库 MySQL 数据管理
MySQL通过 bin-log 恢复从备份点到灾难点之间数据
MySQL通过 bin-log 恢复从备份点到灾难点之间数据
|
8天前
|
存储 安全 关系型数据库
MySQL中使用percona-xtrabackup工具 三种备份及恢复 (超详细教程)
MySQL中使用percona-xtrabackup工具 三种备份及恢复 (超详细教程)
|
13天前
|
SQL 存储 关系型数据库
【MySQL】DDL的表操作详解:创建&查询&修改&删除
【MySQL】DDL的表操作详解:创建&查询&修改&删除
|
14天前
|
弹性计算 关系型数据库 MySQL
|
14天前
|
存储 SQL 关系型数据库
mysql查询数据库表大小怎么操作
mysql查询数据库表大小怎么操作
|
14天前
|
SQL 关系型数据库 MySQL
使用Python的pymysql库连接MySQL,执行CRUD操作
使用Python的pymysql库连接MySQL,执行CRUD操作:安装pymysql,然后连接(host='localhost',user='root',password='yourpassword',database='yourdatabase'),创建游标。查询数据示例:`SELECT * FROM yourtable`;插入数据:`INSERT INTO yourtable...`;更新数据:`UPDATE yourtable SET...`;删除数据:`DELETE FROM yourtable WHERE...`。
27 0