前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >--如何用PYTHON 定时打印 MYSQL FREE 使用率,与自动创建测试数据库表

--如何用PYTHON 定时打印 MYSQL FREE 使用率,与自动创建测试数据库表

作者头像
AustinDatabases
发布于 2020-06-11 06:33:04
发布于 2020-06-11 06:33:04
1.2K00
代码可运行
举报
文章被收录于专栏:AustinDatabasesAustinDatabases
运行总次数:0
代码可运行

数据库汇中,PYTHON 的使用不是一个可选项,主要在很多地方,监控,处理一些DEVOPS的事情,或者与业务有关的处理的工作都是需要PYTHON 来进行的。下面就用PTYHON 来完成一个很小的打印MYSQL 系统的内存占用率的小脚本来开始 PYTHON travel。(由于是初级水平有待提高,部分代码的有待进步)

在学习PYTHON 的过程中,(很菜)领会到PYTHON 本身的语法是一回事,你使用的各种包的熟悉又是另一回事。所以下面先得说说程序中使用的mysql 的 python connector.

PYTHON 连接到MYSQL 的包有很多 PYMYSQL , MYSQLAB, 这里没有使用而是使用了官方的 Connector/Python 的方式进行连接

下面相关的代码的初衷主要在分析一段时间INNODB BUFFER 的使用率,查看相关的变动情况,当然这样的监控也有各种图形化的监控软件,但灵活性不高

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python3
# coding: utf-8
import mysql.connector
from mysql.connector import errorcode
import re
import time
import datetime
import sys


class DBFREEMEMORY:
    def __init__(self, user=None, passwd=None, host=None, db=None):
        self.user = user
        self.passwd = passwd
        self.host = host
        self.db = db


    def mysql_connect(self):
        remotedb = {
          'host': self.host ,
          'user': self.user,
          'passwd': self.passwd,
          'database': self.db,
          'charset': 'utf8',
          'connection_timeout': 30,
          'use_pure': True
        }

        try:
          connect = mysql.connector.connect(**remotedb)
          mycursor = connect.cursor(dictionary=True)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
          sql = "select substring_index(substring_index(event_name,'/',2),'/',-1) as event_type, round(sum(current_number_of_bytes_used) / 1024/1024, 2) as MB_CURRENTLY_USED from performance_schema.memory_summary_global_by_event_name group by event_type having mb_currently_used >0"
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
          ) as event_type, round(sum(current_number_of_bytes_used) / 1024/1024, 2) as MB_CURRENTLY_USED from performance_schema.memory_summary_global_by_event_name group by event_type having mb_currently_used >0"
          mycursor.execute(sql)
memory = mycursor.fetchall()#收集当前使用的内存数
sql_1 = "show global variables  like 'innodb_buffer_pool_size';"
          mycursor.execute(sql_1)
          full_memory = mycursor.fetchall()
          #收集当前整体数据库占有的内存

          for t in full_memory:          if t['Value'] != None:
              fmem = float(t['Value']) / 1024 / 1024
            else:
              t['Value'] = 1
          for i in memory:
            if i['MB_CURRENTLY_USED'] != None:
               mem = i['MB_CURRENTLY_USED']
            else:
              i['MB_CURRENTLY_USED'] = 1
          result = format(float(mem) / float(fmem) * 100, '.2f')
          print(str(result) + '%' + '  ' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
          #将当前的内存使用数的百分比进行比较,并和当前时间一起打印

        except mysql.connector.Error as err:
          if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
            print("Something is wrong with your user name or password")
          elif err.errno == errorcode.ER_BAD_DB_ERROR:
            print("Database does not exist")
          else:
            print(err)
        finally:
          mycursor.close()
          connect.close()


if __name__ == '__main__':
   info = DBFREEMEMORY(user='admin', passwd='1234.Com', host='192.168.198.9', db='performance_schema')
   info.mysql_connect()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
          'host': self.host ,
          'user': self.user,
          'passwd': self.passwd,
          'database': self.db,
          'charset': 'utf8',
          'connection_timeout': 30,
          'use_pure': True
        }

        try:
          connect = mysql.connector.connect(**remotedb)
          mycursor = connect.cursor(dictionary=True)

          sql = "select substring_index(substring_index(event_name,'/',2),'/',-1) as event_type, round(sum(current_number_of_bytes_used) / 1024/1024, 2) as MB_CURRENTLY_USED from performance_schema.memory_summary_global_by_event_name group by event_type having mb_currently_used >0"
          mycursor.execute(sql)
          memory = mycursor.fetchall()
          sql_1 = "show global variables  like 'innodb_buffer_pool_size';"
          mycursor.execute(sql_1)
          full_memory = mycursor.fetchall()

          for t in full_memory:
            if t['Value'] != None:
              fmem = float(t['Value']) / 1024 / 1024
            else:
              t['Value'] = 1
          for i in memory:
            if i['MB_CURRENTLY_USED'] != None:
               mem = i['MB_CURRENTLY_USED']
            else:
              i['MB_CURRENTLY_USED'] = 1
          result = format(float(mem) / float(fmem) * 100, '.2f')
          print(str(result) + '%' + '  ' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))


        except mysql.connector.Error as err:
          if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
            print("Something is wrong with your user name or password")
          elif err.errno == errorcode.ER_BAD_DB_ERROR:
            print("Database does not exist")
          else:
            print(err)


