plugin_name: go.d.plugin
modules:
  - &module
    meta: &meta
      id: collector-go.d.plugin-mysql
      plugin_name: go.d.plugin
      module_name: mysql
      monitored_instance:
        name: MySQL
        link: https://www.mysql.com/
        categories:
          - data-collection.database-servers
        icon_filename: mysql.svg
      related_resources:
        integrations:
          list:
            - plugin_name: apps.plugin
              module_name: apps
            - plugin_name: cgroups.plugin
              module_name: cgroups
      info_provided_to_referring_integrations:
        description: ""
      keywords:
        - "db"
        - "database"
        - "mysql"
        - "maria"
        - "mariadb"
        - "sql"
      most_popular: true
    overview:
      multi_instance: true
      data_collection:
        metrics_description: |
          This collector monitors the health and performance of MySQL servers and collects general statistics, replication and user metrics.
        method_description: |
          It connects to the MySQL instance via a TCP or UNIX socket and executes the following commands:
          
          Executed queries:
          
          - `SELECT VERSION();`
          - `SHOW GLOBAL STATUS;`
          - `SHOW GLOBAL VARIABLES;`
          - `SHOW SLAVE STATUS;` or `SHOW ALL SLAVES STATUS;` (MariaDBv10.2+) or `SHOW REPLICA STATUS;` (MySQL 8.0.22+)
          - `SHOW USER_STATISTICS;` (MariaDBv10.1.1+)
          - `SELECT TIME,USER FROM INFORMATION_SCHEMA.PROCESSLIST;`
      default_behavior:
        auto_detection:
          description: |
            By default, it detects instances running on localhost by trying to connect as root and netdata using known MySQL TCP sockets:

            - 127.0.0.1:3306
            - "[::1]:3306"
        limits:
          description: ""
        performance_impact:
          description: ""
      additional_permissions:
        description: ""
      supported_platforms:
        include: []
        exclude: []
    setup:
      prerequisites:
        list:
          - title: Create netdata user
            description: |
              A user account should have the
              following [permissions](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html):
              
              - [`USAGE`](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_usage)
              - [`REPLICATION CLIENT`](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_replication-client)
              - [`PROCESS`](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_process)
              
              To create the `netdata` user with these permissions, execute the following in the MySQL shell:
              
              ```mysql
              CREATE USER 'netdata'@'localhost';
              GRANT USAGE, REPLICATION CLIENT, PROCESS ON *.* TO 'netdata'@'localhost';
              FLUSH PRIVILEGES;
              ```
              
              The `netdata` user will have the ability to connect to the MySQL server on localhost without a password. It will only
              be able to gather statistics without being able to alter or affect operations in any way.
      configuration:
        file:
          name: go.d/mysql.conf
        options:
          description: |
            The following options can be defined globally: update_every, autodetection_retry.
          folding:
            title: Config options
            enabled: true
          list:
            - name: update_every
              description: Data collection frequency.
              default_value: 5
              required: false
            - name: autodetection_retry
              description: Recheck interval in seconds. Zero means no recheck will be scheduled.
              default_value: 0
              required: false
            - name: dsn
              description: MySQL server DSN (Data Source Name). See [DSN syntax](https://github.com/go-sql-driver/mysql#dsn-data-source-name).
              default_value: root@tcp(localhost:3306)/
              required: true
            - name: my.cnf
              description: Specifies the my.cnf file to read the connection settings from the [client] section.
              default_value: ""
              required: false
            - name: timeout
              description: Query timeout in seconds.
              default_value: 1
              required: false
        examples:
          folding:
            title: Config
            enabled: true
          list:
            - name: TCP socket
              description: An example configuration.
              config: |
                jobs:
                  - name: local
                    dsn: netdata@tcp(127.0.0.1:3306)/
            - name: Unix socket
              description: An example configuration.
              config: |
                jobs:
                  - name: local
                    dsn: netdata@unix(/var/lib/mysql/mysql.sock)/
            - name: Connection with password
              description: An example configuration.
              config: |
                jobs:
                  - name: local
                    dsn: netconfig:password@tcp(127.0.0.1:3306)/
            - name: my.cnf
              description: An example configuration.
              config: |
                jobs:
                  - name: local
                    my.cnf: '/etc/my.cnf'
            - name: Multi-instance
              description: |
                > **Note**: When you define multiple jobs, their names must be unique.
                
                Local and remote instances.
              config: |
                jobs:
                  - name: local
                    dsn: netdata@tcp(127.0.0.1:3306)/
                
                  - name: remote
                    dsn: netconfig:password@tcp(203.0.113.0:3306)/
    troubleshooting:
      problems:
        list: []
    alerts:
      - name: mysql_10s_slow_queries
        metric: mysql.queries
        info: number of slow queries in the last 10 seconds
        link: https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf
      - name: mysql_10s_table_locks_immediate
        metric: mysql.table_locks
        info: number of table immediate locks in the last 10 seconds
        link: https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf
      - name: mysql_10s_table_locks_waited
        metric: mysql.table_locks
        info: number of table waited locks in the last 10 seconds
        link: https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf
      - name: mysql_10s_waited_locks_ratio
        metric: mysql.table_locks
        info: ratio of waited table locks over the last 10 seconds
        link: https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf
      - name: mysql_connections
        metric: mysql.connections_active
        info: client connections utilization
        link: https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf
      - name: mysql_replication
        metric: mysql.slave_status
        info: "replication status (0: stopped, 1: working)"
        link: https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf
      - name: mysql_replication_lag
        metric: mysql.slave_behind
        info: difference between the timestamp of the latest transaction processed by the SQL thread and the timestamp of the same transaction when it was processed on the master
        link: https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf
      - name: mysql_galera_cluster_size_max_2m
        metric: mysql.galera_cluster_size
        info: maximum galera cluster size in the last 2 minutes starting one minute ago
        link: https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf
      - name: mysql_galera_cluster_size
        metric: mysql.galera_cluster_size
        info: current galera cluster size, compared to the maximum size in the last 2 minutes
        link: https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf
      - name: mysql_galera_cluster_state_warn
        metric: mysql.galera_cluster_state
        info: galera node state is either Donor/Desynced or Joined
        link: https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf
      - name: mysql_galera_cluster_state_crit
        metric: mysql.galera_cluster_state
        info: galera node state is either Undefined or Joining or Error
        link: https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf
      - name: mysql_galera_cluster_status
        metric: mysql.galera_cluster_status
        info: galera node is part of a nonoperational component. This occurs in cases of multiple membership changes that result in a loss of Quorum or in cases of split-brain situations.
        link: https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf
    metrics:
      folding:
        title: Metrics
        enabled: false
      description: ""
      availability:
        - MySQL
        - MariaDB
        - Percona
      scopes:
        - name: global
          description: These metrics refer to the entire monitored application.
          labels: []
          metrics:
            - name: mysql.net
              description: Bandwidth
              unit: kilobits/s
              chart_type: area
              dimensions:
                - name: in
                - name: out
            - name: mysql.queries
              description: Queries
              unit: queries/s
              chart_type: line
              dimensions:
                - name: queries
                - name: questions
                - name: slow_queries
            - name: mysql.queries_type
              description: Queries By Type
              unit: queries/s
              chart_type: stacked
              dimensions:
                - name: select
                - name: delete
                - name: update
                - name: insert
                - name: replace
            - name: mysql.handlers
              description: Handlers
              unit: handlers/s
              chart_type: line
              dimensions:
                - name: commit
                - name: delete
                - name: prepare
                - name: read_first
                - name: read_key
                - name: read_next
                - name: read_prev
                - name: read_rnd
                - name: read_rnd_next
                - name: rollback
                - name: savepoint
                - name: savepointrollback
                - name: update
                - name: write
            - name: mysql.table_open_cache_overflows
              description: Table open cache overflows
              unit: overflows/s
              chart_type: line
              dimensions:
                - name: open_cache
            - name: mysql.table_locks
              description: Table Locks
              unit: locks/s
              chart_type: line
              dimensions:
                - name: immediate
                - name: waited
            - name: mysql.join_issues
              description: Table Select Join Issues
              unit: joins/s
              chart_type: line
              dimensions:
                - name: full_join
                - name: full_range_join
                - name: range
                - name: range_check
                - name: scan
            - name: mysql.sort_issues
              description: Table Sort Issues
              unit: issues/s
              chart_type: line
              dimensions:
                - name: merge_passes
                - name: range
                - name: scan
            - name: mysql.tmp
              description: Tmp Operations
              unit: events/s
              chart_type: line
              dimensions:
                - name: disk_tables
                - name: files
                - name: tables
            - name: mysql.connections
              description: Connections
              unit: connections/s
              chart_type: line
              dimensions:
                - name: all
                - name: aborted
            - name: mysql.connections_active
              description: Active Connections
              unit: connections
              chart_type: line
              dimensions:
                - name: active
                - name: limit
                - name: max_active
            - name: mysql.threads
              description: Threads
              unit: threads
              chart_type: line
              dimensions:
                - name: connected
                - name: cached
                - name: running
            - name: mysql.threads_created
              description: Threads Creation Rate
              unit: threads/s
              chart_type: line
              dimensions:
                - name: created
            - name: mysql.thread_cache_misses
              description: Threads Cache Misses
              unit: misses
              chart_type: line
              dimensions:
                - name: misses
            - name: mysql.innodb_io
              description: InnoDB I/O Bandwidth
              unit: KiB/s
              chart_type: line
              dimensions:
                - name: read
                - name: write
            - name: mysql.innodb_io_ops
              description: InnoDB I/O Operations
              unit: operations/s
              chart_type: line
              dimensions:
                - name: reads
                - name: writes
                - name: fsyncs
            - name: mysql.innodb_io_pending_ops
              description: InnoDB Pending I/O Operations
              unit: operations
              chart_type: line
              dimensions:
                - name: reads
                - name: writes
                - name: fsyncs
            - name: mysql.innodb_log
              description: InnoDB Log Operations
              unit: operations/s
              chart_type: line
              dimensions:
                - name: waits
                - name: write_requests
                - name: writes
            - name: mysql.innodb_cur_row_lock
              description: InnoDB Current Row Locks
              unit: operations
              chart_type: line
              dimensions:
                - name: current waits
            - name: mysql.innodb_rows
              description: InnoDB Row Operations
              unit: operations/s
              chart_type: area
              dimensions:
                - name: inserted
                - name: read
                - name: updated
                - name: deleted
            - name: mysql.innodb_buffer_pool_pages
              description: InnoDB Buffer Pool Pages
              unit: pages
              chart_type: line
              dimensions:
                - name: data
                - name: dirty
                - name: free
                - name: misc
                - name: total
            - name: mysql.innodb_buffer_pool_pages_flushed
              description: InnoDB Buffer Pool Flush Pages Requests
              unit: requests/s
              chart_type: line
              dimensions:
                - name: flush_pages
            - name: mysql.innodb_buffer_pool_bytes
              description: InnoDB Buffer Pool Bytes
              unit: MiB
              chart_type: line
              dimensions:
                - name: data
                - name: dirty
            - name: mysql.innodb_buffer_pool_read_ahead
              description: InnoDB Buffer Pool Read Pages
              unit: pages/s
              chart_type: line
              dimensions:
                - name: all
                - name: evicted
            - name: mysql.innodb_buffer_pool_read_ahead_rnd
              description: InnoDB Buffer Pool Random Read-Aheads
              unit: operations/s
              chart_type: line
              dimensions:
                - name: read-ahead
            - name: mysql.innodb_buffer_pool_ops
              description: InnoDB Buffer Pool Operations
              unit: operations/s
              chart_type: area
              dimensions:
                - name: disk_reads
                - name: wait_free
            - name: mysql.innodb_os_log
              description: InnoDB OS Log Pending Operations
              unit: operations
              chart_type: line
              dimensions:
                - name: fsyncs
                - name: writes
            - name: mysql.innodb_os_log_fsync_writes
              description: InnoDB OS Log Operations
              unit: operations/s
              chart_type: line
              dimensions:
                - name: fsyncs
            - name: mysql.innodb_os_log_io
              description: InnoDB OS Log Bandwidth
              unit: KiB/s
              chart_type: area
              dimensions:
                - name: write
            - name: mysql.innodb_deadlocks
              description: InnoDB Deadlocks
              unit: operations/s
              chart_type: area
              dimensions:
                - name: deadlocks
            - name: mysql.files
              description: Open Files
              unit: files
              chart_type: line
              dimensions:
                - name: files
            - name: mysql.files_rate
              description: Opened Files Rate
              unit: files/s
              chart_type: line
              dimensions:
                - name: files
            - name: mysql.connection_errors
              description: Connection Errors
              unit: errors/s
              chart_type: line
              dimensions:
                - name: accept
                - name: internal
                - name: max
                - name: peer_addr
                - name: select
                - name: tcpwrap
            - name: mysql.opened_tables
              description: Opened Tables
              unit: tables/s
              chart_type: line
              dimensions:
                - name: tables
            - name: mysql.open_tables
              description: Open Tables
              unit: tables
              chart_type: area
              dimensions:
                - name: cache
                - name: tables
            - name: mysql.process_list_fetch_query_duration
              description: Process List Fetch Duration
              unit: milliseconds
              chart_type: line
              dimensions:
                - name: duration
            - name: mysql.process_list_queries_count
              description: Queries Count
              unit: queries
              chart_type: stacked
              dimensions:
                - name: system
                - name: user
            - name: mysql.process_list_longest_query_duration
              description: Longest Query Duration
              unit: seconds
              chart_type: line
              dimensions:
                - name: duration
            - name: mysql.qcache_ops
              description: QCache Operations
              unit: queries/s
              chart_type: line
              dimensions:
                - name: hits
                - name: lowmem_prunes
                - name: inserts
                - name: not_cached
            - name: mysql.qcache
              description: QCache Queries in Cache
              unit: queries
              chart_type: line
              dimensions:
                - name: queries
            - name: mysql.qcache_freemem
              description: QCache Free Memory
              unit: MiB
              chart_type: area
              dimensions:
                - name: free
            - name: mysql.qcache_memblocks
              description: QCache Memory Blocks
              unit: blocks
              chart_type: line
              dimensions:
                - name: free
                - name: total
            - name: mysql.galera_writesets
              description: Replicated Writesets
              unit: writesets/s
              chart_type: line
              dimensions:
                - name: rx
                - name: tx
            - name: mysql.galera_bytes
              description: Replicated Bytes
              unit: KiB/s
              chart_type: area
              dimensions:
                - name: rx
                - name: tx
            - name: mysql.galera_queue
              description: Galera Queue
              unit: writesets
              chart_type: line
              dimensions:
                - name: rx
                - name: tx
            - name: mysql.galera_conflicts
              description: Replication Conflicts
              unit: transactions
              chart_type: area
              dimensions:
                - name: bf_aborts
                - name: cert_fails
            - name: mysql.galera_flow_control
              description: Flow Control
              unit: ms
              chart_type: area
              dimensions:
                - name: paused
            - name: mysql.galera_cluster_status
              description: Cluster Component Status
              unit: status
              chart_type: line
              dimensions:
                - name: primary
                - name: non_primary
                - name: disconnected
            - name: mysql.galera_cluster_state
              description: Cluster Component State
              unit: state
              chart_type: line
              dimensions:
                - name: undefined
                - name: joining
                - name: donor
                - name: joined
                - name: synced
                - name: error
            - name: mysql.galera_cluster_size
              description: Number of Nodes in the Cluster
              unit: nodes
              chart_type: line
              dimensions:
                - name: nodes
            - name: mysql.galera_cluster_weight
              description: The Total Weight of the Current Members in the Cluster
              unit: weight
              chart_type: line
              dimensions:
                - name: weight
            - name: mysql.galera_connected
              description: Cluster Connection Status
              unit: boolean
              chart_type: line
              dimensions:
                - name: connected
            - name: mysql.galera_ready
              description: Accept Queries Readiness Status
              unit: boolean
              chart_type: line
              dimensions:
                - name: ready
            - name: mysql.galera_open_transactions
              description: Open Transactions
              unit: transactions
              chart_type: line
              dimensions:
                - name: open
            - name: mysql.galera_thread_count
              description: Total Number of WSRep (applier/rollbacker) Threads
              unit: threads
              chart_type: line
              dimensions:
                - name: threads
            - name: mysql.key_blocks
              description: MyISAM Key Cache Blocks
              unit: blocks
              chart_type: line
              dimensions:
                - name: unused
                - name: used
                - name: not_flushed
            - name: mysql.key_requests
              description: MyISAM Key Cache Requests
              unit: requests/s
              chart_type: area
              dimensions:
                - name: reads
                - name: writes
            - name: mysql.key_disk_ops
              description: MyISAM Key Cache Disk Operations
              unit: operations/s
              chart_type: area
              dimensions:
                - name: reads
                - name: writes
            - name: mysql.binlog_cache
              description: Binlog Cache
              unit: transactions/s
              chart_type: line
              dimensions:
                - name: disk
                - name: all
            - name: mysql.binlog_stmt_cache
              description: Binlog Statement Cache
              unit: statements/s
              chart_type: line
              dimensions:
                - name: disk
                - name: all
        - name: connection
          description: These metrics refer to the replication connection.
          labels: []
          metrics:
            - name: mysql.slave_behind
              description: Slave Behind Seconds
              unit: seconds
              chart_type: line
              dimensions:
                - name: seconds
            - name: mysql.slave_status
              description: I/O / SQL Thread Running State
              unit: boolean
              chart_type: line
              dimensions:
                - name: sql_running
                - name: io_running
        - name: user
          description: These metrics refer to the MySQL user.
          labels:
            - name: user
              description: username
          metrics:
            - name: mysql.userstats_cpu
              description: User CPU Time
              unit: percentage
              chart_type: line
              availability:
                - MariaDB
                - Percona
              dimensions:
                - name: used
            - name: mysql.userstats_rows
              description: User Rows Operations
              unit: operations/s
              chart_type: stacked
              availability:
                - MariaDB
                - Percona
              dimensions:
                - name: read
                - name: sent
                - name: updated
                - name: inserted
                - name: deleted
            - name: mysql.userstats_commands
              description: User Commands
              unit: commands/s
              chart_type: stacked
              availability:
                - MariaDB
                - Percona
              dimensions:
                - name: select
                - name: update
                - name: other
            - name: mysql.userstats_denied_commands
              description: User Denied Commands
              unit: commands/s
              chart_type: stacked
              availability:
                - MariaDB
                - Percona
              dimensions:
                - name: denied
            - name: mysql.userstats_created_transactions
              description: User Transactions
              unit: transactions/s
              chart_type: area
              availability:
                - MariaDB
                - Percona
              dimensions:
                - name: commit
                - name: rollback
            - name: mysql.userstats_binlog_written
              description: User Binlog Written
              unit: B/s
              chart_type: line
              availability:
                - MariaDB
                - Percona
              dimensions:
                - name: written
            - name: mysql.userstats_empty_queries
              description: User Empty Queries
              unit: queries/s
              chart_type: line
              availability:
                - MariaDB
                - Percona
              dimensions:
                - name: empty
            - name: mysql.userstats_connections
              description: User Created Connections
              unit: connections/s
              chart_type: line
              availability:
                - MariaDB
                - Percona
              dimensions:
                - name: created
            - name: mysql.userstats_lost_connections
              description: User Lost Connections
              unit: connections/s
              chart_type: line
              availability:
                - MariaDB
                - Percona
              dimensions:
                - name: lost
            - name: mysql.userstats_denied_connections
              description: User Denied Connections
              unit: connections/s
              chart_type: line
              availability:
                - MariaDB
                - Percona
              dimensions:
                - name: denied
  - <<: *module
    meta:
      <<: *meta
      id: collector-go.d.plugin-mariadb
      monitored_instance:
        name: MariaDB
        link: https://mariadb.org/
        icon_filename: mariadb.svg
        categories:
          - data-collection.database-servers
  - <<: *module
    meta:
      <<: *meta
      id: collector-go.d.plugin-percona_mysql
      most_popular: false
      monitored_instance:
        name: Percona MySQL
        link: https://www.percona.com/software/mysql-database/percona-server
        icon_filename: percona.svg
        categories:
          - data-collection.database-servers
