在《python 统计MySQL表信息》这篇博客中,链接如下:
https://www.cnblogs.com/xiao987334176/p/9901692.html
已经统计出来了一个MySQL服务器的所有表信息,但是还不够,还缺2个列。分别是备注和是否使用
| 库名 | 表名 | 表说明 | 建表语句 | 备注 | 是否使用 |
| db1 | users | 用户表 | CREATE TABLE `users` (...) | 是 | |
| log2 | CREATE TABLE `log2` (...) | 废弃 | 否 |
注意:前4列,我用python统计出来了,那么后2列,怎么办呢?
作为一名运维人员,你是不知道线上每个表的使用情况的,但是开发人员是知道的。所以最后2列,扔给开发去填写。
千万不要自作主张的去写,否则,你懂的...
OK,历经2天的时间,表终于整理完了。大概有1万条记录!
领导需要将不使用的表,全部删除掉。但是有一个前提:删除之前,一定要做备份。
二、MySQL表备份问题
怎么备份呢?有2个方案
1. 使用mysqldump 备份单个表,也就是要删除的表
2. 使用xtraBackup备份mysql
那么这2个方案,该如何选择呢?如果你不知道怎么选的时候,可以先用排除法!
mysqldump
先来看第一种方案,使用mysqldump 备份单表
mysqldump -h主机ip -u用户名 -p密码 数据库名 表名> 文件位置.sql
注意:对于千万级别以上的表,这个sql文件会非常的大。有办法缩小吗?有,使用gzip
gzip
mysqldump 备份并压缩sql文件
mysqldump -h主机ip -u用户名 -p密码(也可不输入) 数据库名 表名 | gzip > 压缩后文件位置.sql.gz
mysql直接用压缩文件恢复
gunzip < backupfile.sql.gz | mysql -u用户名 -p密码(也可不输入) 数据库名
一个16M的sql文件,使用gzip之后,可以压缩到2.2M。但是我们要知道,备份千万级别的表,非常耗时。
它需要一行行读取,并写入到备份文件中。这还只是单表的情况下,几千张表,就无法想象了!
所以不予采用
xtraBackup
具体使用方法,请参考以下链接:
http://blog.51cto.com/xiao987334176/1693176
它是基于文件式的备份,MySQL的数据库的信息,都写在文件中,那么我使用xtraBackup拷贝文件,比用mysqldump 一行行读取快多了!
所以,准予采用!
三、编写python 删除脚本
在贴完整代码之前,先来说几个小的知识点,有助于理解代码。
pymysql执行mysql命令
这是一个查看所有数据库的
#!/usr/bin/env python # -*- coding: utf-8 -*- import pymysql class MysqlHelp(object): def __init__(self): self.username = "root" self.password = "" self.host = "localhost" self.port = 3306 # 注意,必须是数字 def connect(self): # 连接mysql conn = pymysql.connect( host=self.host, # mysql ip地址 user=self.username, passwd=self.password, port=self.port # mysql 端口号,注意:必须是int类型 ) return conn def command(self,sql): cur = self.connect().cursor() # 创建mysql游标 cur.execute(sql) ret = cur.fetchall() # 执行结果 return ret all_database = MysqlHelp().command('show databases') print(all_database)