如何对比两个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. Windows下ActiveMQ下载、安装部署

    1.下载:http://activemq.apache.org/download.html 最新Windows版本   2.安装 (1) 首先配置JAVA环境变量 JAVA_HOME=D:\Progr ...

  2. vs2012 打开解决方案崩溃或者点击项目崩溃

    报错: 问题签名:  问题事件名称: CLR20r3 解决方案: 步骤1:开始-->所有程序-->Microsoft Visual Studio 2012-->Visual Stud ...

  3. 【hihoCoder】1288 : Font Size

    题目:http://hihocoder.com/problemset/problem/1288 手机屏幕大小为 W(宽) * H(长),一篇文章有N段,每段有ai个字,要求使得该文章占用的页数不超过P ...

  4. Unity3D上可以发布到IOS使用的SQLite数据库

    地址:https://github.com/codecoding/SQLite4Unity3d Unity5.1.1f 发布,在IOS 8.3上亲测可用,Android好像有点问题. 也可用参考下这个 ...

  5. NSTimer整理总结

    对于定时器NSTimer,我们大家都不会陌生,在使用的时候,我们常常会遇到一些坑,例如:在Scrollview拖动时,timer会暂停:在子线程中如何创建一个定时器等.针对于一些我们所遇到的坑,我来总 ...

  6. Java NIO1:I/O模型概述

    I/O模型 在开始NIO的学习之前,先对I/O的模型有一个理解,这对NIO的学习是绝对有好处的.我画一张图,简单表示一下数据从外部磁盘向运行中进程的内存区域移动的过程: 这张图片明显忽略了很多细节,只 ...

  7. HappyAA服务器部署笔记1(nginx+tomcat的安装与配置)

    这是本人的服务器部署笔记.文章名称叫"部署笔记1"的原因是之后我对这个进行了改进之后,会有"部署笔记2","部署笔记3"...循序渐进,估计 ...

  8. SQL Server null知多少?

    null是什么? 不知道.我是说,他的意思就是不知道(unknown). 它和true.false组成谓词的三个逻辑值,代表“未知”.与true和false相比,null最难以令人捉摸,因为它没有明确 ...

  9. MySQL 指定各分区路径

    200 ? "200px" : this.width)!important;} --> 介绍 可以针对分区表的每个分区指定各自的存储路径,对于innodb存储引擎的表只能指定 ...

  10. 控制Linux下 mono 服务的启动停止

    当Window下的服务部署到Linux的时候,我们一般用Mono.service 来启动停止.参数比较多,不太好用.于是有个这个Shell脚本. 用法:moa s1 start #启动         ...