찾다
데이터 베이스MySQL 튜토리얼MySQL 모니터링 중 테이블 정보를 수집하는 코드에 대한 자세한 설명(그림 및 텍스트)

1. 스토리

지난 1년 동안 도서관의 특정 테이블의 월별 데이터 양 증가에 대해 자주 질문을 받을 수 있습니다. 물론, 테이블을 월 단위로 나누어서 작성하면 더 쉬울 것입니다show table status. 큰 테이블이 하나뿐이라면 모두가 쉬는 외로운 밤에 SQL 통계를 실행해야 할 수도 있습니다. 현재 테이블만 가져옵니다. 정보, 기록 정보는 추적할 수 없습니다.

또한 DBA로서 용량 계획을 위해서는 데이터베이스 공간의 증가도 예측해야 합니다. 우리가 다루고 있는 테이블 정보는 주로 다음과 같습니다.

  1. 테이블 데이터 크기(DATA_LENGTH)

  2. 인덱스 크기(INDEX_LENGTH)

  3. 행 수(ROWS)

  4. 현재 자동 증가 값(AUTO_INCREMENT, 있는 경우)

아직 mysql이 모니터링 도구에 이러한 지표를 제공하는 것을 보지 못했습니다. 이 정보는 너무 자주 수집할 필요는 없고, 그 결과는 추정일 뿐 정확하지 않을 수 있으므로, 글로벌하고 장기적인 관점에서 테이블을 모니터링(수집)하기 위함입니다.

이 글에서 소개하려고 쓴 수집 도구는 그룹 내 기존 모니터링 시스템을 기반으로 한다:

  • InfluxDB: 시계열 데이터베이스, 스토리지 모니터링 데이터

  • Grafana: 데이터 표시 패널

  • Telegraf: 정보를 수집하는 에이전트
    telegraf의 최신 MySQL 플러그인을 확인하세요 , 처음에는 매우 기뻤습니다. 테이블 스키마 통계 및 정보 스키마 자동 증가 열 수집을 지원합니다. 시도해 봤는데 데이터가 있지만 앞서 언급했듯이 자체 증가하는 값을 제외하면 다른 모든 것은 추정치입니다. Telegraf의 수집 빈도가 너무 높아 하루에 두 번이면 충분할 것입니다. 🎜> 제공되는 옵션이 코드에서 수정되었습니다. 유일한 방법은 전역 상태 모니터링의 빈도를 줄이는 것입니다. 다만, 다른 모니터링 지표와 두 개의 IntervalSlow 구성 파일으로 분리하고 각각 수집 간격을 정의하면 구현할 수 있습니다.

마지막으로 Python을 사용하여 직접 빌드하고 influxdb에 보고할 계획입니다.)

2. 개념

전체 코드는 다음을 참조하세요. GitHub 프로젝트 주소: DBschema_gather

구현도 매우 간단합니다.
라이브러리의 information_schemaCOLUMNS 테이블을 쿼리하면 됩니다. TABLES

SELECT
    IFNULL(@@hostname, @@server_id) SERVER_NAME,
    %s as HOST,
    t.TABLE_SCHEMA,
    t.TABLE_NAME,
    t.TABLE_ROWS,
    t.DATA_LENGTH,
    t.INDEX_LENGTH,
    t.AUTO_INCREMENT,
  c.COLUMN_NAME,
  c.DATA_TYPE,
  LOCATE('unsigned', c.COLUMN_TYPE) COL_UNSIGNED
  # CONCAT(c.DATA_TYPE, IF(LOCATE('unsigned', c.COLUMN_TYPE)=0, '', '_unsigned'))
FROM
    information_schema.`TABLES` t
LEFT JOIN information_schema.`COLUMNS` c ON t.TABLE_SCHEMA = c.TABLE_SCHEMA
AND t.TABLE_NAME = c.TABLE_NAME
AND c.EXTRA = 'auto_increment'
WHERE
    t.TABLE_SCHEMA NOT IN (
        'mysql',
        'information_schema',
        'performance_schema',
        'sys'
    )
AND t.TABLE_TYPE = 'BASE TABLE'

에 대해, 현재의 성장이 어디에 있는지 주목하는 것 외에도 auto_increment의 최대값과 비교하여 여유 공간이 얼마나 되는지에도 관심이 있습니다. 그래서 int / bigint 컬럼은 현재 사용되는 비율을 저장하기 위해 계산되었습니다. autoIncrUsage

그런 다음 InfluxDB의 Python 클라이언트를 사용하여 일괄적으로 influxdb에 저장합니다. InfluxDB가 없으면 결과는

json으로 인쇄됩니다. 이는 Zabbix 및 Open-Falcon과 같은 모니터링 도구에서 일반적으로 지원되는 형식입니다.

마지막 단계는 Grafana를 사용하여 influxdb 데이터 소스에서 그래프를 그리는 것입니다.

3. 사용법

  1. 환경

    Python 2.7 환경에서 작성되었으며, 2.6과 3.x는 테스트되지 않았습니다.

을 실행하려면 두 개의 라이브러리

MySQLdb가 필요합니다. influxdb