if __name__ == '__main__':
   info = DBFREEMEMORY(user='admin', passwd='1234.Com', host='192.168.198.9', db='performance_schema')
   info.mysql_connect()

下面一个程序是针对自动生成测试数据库表,下面会在数据库层面自动生成test 库 以及 test1表,并插入随机数 150万

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python3
# coding: utf-8
from __future__ import print_function
import mysql.connector
from mysql.connector import errorcode
from datetime import date, datetime, timedelta
import re
import time
import datetime
import sys
import random


class DBFREEMEMORY:
    def __init__(self, user=None, passwd=None, host=None, db=None):
        self.user = user
        self.passwd = passwd
        self.host = host
        self.db = db

    def gen_random_string(self):  #产生随机内容的方法

        char_list = list('1234567890' + '0123456789')
        random.shuffle(char_list)
        return ''.join(char_list)

    def mysql_connect(self):
        remotedb = {
            'host': self.host,
            'user': self.user,
            'passwd': self.passwd,
            'database': self.db,
            'charset': 'utf8',
            'connection_timeout': 30,
            'use_pure': True
        }

        try:
            connect = mysql.connector.connect(**remotedb)
            mycursor = connect.cursor(dictionary=True)
            #判断当前的服务器是否已经存在test数据库
            mycursor.execute("show databases")
            database = [mycursor.fetchall()]
            # print (tables)
            database_list = re.findall('(\'.*?\')', str(database))
            database_list = [re.sub("'", '', each) for each in database_list]
            print(database_list)
            #如果存在test 数据库就直接退出
            if 'test' in database_list:
                print('The database of test has existed,it has deleted it,please run the job again')
               

            else:#创建相关                         mycursor.execute("create database test")          print('You have test database')

            DB_NAME = 'test'
            mycursor.execute("USE test".format(DB_NAME))
            #建表
            TABLES = {}
            TABLES['test'] = (
                "CREATE TABLE `test1` ("
                "  `id` int(11) NOT NULL AUTO_INCREMENT,"
                "  `content` varchar(200)  NULL,"
                "  `hash` varchar(200)  NULL,"
                "  `insert_date` date  NULL,"
                "  PRIMARY KEY (`id`)"
                ") ENGINE=InnoDB")

            table_name = TABLES['test']
            # mycursor.execute(table_name)
            mycursor.execute("show tables")
            table = [mycursor.fetchall()]
            # print (tables)
            table_list = re.findall('(\'.*?\')', str(table))
            table_list = [re.sub("'", '', each) for each in table_list]
            print(table_list)
            #判断如果没有
            if 'test1' in table_list:
                print('The table of test has existed,please delete it')

            else:
                try:  #执行并开始插入数据 10000条一提交
                    mycursor.execute(table_name)
                    #print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
                    s_time = time.time()
                    i = 0
                    while i < 150000:
                        content = self.gen_random_string()
                        sql = "INSERT INTO test1 (content, hash,insert_date) VALUES ('%s', '%d',now())" \
                              % (content, hash(content))
                        mycursor.execute(sql)
                        i += 1
                        if i % 10000 == 0:
                           connect.commit()
                           print(i)
                    connect.close()
                    print('You have test table')
                    en_time = time.time()
                    print(en_time-s_time)
                    #print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
                except Exception as e:
                    print(e)





        except mysql.connector.Error as err:
            if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
                print("Something is wrong with your user name or password")
            elif err.errno == errorcode.ER_BAD_DB_ERROR:
                print("Database does not exist")
            else:
                print(err)
        finally:
            mycursor.close()
            connect.close()


