python实现mysql ping 获取c到s端网络延时探讨

pythonAionsky 发表了文章 • 0 个评论 • 475 次浏览 • 2018-02-05 02:14 • 来自相关话题

#!/usr/bin/env python # -*- coding:utf-8 -*-
import mysql.connector 
import time 
''' 
目的:监控app层穿透proxy层访问数据层的延时。
该脚本主要实现,mysql client 到 mysql server 的网络延时监控。
select 1 有查询消耗时间,在压力大的情况下并不精确; 
ping 本身为用于诊断 server是否存活;
两种方法都是利用 发起命令前后 时间差 得出网络延时; 
两种检测方法,可混合使用,通过两个指标差值计算 或单一指标的步差值 再算一定时段均值,可较为合理的反映出MySQL通讯网络是否正常。 
该脚本只实现功能,未做进一步优化。 
单向延时*500,双向延时*1000,不知道这个理解对不对。 
不知道整个MySQL ping 的思路是不是对的。
'''
config = { 
 'host': '127.0.0.1', 
 'user': 'root',
 'password': 'root', 
 'port': 3306, 
 'database': 'test', 
 'charset': 'utf8' } 
try: 
 cnn = mysql.connector.connect(**config) 
except mysql.connector.Error as e: 
 print('connect fails!{}'.format(e)) cursor = cnn.cursor() 
try: 
 #方法一,使用select 语句进行查询,包含查询消耗时间,当数据库压力大时,查询时间可能会变长,可能因为本身数据库压力大导致,但可以变相反应出数据库当前压力。 
 sql_query = 'select 1;' 
 #命令发起前获取时间戳 
 time1 = time.time() 
 cursor.execute(sql_query) 
 result_1 = cursor.fetchall() 
 print result_1 
 #方法2,使用 ping,mysql client发起一次对server ping 请求。本身用于探测server是否正常。
 cnn.ping(cnn) 
 #命令执行完毕后获取时间戳 
 time2 = time.time() 
 #通过发起命令前后来的时间差值来,来确定网络延时。单向延时*500,双向延时*1000 
 time_result = str(float((time2 - time1))*500) + "ms" 
 print time_result 
 
except mysql.connector.Error as e: 
 print('query error!{}'.format(e)) 
finally: 
 cursor.close() 
 cnn.close() 查看全部
#!/usr/bin/env python # -*- coding:utf-8 -*-
import mysql.connector 
import time 
''' 
目的:监控app层穿透proxy层访问数据层的延时。
该脚本主要实现,mysql client 到 mysql server 的网络延时监控。
select 1 有查询消耗时间,在压力大的情况下并不精确; 
ping 本身为用于诊断 server是否存活;
两种方法都是利用 发起命令前后 时间差 得出网络延时; 
两种检测方法,可混合使用,通过两个指标差值计算 或单一指标的步差值 再算一定时段均值,可较为合理的反映出MySQL通讯网络是否正常。 
该脚本只实现功能,未做进一步优化。 
单向延时*500,双向延时*1000,不知道这个理解对不对。 
不知道整个MySQL ping 的思路是不是对的。
'''
config = { 
 'host': '127.0.0.1', 
 'user': 'root',
 'password': 'root', 
 'port': 3306, 
 'database': 'test', 
 'charset': 'utf8' } 
try: 
 cnn = mysql.connector.connect(**config) 
except mysql.connector.Error as e: 
 print('connect fails!{}'.format(e)) cursor = cnn.cursor() 
try: 
 #方法一,使用select 语句进行查询,包含查询消耗时间,当数据库压力大时,查询时间可能会变长,可能因为本身数据库压力大导致,但可以变相反应出数据库当前压力。 
 sql_query = 'select 1;' 
 #命令发起前获取时间戳 
 time1 = time.time() 
 cursor.execute(sql_query) 
 result_1 = cursor.fetchall() 
 print result_1 
 #方法2,使用 ping,mysql client发起一次对server ping 请求。本身用于探测server是否正常。
 cnn.ping(cnn) 
 #命令执行完毕后获取时间戳 
 time2 = time.time() 
 #通过发起命令前后来的时间差值来,来确定网络延时。单向延时*500,双向延时*1000 
 time_result = str(float((time2 - time1))*500) + "ms" 
 print time_result 
 
except mysql.connector.Error as e: 
 print('query error!{}'.format(e)) 
finally: 
 cursor.close() 
 cnn.close()

MYSQL占用高

回复

MySQLlamber 发起了问题 • 1 人关注 • 0 个回复 • 647 次浏览 • 2018-01-21 10:18 • 来自相关话题

semi-sync replication可能会异常

回复

MySQLwubx 发起了问题 • 1 人关注 • 0 个回复 • 446 次浏览 • 2017-12-21 17:06 • 来自相关话题

