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

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

黄舟
黄舟원래의
2017-03-18 14:39:541996검색

1. 스토리

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

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

    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 중국어 웹사이트의 기타 관련 기사를 참조하세요!