if __name__ == '__main__':
    info = DBFREEMEMORY(user='admin', passwd='1234.Com', host='192.168.198.9', db='performance_schema')
info.mysql_connect()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python mysql连接操作(增删改查)
在 MySQL 8.0 中验证插件和密码加密方式发生了变化,要让它使用“mysql_native_password”插件认证方式,所以需要在mysql的配置文件my.ini中[mysqld]下添加一下内容,并重启mysql
织幻妖
2021/02/18
2.1K0
python mysql连接操作(增删改查)
Python MySQL 数据库查询:选择数据、使用筛选条件、防止 SQL 注入
这是您提供的内容的Markdown排版,按照您的要求进行了整理。如果需要进一步的编辑或修改,请告诉我。
小万哥
2023/11/10
4180
Python MySQL 数据库查询:选择数据、使用筛选条件、防止 SQL 注入
通过python读取ini配置文件
你可以理解为就是一个配置文件的统称吧。比如test.conf,这样的你可以理解为他就是ini文件,里面一般存放一些配置信息。比如数据库的基本信息,一会我们进行讲解!
py3study
2020/01/07
1.4K0
MySQL 数据库操作指南:LIMIT,OFFSET 和 JOIN 的使用
您可以通过使用"LIMIT"语句来限制查询返回的记录数量。以下是一个示例,获取您自己的Python服务器中"customers"表中的前5条记录:
小万哥
2023/12/10
2890
MySQL 数据库操作指南:LIMIT,OFFSET 和 JOIN 的使用
【python实操】年轻人,别用记事本保存数据了,试试数据库吧
为什么用数据库? 数据库比记事本强在哪? 答案很明显,你的文件很多时候都只能被一个人打开,不能被重复打开。当有几百万数据的时候,你如何去查询操作数据,速度上要快,看起来要清晰直接 数据库比我之前学的XML好在哪? XML表写索引的时候,很容易被中间断电就打断了,两个表对不上号了咋办? 安全和备份处理上数据库都有自己的考虑。
20岁爱吃必胜客
2023/03/25
1K0
【python实操】年轻人,别用记事本保存数据了,试试数据库吧
Python MySQL创建数据库
通过使用“SHOW DATABASES”语句列出系统中的所有数据库来检查数据库是否存在。如下则是返回所有数据库,看看我们创建的数据库是否存在。
川川菜鸟
2021/10/19
7.2K0
MYSQL 字符隐式转换,8 VS 57 ,新人哭旧人笑?
周六特刊的那期SQL SERVER 你不仁,别怪他不义那期本来并未期望有什么阅读量,但实际上大大的超乎想象。所以天天讲理论看的人是越来越少,讲实际遇到的问题,并解决看的人是越来越多,不管你是什么数据库。所以本期是关于MYSQL 的隐式转换,下周一是 POSTGRESQL 的隐式转换。
AustinDatabases
2020/02/13
5230
MYSQL   字符隐式转换,8 VS  57 ,新人哭旧人笑?
Python 数据库应用教程:安装 MySQL 及使用 MySQL Connector
为了测试安装是否成功,或者如果您已经安装了"MySQL Connector",请创建一个Python页面,其中包含以下内容:
小万哥
2023/11/08
8330
Python 数据库应用教程:安装 MySQL 及使用 MySQL Connector
MySQL 数据库表格创建、数据插入及获取插入的 ID:Python 教程
您可以通过使用"SHOW TABLES"语句列出数据库中的所有表格来检查表格是否存在:
小万哥
2023/11/09
3130
MySQL 数据库表格创建、数据插入及获取插入的 ID:Python 教程
绕不过去的Python连接MySQL数据库
喜欢就点关注吧! 不管是机器学习、web开发或者爬虫,数据库都是绕不过去的。那么今天我们就来介绍Python如何Mysql数据库进行连接以及数据的交换。主要分为以下几个方面:什么是数据库?什么是MySQLdb?Python如何连接数据库?创建数据库数据库操作-CRUD什么是数据库数据库基本上是结构化数据的集合,通过数据库可以用各种方式轻松地检索,管理和访问数据。最简单的数据库形式之一是文本数据库。目前关系数据库是最流行的数据库系统,目前主流的关系数据库主要由以下几个:MySQLOracle Database
深度学习与Python
2019/07/15
6540
干货 | Python+MySQL数据库操作
本文介绍如何利用python来对MySQL数据库进行操作,本文将主要从以下几个方面展开介绍:
用户1621951
2019/06/06
1.2K0
干货 | Python+MySQL数据库操作
Github | 推荐一个Python脚本集合项目
用python写小脚本是一件好玩的事情,因为不是个大活儿,而且能解决眼边前十分繁琐的事情,这种轻松且便宜的代码颇受人民群众的欢迎~有点生活小妙招的意味
bugsuse
2020/12/16
1.7K0
Github | 推荐一个Python脚本集合项目
手把手教你如何使用 Python 操作 Mysql 进行数据库的 diff
项目工作中,我们会遇到测试环境特别多的情况,例如:n套beta环境,多套预生产环境,多套uat环境等各种测试环境。为保证所有测试环境表结构上的一致性,如果只是单纯地靠人工来检查并更新,未免显得太过吃力且效率低下,还容易在实施的过程中出现遗漏的问题。
Wu_Candy
2022/07/04
9690
Python Mysql数据库基础
在python的使用中,我们不可避免需要使用数据库来完成数据的存储操作。python基于庞大的库,能过轻松进行数据库的使用以及表的各类操作。
摸鱼的G
2023/02/22
9500
获取impala下所有的数据库建表语句
20191108今天有想出来一个方法,有点繁杂,但也是可以的,用impala-shell
全栈程序员站长
2022/10/04
1.1K0
获取impala下所有的数据库建表语句
基于查询的MySQL到ES的数据同步
个别场景下,开发提需求,需要把某个MySQL里面指定数据同步到ES中,希望能有一个通用的脚本,用于特殊场景下的补数据或者临时性的数据同步。
保持热爱奔赴山海
2024/04/01
2450
教你如何优雅地用Python连接MySQL数据库
不管是机器学习、web开发或者爬虫,数据库都是绕不过去的。那么今天我们就来介绍Python如何Mysql数据库进行连接以及数据的交换。主要分为以下几个方面:
CDA数据分析师
2019/07/19
4.4K0
教你如何优雅地用Python连接MySQL数据库
Python入门系列(十一)一篇搞定python操作MySQL数据库
开始 安装MySQL驱动 $ python -m pip install mysql-connector-python 测试MySQL连接器 import mysql.connector 测试MySQL连接 import mysql.connector mydb = mysql.connector.connect( host="localhost", user="yourusername", password="yourpassword" ) print(mydb) 创建数据库 impo
用户10002156
2022/09/05
5180
Python构建私有代理IP库
至此我们就利用Python构建了一个属于自己的私有代理库,在进行爬去的时候可方便从数据库中获取使用。
KaliArch
2018/05/31
1.7K1
Python构建私有代理IP库
python 长连接 mysql数据库
python链接mysql中没有长链接的概念,但我们可以利用mysql的ping机制,来实现长链接功能
py3study
2020/01/07
2.5K0
推荐阅读
相关推荐
python mysql连接操作(增删改查)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文