super_read_only on slave + gtid_mode=1 OOM

回复

MySQLwubx 发起了问题 • 1 人关注 • 0 个回复 • 819 次浏览 • 2017-12-21 17:05 • 来自相关话题

mysql 5.7.16再次捉虫

回复

MySQLwubx 发起了问题 • 1 人关注 • 0 个回复 • 412 次浏览 • 2017-12-21 15:39 • 来自相关话题

PCI-E盘上tokudb可能起动失败处理办法

MySQLwubx 发表了文章 • 0 个评论 • 306 次浏览 • 2017-12-19 16:02 • 来自相关话题

错误提示:2017-12-12T13:54:28.540109Z 0 [Note] InnoDB: Percona XtraDB (http://www.percona.com) 5.7.19-17 started; log sequence number 0
2017-12-12T13:54:28.540671Z 0 [Note] Plugin 'FEDERATED' is disabled.
mysqld: /home/software/toku/tokudb/storage/tokudb/PerconaFT/portability/file.cc:137: void try_again_after_handling_write_error(int, size_t, ssize_t): Assertion `try_again' failed.
13:54:28 UTC - mysqld got signal 6 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
Attempting to collect some information that could help diagnose the problem.
As this is a crash and something is definitely wrong, the information
collection process might fail.
Please help us make Percona Server better by reporting any
bugs at http://bugs.percona.com/ 
 
处理办法:
禁用tokudb的directio
 
[mysqld]
loose_tokudb_directio=off 查看全部
错误提示:2017-12-12T13:54:28.540109Z 0 [Note] InnoDB: Percona XtraDB (http://www.percona.com) 5.7.19-17 started; log sequence number 0
2017-12-12T13:54:28.540671Z 0 [Note] Plugin 'FEDERATED' is disabled.
mysqld: /home/software/toku/tokudb/storage/tokudb/PerconaFT/portability/file.cc:137: void try_again_after_handling_write_error(int, size_t, ssize_t): Assertion `try_again' failed.
13:54:28 UTC - mysqld got signal 6 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
Attempting to collect some information that could help diagnose the problem.
As this is a crash and something is definitely wrong, the information
collection process might fail.
Please help us make Percona Server better by reporting any
bugs at http://bugs.percona.com/ 
 
处理办法:
禁用tokudb的directio
 
[mysqld]
loose_tokudb_directio=off

XeLabs TokuDB 5.7.20 Release

MySQLwubx 发表了文章 • 0 个评论 • 353 次浏览 • 2017-12-19 15:06 • 来自相关话题

恭喜XeLabs TokuDB 5.7.20发布,该版本基本地Percona版本TokuDB进行优化。基于Percona 5.7.20发版。

对TokuDB提升如下

Percona Server has implemented TokuDB integration with PERFORMANCE_SCHEMA.
关于添加有默认值的日期类型字段,主从同步的问题(主:InnoDB,从:TokuDB) http://q.fireflyclub.org/?/question/47
加入show engine中XeLabs TokuDB 标识
mysql –version 加入XeLabs 标识(本次只在CentOS7的版本标识)

二进制下址地址: https://pan.baidu.com/s/1qYRyH3I

20171219 补:

提供于基于xtrabackup 2.4.9版本的支持在线热备XeLabs TokuDB, AiSQL TokuDB (不支持Percona TokuDB)工具。 下载地址,目前也用百度云盘共享。

二进制下址地址: https://pan.baidu.com/s/1qYRyH3I

更多问题加入QQ群:579036588 联系群主。 查看全部
恭喜XeLabs TokuDB 5.7.20发布,该版本基本地Percona版本TokuDB进行优化。基于Percona 5.7.20发版。

对TokuDB提升如下

Percona Server has implemented TokuDB integration with PERFORMANCE_SCHEMA.
关于添加有默认值的日期类型字段,主从同步的问题(主:InnoDB,从:TokuDB) http://q.fireflyclub.org/?/question/47
加入show engine中XeLabs TokuDB 标识
mysql –version 加入XeLabs 标识(本次只在CentOS7的版本标识)

二进制下址地址: https://pan.baidu.com/s/1qYRyH3I

20171219 补:

提供于基于xtrabackup 2.4.9版本的支持在线热备XeLabs TokuDB, AiSQL TokuDB (不支持Percona TokuDB)工具。 下载地址,目前也用百度云盘共享。

二进制下址地址: https://pan.baidu.com/s/1qYRyH3I

更多问题加入QQ群:579036588 联系群主。

sql优化

回复

MySQLzyq 发起了问题 • 1 人关注 • 0 个回复 • 450 次浏览 • 2017-12-06 22:14 • 来自相关话题

pybackup(名字起的不好)备份脚本

MySQLFan 发表了文章 • 0 个评论 • 365 次浏览 • 2017-11-24 11:37 • 来自相关话题

pybackup源自于对线上备份脚本的改进和对备份情况的监控需求.
原本生产库的备份是通过shell脚本调用mydumper,之后再将备份通过rsync传输到备份机.
想要获取备份状态,时间,rsync传输时间等信息只能通过解析日志.
pybackup由python编写,调用mydumper和rsync,将备份信息存入数据库中,后期可以通过grafana图形化展示和监控备份
目前不支持2.6,仅在2.7.14做过测试
 
配合grafana做备份状态监控和告警





 
github地址:
https://github.com/Fanduzi/pybackup
 
python水平比较渣,不是谦虚,真心渣. 恳请各位提出宝贵意见 查看全部
pybackup源自于对线上备份脚本的改进和对备份情况的监控需求.
原本生产库的备份是通过shell脚本调用mydumper,之后再将备份通过rsync传输到备份机.
想要获取备份状态,时间,rsync传输时间等信息只能通过解析日志.
pybackup由python编写,调用mydumper和rsync,将备份信息存入数据库中,后期可以通过grafana图形化展示和监控备份
目前不支持2.6,仅在2.7.14做过测试
 
配合grafana做备份状态监控和告警

WechatIMG160.jpeg

 
github地址:
https://github.com/Fanduzi/pybackup
 
python水平比较渣,不是谦虚,真心渣. 恳请各位提出宝贵意见

python脚本统计 MySQL 库中表的个数

pythonA128_huanggr 发表了文章 • 0 个评论 • 615 次浏览 • 2017-09-27 17:20 • 来自相关话题

#!/usr/bin/python

import os,sys,pymysql

mysqlbase = '/usr/local/mysql/bin/'

if  len(sys.argv)  == 1:
    print('format: python + Script_name + user + password + ip')
elif sys.argv[1] == '-h':
    print('format: python + Script_name + user + password + ip')
else:
    user = sys.argv[1]
    passw = sys.argv[2]
    ip = sys.argv[3]
    dbnam=os.popen(mysqlbase+'mysql -h'+ip+' -u'+user+' -p'+passw+'   -h'+ip+' -e "show databases"|grep -vE "mysql|Database|information_schema|performance_schema|sys"').read()
#    dbnam=os.popen(mysqlbase+'mysql -h'+ip+' -u'+user+' -p'+passw+'  -S /tmp/mysql3306.sock -h'+ip+' -e "show databases"|grep -vE "mysql|Database|information_schema|performance_schema|sys"').read()
    DBNAME = dbnam.replace('\n',',').rstrip(',').split(',')
    for dbname in DBNAME:
        lists =
        db=pymysql.connect(ip,user,passw,dbname)
        cursor=db.cursor()
        cursor.execute("show tables")
        data=cursor.fetchall()
        for tabname in data:
            lists.append(tabname)
        print(dbname,(len(data)))
        db.close()
 
# python connmysql.py root 123456 192.168.6.218
('cr_debug', 6)
('hh', 3)
('lts', 15)
('toprankdb', 496)
('tr', 1)
('zabbix', 127)
#每天学习一点点,日积月累。 查看全部
#!/usr/bin/python

import os,sys,pymysql

mysqlbase = '/usr/local/mysql/bin/'

if  len(sys.argv)  == 1:
    print('format: python + Script_name + user + password + ip')
elif sys.argv[1] == '-h':
    print('format: python + Script_name + user + password + ip')
else:
    user = sys.argv[1]
    passw = sys.argv[2]
    ip = sys.argv[3]
    dbnam=os.popen(mysqlbase+'mysql -h'+ip+' -u'+user+' -p'+passw+'   -h'+ip+' -e "show databases"|grep -vE "mysql|Database|information_schema|performance_schema|sys"').read()
#    dbnam=os.popen(mysqlbase+'mysql -h'+ip+' -u'+user+' -p'+passw+'  -S /tmp/mysql3306.sock -h'+ip+' -e "show databases"|grep -vE "mysql|Database|information_schema|performance_schema|sys"').read()
    DBNAME = dbnam.replace('\n',',').rstrip(',').split(',')
    for dbname in DBNAME:
        lists =
        db=pymysql.connect(ip,user,passw,dbname)
        cursor=db.cursor()
        cursor.execute("show tables")
        data=cursor.fetchall()
        for tabname in data:
            lists.append(tabname)
        print(dbname,(len(data)))
        db.close()
 
# python connmysql.py root 123456 192.168.6.218
('cr_debug', 6)
('hh', 3)
('lts', 15)
('toprankdb', 496)
('tr', 1)
('zabbix', 127)
#每天学习一点点,日积月累。