如何对比两个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数据库实例参数对比脚本的更多相关文章

  1. 批量获取mysql数据库实例指定参数的值

    需求:需要对比所有mysql数据库实例上面的指定参数配置情况,同时需要需要能看到如ip,端口,master or slave,毕竟主和从参数不一样还是有可能的. 说明:必须要有个数据库存储所有是数据库 ...

  2. CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动

    CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动1.关于mysql?MySQL是一个关系型数据库管理 ...

  3. Python MySQLdb模块连接操作mysql数据库实例_python

    mysql是一个优秀的开源数据库,它现在的应用非常的广泛,因此很有必要简单的介绍一下用python操作mysql数据库的方法.python操作数据库需要安装一个第三方的模块,在http://mysql ...

  4. PHP、jQuery、AJAX和MySQL 数据库实例

    index.html页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  5. 在一台机子上,安装,运行两mysql数据库实例

    为了方便测试,想要用到两个mysql数据库实例.以windows系统为例 当然安装第一个mysql数据库,很简单没什么说的.但是再要安装,运行mysql安装程序时,会提示,修复,卸载,重新安装. 这时 ...

  6. shell脚本连接、读写、操作mysql数据库实例

    本文介绍了如何在shell中读写mysql数据库.主要介绍了如何在shell 中连接mysql数据库,如何在shell中创建数据库,创建表,插入csv文件,读取mysql数据库,导出mysql数据库为 ...

  7. python3连接MySQL数据库实例

    #python3连接MySQL实例 import pymysql """导入连接MySQL需要的包,没有安装pymysql需要先安装 使用命令行切换到python的安装路 ...

  8. MYSQL数据库的参数文件

    参数文件:告诉MySQL实例启动时在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还会介绍各种参数的类型. 参数文件 当MySQL实例启动时,MySQL会先去 ...

  9. 一分钟在云端快速创建MySQL数据库实例

    本教程将帮助您了解如何使用Azure管理门户迅速创建,连接,配置MySQL 数据库 on Azure.完成本教程后,您将在Azure上拥有一个示例MySQL数据库服务器,并了解如何使用管理门户执行基本 ...

随机推荐

  1. java分享第十九天(TestNg的IReporter接口的使用)

     IReporter接口是干嘛的?就是让用户自定义报告的,很多人想要自定义报告,于是乎找各种插件,比如什么testng-xslt啊,reportng啊,各种配置,最后出来的结果,还不能定制化,但为什么 ...

  2. JavaScript固定宽高

    固定高宽:  <script type="text/javascript">         if (/Android (\d+\.\d+)/.test(navigat ...

  3. RDLC报表数据工具栏关闭后打开方法

    显示方法为:Ctrl + Alt + D 快捷键 只做自己记录用

  4. 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 ...

  5. 最小生成树 prime + 队列优化

    存图方式 最小生成树prime+队列优化 优化后时间复杂度是O(m*lgm) m为边数 优化后简直神速,应该说对于绝大多数的题目来说都够用了 具体有多快呢 请参照这篇博客:堆排序 Heapsort / ...

  6. SQL语句操作数据与一些函数使用的丰富数据库

    数据库有多重要,其实不用我说,但该怎么运用好数据库下SQL语句与其它的如“函数”等等,那就需要我们大家多多去练习并总结其中的窍门,或许你的总结没那么好,担只要你的练习足够多,就算那不是窍门,那也将是你 ...

  7. DataTable扩展方法ToList<T>()、ToJSON()、ToArrayList()

    /// <summary> /// 扩展方法类 /// </summary> public static class CommonExtension { /// <sum ...

  8. 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 ...

  9. 为什么google bazel构建工具流行不起来

    作者Jack47 转载请保留作者和原文出处 之前博主写了系列文章Google软件构建工具Bazel原理及使用方法介绍.最近使用了一段时间后,觉得这个东西不是一种通用的构建工具,很难对接到情况复杂的大的 ...

  10. SQL Server 2012故障转移的looksalive check和is alive check

    什么是looksalive check和is alive check SQL Server故障转移集群是建立在windows集群服务上的一种热备的高可用方案.在集群运行过程中,windows集群服务定 ...