$ sudo pip install mysql-python influxdb

  1. 구성


    구성 파일settings_dbs.py


  • : 목록에는 수집해야 하는 MySQL 인스턴스 테이블 정보가 저장됩니다. 주소, 포트, 사용자 이름, 비밀번호DBLIST_INFO테이블을 선택하려면 권한이 필요합니다. 그렇지 않으면 해당 정보를 볼 수 없습니다.

  • : influxdb 연결 정보는 데이터베이스 이름을 미리 InfluxDB_INFOmysql_info 생성하고
    로 설정하세요. 출력 결과는 json이 될 수 있습니다.None

  • 데이터베이스와 스토리지를 생성해 주세요. influxdb 전략

    2년간 보관, 1개의 복제본 세트: (필요에 따라 조정)

    CREATE DATABASE "mysql_info"
    CREATE RETENTION POLICY "mysql_info_schema" ON "mysql_info" DURATION 730d REPLICATION 1 DEFAULT
  • 다음과 유사한 큰 정보 보기:


    MySQL 모니터링 중 테이블 정보를 수집하는 코드에 대한 자세한 설명(그림 및 텍스트)

  1. 넣기 crontab 실행

    은 모니터링에 사용되는 서버에 별도로 배치할 수도 있지만, 프로덕션 환경에서는 안전상의 이유로 mysql 인스턴스가 위치한 호스트에서 실행하는 것을 권장합니다.

일반적으로 도서관에서는 야간에 데이터 마이그레이션 작업을 진행합니다. 마이그레이션 전후에

를 실행하여 수집할 수 있습니다. 너무 자주 권장되지는 않습니다. mysql_schema_info.py

40 23,5,12,18 * * * /opt/DBschema_info/mysql_schema_info.py >> /tmp/collect_DBschema_info.log 2>&1

  1. 차트 생성

프로젝트 아래

를 Grafana 패널로 가져옵니다. 효과는 다음과 같습니다. grafana_table_stats.json
MySQL 모니터링 중 테이블 정보를 수집하는 코드에 대한 자세한 설명(그림 및 텍스트)
테이블 데이터 크기 및 행 수

MySQL 모니터링 중 테이블 정보를 수집하는 코드에 대한 자세한 설명(그림 및 텍스트)
1회당 행 수 증가 일, 자동 증가 사용량

4. 더보기

  1. 서브 데이터베이스 및 테이블의 경우 autoIncrUsage 테이블에서 전역 고유 ID를 계산할 수 없습니다

  2. 실제로 Simple을 구현하는 것은 매우 어렵습니다. 무엇보다 중요한 것은 이러한 정보 수집에 대한 인식을 일깨우는 것입니다

  3. Graphite 출력 형식을 추가할 수 있습니다

    위 내용은 MySQL 모니터링 중 테이블 정보를 수집하는 코드에 대한 자세한 설명(그림 및 텍스트)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    图文详解mysql架构原理图文详解mysql架构原理May 17, 2022 pm 05:54 PM

    本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,希望对大家有帮助。

    mysql的msi与zip版本有什么区别mysql的msi与zip版本有什么区别May 16, 2022 pm 04:33 PM

    mysql的msi与zip版本的区别:1、zip包含的安装程序是一种主动安装,而msi包含的是被installer所用的安装文件以提交请求的方式安装;2、zip是一种数据压缩和文档存储的文件格式,msi是微软格式的安装包。

    mysql怎么去掉第一个字符mysql怎么去掉第一个字符May 19, 2022 am 10:21 AM

    方法:1、利用right函数,语法为“update 表名 set 指定字段 = right(指定字段, length(指定字段)-1)...”;2、利用substring函数,语法为“select substring(指定字段,2)..”。

    mysql怎么替换换行符mysql怎么替换换行符Apr 18, 2022 pm 03:14 PM

    在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

    MySQL复制技术之异步复制和半同步复制MySQL复制技术之异步复制和半同步复制Apr 25, 2022 pm 07:21 PM

    本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于MySQL复制技术的相关问题,包括了异步复制、半同步复制等等内容,下面一起来看一下,希望对大家有帮助。

    mysql怎么将varchar转换为int类型mysql怎么将varchar转换为int类型May 12, 2022 pm 04:51 PM

    转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

    mysql怎么判断是否是数字类型mysql怎么判断是否是数字类型May 16, 2022 am 10:09 AM

    在mysql中,可以利用REGEXP运算符判断数据是否是数字类型,语法为“String REGEXP '[^0-9.]'”;该运算符是正则表达式的缩写,若数据字符中含有数字时,返回的结果是true,反之返回的结果是false。

    mysql怎么删除unique keymysql怎么删除unique keyMay 12, 2022 pm 03:01 PM

    在mysql中,可利用“ALTER TABLE 表名 DROP INDEX unique key名”语句来删除unique key;ALTER TABLE语句用于对数据进行添加、删除或修改操作,DROP INDEX语句用于表示删除约束操作。

    See all articles

    핫 AI 도구

    Undresser.AI Undress

    Undresser.AI Undress

    사실적인 누드 사진을 만들기 위한 AI 기반 앱

    AI Clothes Remover

    AI Clothes Remover

    사진에서 옷을 제거하는 온라인 AI 도구입니다.

    Undress AI Tool

    Undress AI Tool

    무료로 이미지를 벗다

    Clothoff.io

    Clothoff.io

    AI 옷 제거제

    AI Hentai Generator

    AI Hentai Generator

    AI Hentai를 무료로 생성하십시오.

    인기 기사

    R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
    3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. 최고의 그래픽 설정
    3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
    3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
    3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

    뜨거운 도구

    mPDF

    mPDF

    mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

    MinGW - Windows용 미니멀리스트 GNU

    MinGW - Windows용 미니멀리스트 GNU

    이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

    SublimeText3 영어 버전

    SublimeText3 영어 버전

    권장 사항: Win 버전, 코드 프롬프트 지원!

    DVWA

    DVWA

    DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

    VSCode Windows 64비트 다운로드

    VSCode Windows 64비트 다운로드

    Microsoft에서 출시한 강력한 무료 IDE 편집기