MySQL数据库实例参数对比脚本
如何对比两个MySQL实例的参数情况,生产中常会有这样的需求,最近写了个python脚本,可基本实现该需求。
脚本
#!/usr/bin/python
import MySQLdb,sys
def fetch_variables(ip,user,passwd,port,variable=False):
# Open database connection
try:
db = MySQLdb.connect(host=ip, user=user,passwd=passwd,port=port)
except Exception,e:
print e
exit()
# prepare a cursor object using cursor() method
cursor = db.cursor()
if not variable:
sql = 'show variables'
else:
sql= "show variables like '%"+variable+"%'"
try:
# execute SQL query using execute() method.
cursor.execute(sql)
# Fetch all the rows in a list of lists.
results = cursor.fetchall()
dict={}
for row in results:
dict[row[0]]=row[1]
except:
print "Error: unable to fecth data"
return dict
def dict_to_set(dict):
return set(dict.keys()) def main():
if len(sys.argv)!=3 and len(sys.argv)!=4:
print 'Usage:',sys.argv[0],'ip:port nip:nport var'
exit()
user = 'root'
password = ''
ip, port = sys.argv[1].split(':')
nip,nport=sys.argv[2].split(':')
if len(sys.argv)==3:
variable=False
else:
variable=sys.argv[3]
dict = fetch_variables(ip, user, password, int(port),variable)
ndict = fetch_variables(nip, user, password, int(nport),variable)
set=dict_to_set(dict)
nset=dict_to_set(ndict)
same_variables=set.intersection(nset)
for variable in same_variables:
if dict[variable] != ndict[variable]:
print variable,':',dict[variable],'|',ndict[variable]
if __name__=='__main__':
main()
执行方式
输入:ip:port nip:nport var
功能:如果var为空,表示比较所有参数
带实例参数时,执行结果如下:
[root@mysql-server1 ~]# python diff_parameters.py 192.168.244.145:3306 192.168.244.146:3306 general_log_file
general_log_file : /var/lib/mysql/mysql-server1.log | /var/lib/mysql/keepalived01.log
不带实例参数时,执行结果如下:
[root@mysql-server1 ~]# python diff_parameters.py 192.168.244.145:3306 192.168.244.146:3306
version : 5.6.26-log | 5.6.26
log_bin_index : /var/lib/mysql/mysql-bin.index |
log_bin_basename : /var/lib/mysql/mysql-bin |
pseudo_thread_id : 9 | 104
slow_query_log_file : /var/lib/mysql/mysql-server1-slow.log | /var/lib/mysql/keepalived01-slow.log
server_id : 1 | 2
hostname : mysql-server1 | keepalived01
timestamp : 1462931171.666154 | 1462931171.957681
log_bin : ON | OFF
general_log_file : /var/lib/mysql/mysql-server1.log | /var/lib/mysql/keepalived01.log
max_binlog_size : 134217728 | 1073741824
server_uuid : c063ba6f-aee7-11e5-820e-000c29b05336 | 959bf641-b9e7-11e5-89c7-000c294c5ed4
输出结果解读:
第一列是实例参数,第二列和第三列用“|”隔开,其中第二列是第一个实例的参数值,第三列是第二个实例的参数值。
脚本解读
函数def fetch_variables(ip,user,passwd,port,variable=False)是从数据库中获取实例参数及值。variable=False的作用是来处理var为空和var不为空时的情况。
函数def dict_to_set(dict)是将字典转化为集合,这样对于字典的比较可以转为为集合来操作。
MySQL数据库实例参数对比脚本的更多相关文章
- 批量获取mysql数据库实例指定参数的值
需求:需要对比所有mysql数据库实例上面的指定参数配置情况,同时需要需要能看到如ip,端口,master or slave,毕竟主和从参数不一样还是有可能的. 说明:必须要有个数据库存储所有是数据库 ...
- CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动
CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动1.关于mysql?MySQL是一个关系型数据库管理 ...
- Python MySQLdb模块连接操作mysql数据库实例_python
mysql是一个优秀的开源数据库,它现在的应用非常的广泛,因此很有必要简单的介绍一下用python操作mysql数据库的方法.python操作数据库需要安装一个第三方的模块,在http://mysql ...
- PHP、jQuery、AJAX和MySQL 数据库实例
index.html页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- 在一台机子上,安装,运行两mysql数据库实例
为了方便测试,想要用到两个mysql数据库实例.以windows系统为例 当然安装第一个mysql数据库,很简单没什么说的.但是再要安装,运行mysql安装程序时,会提示,修复,卸载,重新安装. 这时 ...
- shell脚本连接、读写、操作mysql数据库实例
本文介绍了如何在shell中读写mysql数据库.主要介绍了如何在shell 中连接mysql数据库,如何在shell中创建数据库,创建表,插入csv文件,读取mysql数据库,导出mysql数据库为 ...
- python3连接MySQL数据库实例
#python3连接MySQL实例 import pymysql """导入连接MySQL需要的包,没有安装pymysql需要先安装 使用命令行切换到python的安装路 ...
- MYSQL数据库的参数文件
参数文件:告诉MySQL实例启动时在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还会介绍各种参数的类型. 参数文件 当MySQL实例启动时,MySQL会先去 ...
- 一分钟在云端快速创建MySQL数据库实例
本教程将帮助您了解如何使用Azure管理门户迅速创建,连接,配置MySQL 数据库 on Azure.完成本教程后,您将在Azure上拥有一个示例MySQL数据库服务器,并了解如何使用管理门户执行基本 ...
随机推荐
- java分享第十九天(TestNg的IReporter接口的使用)
IReporter接口是干嘛的?就是让用户自定义报告的,很多人想要自定义报告,于是乎找各种插件,比如什么testng-xslt啊,reportng啊,各种配置,最后出来的结果,还不能定制化,但为什么 ...
- JavaScript固定宽高
固定高宽: <script type="text/javascript"> if (/Android (\d+\.\d+)/.test(navigat ...
- RDLC报表数据工具栏关闭后打开方法
显示方法为:Ctrl + Alt + D 快捷键 只做自己记录用
- https://oj.leetcode.com/problems/majority-element/
Given an array of size n, find the majority element. The majority element is the element that appear ...
- 最小生成树 prime + 队列优化
存图方式 最小生成树prime+队列优化 优化后时间复杂度是O(m*lgm) m为边数 优化后简直神速,应该说对于绝大多数的题目来说都够用了 具体有多快呢 请参照这篇博客:堆排序 Heapsort / ...
- SQL语句操作数据与一些函数使用的丰富数据库
数据库有多重要,其实不用我说,但该怎么运用好数据库下SQL语句与其它的如“函数”等等,那就需要我们大家多多去练习并总结其中的窍门,或许你的总结没那么好,担只要你的练习足够多,就算那不是窍门,那也将是你 ...
- DataTable扩展方法ToList<T>()、ToJSON()、ToArrayList()
/// <summary> /// 扩展方法类 /// </summary> public static class CommonExtension { /// <sum ...
- Change the Target Recovery Time of a Database (SQL Server) 间接-checkpoints flushcache flushcache-message
Change the Target Recovery Time of a Database (SQL Server) 间接checkpoints flushcache flushcache-mes ...
- 为什么google bazel构建工具流行不起来
作者Jack47 转载请保留作者和原文出处 之前博主写了系列文章Google软件构建工具Bazel原理及使用方法介绍.最近使用了一段时间后,觉得这个东西不是一种通用的构建工具,很难对接到情况复杂的大的 ...
- SQL Server 2012故障转移的looksalive check和is alive check
什么是looksalive check和is alive check SQL Server故障转移集群是建立在windows集群服务上的一种热备的高可用方案.在集群运行过程中,windows集群服务定 ...