- 필수 기능
- 시작하기
- Glossary
- 표준 속성
- Guides
- Agent
- 통합
- 개방형텔레메트리
- 개발자
- API
- Datadog Mobile App
- CoScreen
- Cloudcraft
- 앱 내
- 서비스 관리
- 인프라스트럭처
- 애플리케이션 성능
- APM
- Continuous Profiler
- 스팬 시각화
- 데이터 스트림 모니터링
- 데이터 작업 모니터링
- 디지털 경험
- 소프트웨어 제공
- 보안
- AI Observability
- 로그 관리
- 관리
Supported OS
The MySQL integration tracks the performance of your MySQL instances. It collects metrics related to throughput, connections, errors, and InnoDB metrics.
Enable Database Monitoring (DBM) for enhanced insights into query performance and database health. In addition to the standard integration, Datadog DBM provides query-level metrics, live and historical query snapshots, wait event analysis, database load, and query explain plans.
MySQL version 5.6, 5.7, 8.0, and MariaDB versions 10.5, 10.6, 10.11 and 11.1 are supported.
The MySQL check is included in the Datadog Agent package. No additional installation is needed on your MySQL server.
Note: To install Database Monitoring for MySQL, select your hosting solution in the Database Monitoring documentation for instructions.
Proceed with the following steps in this guide only if you are installing the standard integration alone.
On each MySQL server, create a database user for the Datadog Agent.
The following instructions grant the Agent permission to login from any host using datadog@'%'
. You can restrict the datadog
user to be allowed to login only from localhost by using datadog@'localhost'
. See MySQL Adding Accounts, Assigning Privileges, and Dropping Accounts for more info.
Create the datadog
user with the following command:
mysql> CREATE USER 'datadog'@'%' IDENTIFIED BY '<UNIQUEPASSWORD>';
Query OK, 0 rows affected (0.00 sec)
Verify the user was created successfully using the following commands - replace <UNIQUEPASSWORD>
with the password you created above:
mysql -u datadog --password=<UNIQUEPASSWORD> -e "show status" | \
grep Uptime && echo -e "\033[0;32mMySQL user - OK\033[0m" || \
echo -e "\033[0;31mCannot connect to MySQL\033[0m"
The Agent needs a few privileges to collect metrics. Grant the datadog
user only the following limited privileges.
For MySQL versions 5.6 and 5.7, grant replication client
and set max_user_connections
with the following command:
mysql> GRANT REPLICATION CLIENT ON *.* TO 'datadog'@'%' WITH MAX_USER_CONNECTIONS 5;
Query OK, 0 rows affected, 1 warning (0.00 sec)
For MySQL 8.0 or greater, grant replication client
and set max_user_connections
with the following commands:
mysql> GRANT REPLICATION CLIENT ON *.* TO 'datadog'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER USER 'datadog'@'%' WITH MAX_USER_CONNECTIONS 5;
Query OK, 0 rows affected (0.00 sec)
Grant the datadog
user the process privilege:
mysql> GRANT PROCESS ON *.* TO 'datadog'@'%';
Query OK, 0 rows affected (0.00 sec)
Verify the replication client. Replace <UNIQUEPASSWORD>
with the password you created above:
mysql -u datadog --password=<UNIQUEPASSWORD> -e "show slave status" && \
echo -e "\033[0;32mMySQL grant - OK\033[0m" || \
echo -e "\033[0;31mMissing REPLICATION CLIENT grant\033[0m"
If enabled, metrics can be collected from the performance_schema
database by granting an additional privilege:
mysql> show databases like 'performance_schema';
+-------------------------------+
| Database (performance_schema) |
+-------------------------------+
| performance_schema |
+-------------------------------+
1 row in set (0.00 sec)
mysql> GRANT SELECT ON performance_schema.* TO 'datadog'@'%';
Query OK, 0 rows affected (0.00 sec)
Follow the instructions below to configure this check for an Agent running on a host. For containerized environments, see the Docker, Kubernetes, or ECS sections.
Note: For a full list of available configuration options, see the sample mysql.d/conf.yaml.
To configure this check for an Agent running on a host:
Edit the mysql.d/conf.yaml
file, in the conf.d/
folder at the root of your Agent’s configuration directory to start collecting your MySQL metrics and logs.
For a full list of available configuration options, see the sample mysql.d/conf.yaml
.
Add this configuration block to your mysql.d/conf.yaml
to collect your MySQL metrics:
init_config:
instances:
- host: 127.0.0.1
username: datadog
password: "<YOUR_CHOSEN_PASSWORD>" # from the CREATE USER step earlier
port: "<YOUR_MYSQL_PORT>" # e.g. 3306
options:
replication: false
galera_cluster: true
extra_status_metrics: true
extra_innodb_metrics: true
schema_size_metrics: false
disable_innodb_metrics: false
Note: Wrap your password in single quotes in case a special character is present.
To collect extra_performance_metrics
, your MySQL server must have performance_schema
enabled - otherwise set extra_performance_metrics
to false
. For more information on performance_schema
, see MySQL Performance Schema Quick Start.
Note: The datadog
user should be set up in the MySQL integration configuration as host: 127.0.0.1
instead of localhost
. Alternatively, you may also use sock
.
Restart the Agent to start sending MySQL metrics to Datadog.
Available for Agent versions >6.0
By default MySQL logs everything in /var/log/syslog
which requires root access to read. To make the logs more accessible, follow these steps:
Edit /etc/mysql/conf.d/mysqld_safe_syslog.cnf
and remove or comment the lines.
Edit /etc/mysql/my.cnf
and add following lines to enable general, error, and slow query logs:
[mysqld_safe]
log_error = /var/log/mysql/mysql_error.log
[mysqld]
general_log = on
general_log_file = /var/log/mysql/mysql.log
log_error = /var/log/mysql/mysql_error.log
slow_query_log = on
slow_query_log_file = /var/log/mysql/mysql_slow.log
long_query_time = 2
Save the file and restart MySQL using following commands:
service mysql restart
Make sure the Agent has read access on the /var/log/mysql
directory and all of the files within. Double-check your logrotate configuration to make sure those files are taken into account and that the permissions are correctly set there as well.
In /etc/logrotate.d/mysql-server
there should be something similar to:
/var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql_slow.log {
daily
rotate 7
missingok
create 644 mysql adm
Compress
}
Collecting logs is disabled by default in the Datadog Agent, enable it in your datadog.yaml
file:
logs_enabled: true
Add this configuration block to your mysql.d/conf.yaml
file to start collecting your MySQL logs:
logs:
- type: file
path: "<ERROR_LOG_FILE_PATH>"
source: mysql
service: "<SERVICE_NAME>"
- type: file
path: "<SLOW_QUERY_LOG_FILE_PATH>"
source: mysql
service: "<SERVICE_NAME>"
log_processing_rules:
- type: multi_line
name: new_slow_query_log_entry
pattern: "# Time:"
# If mysqld was started with `--log-short-format`, use:
# pattern: "# Query_time:"
# If using mysql version <5.7, use the following rules instead:
# - type: multi_line
# name: new_slow_query_log_entry
# pattern: "# Time|# User@Host"
# - type: exclude_at_match
# name: exclude_timestamp_only_line
# pattern: "# Time:"
- type: file
path: "<GENERAL_LOG_FILE_PATH>"
source: mysql
service: "<SERVICE_NAME>"
# For multiline logs, if they start by the date with the format yyyy-mm-dd uncomment the following processing rule
# log_processing_rules:
# - type: multi_line
# name: new_log_start_with_date
# pattern: \d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])
# If the logs start with a date with the format yymmdd but include a timestamp with each new second, rather than with each log, uncomment the following processing rule
# log_processing_rules:
# - type: multi_line
# name: new_logs_do_not_always_start_with_timestamp
# pattern: \t\t\s*\d+\s+|\d{6}\s+\d{,2}:\d{2}:\d{2}\t\s*\d+\s+
See the sample mysql.yaml for all available configuration options, including those for custom metrics.
To configure this check for an Agent running on a container:
Set Autodiscovery Integration Templates as Docker labels on your application container:
LABEL "com.datadoghq.ad.check_names"='["mysql"]'
LABEL "com.datadoghq.ad.init_configs"='[{}]'
LABEL "com.datadoghq.ad.instances"='[{"server": "%%host%%", "username": "datadog","password": "<UNIQUEPASSWORD>"}]'
See Autodiscovery template variables for details on using <UNIQUEPASSWORD>
as an environment variable instead of a label.
Collecting logs is disabled by default in the Datadog Agent. To enable it, see Docker Log Collection.
Then, set Log Integrations as Docker labels:
LABEL "com.datadoghq.ad.logs"='[{"source":"mysql","service":"mysql"}]'
To configure this check for an Agent running on Kubernetes:
Set Autodiscovery Integrations Templates as pod annotations on your application container. Alternatively, you can configure templates with a file, configmap, or key-value store.
Annotations v1 (for Datadog Agent < v7.36)
apiVersion: v1
kind: Pod
metadata:
name: mysql
annotations:
ad.datadoghq.com/mysql.check_names: '["mysql"]'
ad.datadoghq.com/mysql.init_configs: '[{}]'
ad.datadoghq.com/mysql.instances: |
[
{
"server": "%%host%%",
"username": "datadog",
"password": "<UNIQUEPASSWORD>"
}
]
labels:
name: mysql
spec:
containers:
- name: mysql
Annotations v2 (for Datadog Agent v7.36+)
apiVersion: v1
kind: Pod
metadata:
name: mysql
annotations:
ad.datadoghq.com/mysql.checks: |
{
"mysql": {
"instances": [
{
"server": "%%host%%",
"username": "datadog",
"password": "<UNIQUEPASSWORD>"
}
]
}
}
labels:
name: mysql
spec:
containers:
- name: mysql
See Autodiscovery template variables for details on using <UNIQUEPASSWORD>
as an environment variable instead of a label.
Collecting logs is disabled by default in the Datadog Agent. To enable it, see Kubernetes Log Collection.
Then, set Log Integrations as pod annotations. Alternatively, you can configure this with a file, configmap, or key-value store.
Annotations v1/v2
apiVersion: v1
kind: Pod
metadata:
name: mysql
annotations:
ad.datadoghq.com/mysql.logs: '[{"source": "mysql", "service": "mysql"}]'
labels:
name: mysql
To configure this check for an Agent running on ECS:
Set Autodiscovery Integrations Templates as Docker labels on your application container:
{
"containerDefinitions": [{
"name": "mysql",
"image": "mysql:latest",
"dockerLabels": {
"com.datadoghq.ad.check_names": "[\"mysql\"]",
"com.datadoghq.ad.init_configs": "[{}]",
"com.datadoghq.ad.instances": "[{\"server\": \"%%host%%\", \"username\": \"datadog\",\"password\": \"<UNIQUEPASSWORD>\"}]"
}
}]
}
See Autodiscovery template variables for details on using <UNIQUEPASSWORD>
as an environment variable instead of a label.
Available for Agent versions >6.0
Collecting logs is disabled by default in the Datadog Agent. To enable it, see ECS Log Collection.
Then, set Log Integrations as Docker labels:
{
"containerDefinitions": [{
"name": "mysql",
"image": "mysql:latest",
"dockerLabels": {
"com.datadoghq.ad.logs": "[{\"source\":\"mysql\",\"service\":\"mysql\"}]"
}
}]
}
Run the Agent’s status subcommand and look for mysql
under the Checks section.
mysql.binlog.cache_disk_use (gauge) | The number of transactions that used the temporary binary log cache but that exceeded the value of binlog_cache_size and used a temporary file to store statements from the transaction.Shown as transaction |
mysql.binlog.cache_use (gauge) | The number of transactions that used the binary log cache. Shown as transaction |
mysql.binlog.disk_use (gauge) | Total binary log file size. Shown as byte |
mysql.galera.wsrep_cert_deps_distance (gauge) | Shows the average distance between the lowest and highest sequence number, or seqno, values that the node can possibly apply in parallel. |
mysql.galera.wsrep_cluster_size (gauge) | The current number of nodes in the Galera cluster. Shown as node |
mysql.galera.wsrep_flow_control_paused (gauge) | Shows the fraction of the time, since FLUSH STATUS was last called, that the node paused due to Flow Control. Shown as fraction |
mysql.galera.wsrep_flow_control_paused_ns (count) | Shows the pause time due to Flow Control, in nanoseconds. Shown as nanosecond |
mysql.galera.wsrep_flow_control_recv (count) | Shows the number of times the galera node has received a pausing Flow Control message from others |
mysql.galera.wsrep_flow_control_sent (count) | Shows the number of times the galera node has sent a pausing Flow Control message to others |
mysql.galera.wsrep_local_cert_failures (count) | Total number of local transactions that failed certification test. |
mysql.galera.wsrep_local_recv_queue (gauge) | Shows the current (instantaneous) size of the local received queue. |
mysql.galera.wsrep_local_recv_queue_avg (gauge) | Shows the average size of the local received queue since the last FLUSH STATUS query. |
mysql.galera.wsrep_local_send_queue (gauge) | Show the current (instantaneous) size of the send queue length since the last FLUSH STATUS query. |
mysql.galera.wsrep_local_send_queue_avg (gauge) | Show an average for the send queue length since the last FLUSH STATUS query. |
mysql.galera.wsrep_local_state (gauge) | Internal Galera cluster state number |
mysql.galera.wsrep_received (gauge) | Total number of write-sets received from other nodes. |
mysql.galera.wsrep_received_bytes (gauge) | Total size (in bytes) of writesets received from other nodes. |
mysql.galera.wsrep_replicated_bytes (gauge) | Total size (in bytes) of writesets sent to other nodes. |
mysql.info.schema.size (gauge) | Size of schemas in MiB Shown as mebibyte |
mysql.info.table.data_size (gauge) | Size of tables data in MiB Shown as mebibyte |
mysql.info.table.index_size (gauge) | Size of tables index in MiB Shown as mebibyte |
mysql.info.table.rows.changed (count) | Total number of rows changed per table (Percona userstat only) Shown as row |
mysql.info.table.rows.read (count) | Total number of rows read per table (Percona userstat only) Shown as row |
mysql.innodb.active_transactions (gauge) | The number of active transactions on InnoDB tables. Shown as operation |
mysql.innodb.buffer_pool_data (gauge) | The total number of bytes in the InnoDB buffer pool containing data. The number includes both dirty and clean pages. Shown as byte |
mysql.innodb.buffer_pool_dirty (gauge) | The total current number of bytes held in dirty pages in the InnoDB buffer pool. Shown as byte |
mysql.innodb.buffer_pool_free (gauge) | The number of free bytes in the InnoDB Buffer Pool. Shown as byte |
mysql.innodb.buffer_pool_pages_data (gauge) | The number of pages in the InnoDB buffer pool containing data. The number includes both dirty and clean pages. Shown as page |
mysql.innodb.buffer_pool_pages_dirty (gauge) | The current number of dirty pages in the InnoDB buffer pool. Shown as page |
mysql.innodb.buffer_pool_pages_flushed (gauge) | The number of requests to flush pages from the InnoDB buffer pool. Shown as page |
mysql.innodb.buffer_pool_pages_free (gauge) | The number of free pages in the InnoDB buffer pool. Shown as page |
mysql.innodb.buffer_pool_pages_total (gauge) | The total size of the InnoDB buffer pool, in pages. Shown as page |
mysql.innodb.buffer_pool_read_ahead (gauge) | The number of pages read into the InnoDB buffer pool by the read-ahead background thread. Shown as page |
mysql.innodb.buffer_pool_read_ahead_evicted (gauge) | The number of pages read into the InnoDB buffer pool by the read-ahead background thread that were subsequently evicted without having been accessed by queries. Shown as page |
mysql.innodb.buffer_pool_read_ahead_rnd (gauge) | The number of random read-aheads initiated by InnoDB. This happens when a query scans a large portion of a table but in random order. Shown as operation |
mysql.innodb.buffer_pool_read_requests (gauge) | The number of logical read requests. Shown as read |
mysql.innodb.buffer_pool_reads (gauge) | The number of logical reads that InnoDB could not satisfy from the buffer pool, and had to read directly from disk. Shown as read |
mysql.innodb.buffer_pool_total (gauge) | The total number of bytes in the InnoDB Buffer Pool. Shown as byte |
mysql.innodb.buffer_pool_used (gauge) | The number of used bytes in the InnoDB Buffer Pool. Shown as byte |
mysql.innodb.buffer_pool_utilization (gauge) | The utilization of the InnoDB Buffer Pool. Shown as fraction |
mysql.innodb.buffer_pool_wait_free (count) | When InnoDB needs to read or create a page and no clean pages are available, InnoDB flushes some dirty pages first and waits for that operation to finish. This counter counts instances of these waits. Shown as wait |
mysql.innodb.buffer_pool_write_requests (gauge) | The number of writes done to the InnoDB buffer pool. Shown as write |
mysql.innodb.checkpoint_age (gauge) | Checkpoint age as shown in the LOG section of the SHOW ENGINE INNODB STATUS output. |
mysql.innodb.current_row_locks (gauge) | The number of current row locks. Shown as lock |
mysql.innodb.current_transactions (gauge) | Current InnoDB transactions Shown as transaction |
mysql.innodb.data_fsyncs (gauge) | The number of fsync() operations per second. Shown as operation |
mysql.innodb.data_pending_fsyncs (gauge) | The current number of pending fsync() operations. Shown as operation |
mysql.innodb.data_pending_reads (gauge) | The current number of pending reads. Shown as read |
mysql.innodb.data_pending_writes (gauge) | The current number of pending writes. Shown as write |
mysql.innodb.data_read (gauge) | The amount of data read per second. Shown as byte |
mysql.innodb.data_reads (gauge) | The rate of data reads. Shown as read |
mysql.innodb.data_writes (gauge) | The rate of data writes. Shown as write |
mysql.innodb.data_written (gauge) | The amount of data written per second. Shown as byte |
mysql.innodb.dblwr_pages_written (gauge) | The number of pages written per second to the doublewrite buffer. Shown as page |
mysql.innodb.dblwr_writes (gauge) | The number of doublewrite operations performed per second. Shown as byte |
mysql.innodb.deadlocks (count) | The number of deadlocks. Shown as lock |
mysql.innodb.hash_index_cells_total (gauge) | Total number of cells of the adaptive hash index |
mysql.innodb.hash_index_cells_used (gauge) | Number of used cells of the adaptive hash index |
mysql.innodb.history_list_length (gauge) | History list length as shown in the TRANSACTIONS section of the SHOW ENGINE INNODB STATUS output. |
mysql.innodb.ibuf_free_list (gauge) | Insert buffer free list, as shown in the INSERT BUFFER AND ADAPTIVE HASH INDEX section of the SHOW ENGINE INNODB STATUS output. |
mysql.innodb.ibuf_merged (gauge) | Insert buffer and adaptative hash index merged Shown as operation |
mysql.innodb.ibuf_merged_delete_marks (gauge) | Insert buffer and adaptative hash index merged delete marks Shown as operation |
mysql.innodb.ibuf_merged_deletes (gauge) | Insert buffer and adaptative hash index merged delete Shown as operation |
mysql.innodb.ibuf_merged_inserts (gauge) | Insert buffer and adaptative hash index merged inserts Shown as operation |
mysql.innodb.ibuf_merges (gauge) | Insert buffer and adaptative hash index merges Shown as operation |
mysql.innodb.ibuf_segment_size (gauge) | Insert buffer segment size, as shown in the INSERT BUFFER AND ADAPTIVE HASH INDEX section of the SHOW ENGINE INNODB STATUS output. |
mysql.innodb.ibuf_size (gauge) | Insert buffer size, as shown in the INSERT BUFFER AND ADAPTIVE HASH INDEX section of the SHOW ENGINE INNODB STATUS output. |
mysql.innodb.lock_structs (gauge) | Lock structs Shown as operation |
mysql.innodb.locked_tables (gauge) | Locked tables Shown as operation |
mysql.innodb.log_waits (gauge) | The number of times that the log buffer was too small and a wait was required for it to be flushed before continuing. Shown as wait |
mysql.innodb.log_write_requests (gauge) | The number of write requests for the InnoDB redo log. Shown as write |
mysql.innodb.log_writes (gauge) | The number of physical writes to the InnoDB redo log file. Shown as write |
mysql.innodb.lsn_current (gauge) | Log sequence number as shown in the LOG section of the SHOW ENGINE INNODB STATUS output. |
mysql.innodb.lsn_flushed (gauge) | Flushed up to log sequence number as shown in the LOG section of the SHOW ENGINE INNODB STATUS output. |
mysql.innodb.lsn_last_checkpoint (gauge) | Log sequence number last checkpoint as shown in the LOG section of the SHOW ENGINE INNODB STATUS output. |
mysql.innodb.mem_adaptive_hash (gauge) | As shown in the BUFFER POOL AND MEMORY section of the SHOW ENGINE INNODB STATUS output. Shown as byte |
mysql.innodb.mem_additional_pool (gauge) | As shown in the BUFFER POOL AND MEMORY section of the SHOW ENGINE INNODB STATUS output. Only available in MySQL 5.6. Shown as byte |
mysql.innodb.mem_dictionary (gauge) | As shown in the BUFFER POOL AND MEMORY section of the SHOW ENGINE INNODB STATUS output. Shown as byte |
mysql.innodb.mem_file_system (gauge) | As shown in the BUFFER POOL AND MEMORY section of the SHOW ENGINE INNODB STATUS output. |
mysql.innodb.mem_lock_system (gauge) | As shown in the BUFFER POOL AND MEMORY section of the SHOW ENGINE INNODB STATUS output. |
mysql.innodb.mem_page_hash (gauge) | As shown in the BUFFER POOL AND MEMORY section of the SHOW ENGINE INNODB STATUS output. |
mysql.innodb.mem_recovery_system (gauge) | As shown in the BUFFER POOL AND MEMORY section of the SHOW ENGINE INNODB STATUS output. |
mysql.innodb.mem_total (gauge) | As shown in the BUFFER POOL AND MEMORY section of the SHOW ENGINE INNODB STATUS output. Shown as byte |
mysql.innodb.mutex_os_waits (gauge) | The rate of mutex OS waits. Only available in MySQL 5.6 and 5.7. Shown as event |
mysql.innodb.mutex_spin_rounds (gauge) | The rate of mutex spin rounds. Only available in MySQL 5.6 and 5.7. Shown as event |
mysql.innodb.mutex_spin_waits (gauge) | The rate of mutex spin waits. Only available in MySQL 5.6 and 5.7. Shown as event |
mysql.innodb.os_file_fsyncs (gauge) | (Delta) The total number of fsync() operations performed by InnoDB. Shown as operation |
mysql.innodb.os_file_reads (gauge) | (Delta) The total number of files reads performed by read threads within InnoDB. Shown as operation |
mysql.innodb.os_file_writes (gauge) | (Delta) The total number of file writes performed by write threads within InnoDB. Shown as operation |
mysql.innodb.os_log_fsyncs (gauge) | The rate of fsync writes to the log file. Shown as write |
mysql.innodb.os_log_pending_fsyncs (gauge) | Number of pending InnoDB log fsync (sync-to-disk) requests. Shown as operation |
mysql.innodb.os_log_pending_writes (gauge) | Number of pending InnoDB log writes. Shown as write |
mysql.innodb.os_log_written (gauge) | Number of bytes written to the InnoDB log. Shown as byte |
mysql.innodb.pages_created (gauge) | Number of InnoDB pages created. Shown as page |
mysql.innodb.pages_read (gauge) | Number of InnoDB pages read. Shown as page |
mysql.innodb.pages_written (gauge) | Number of InnoDB pages written. Shown as page |
mysql.innodb.pending_aio_log_ios (gauge) | As shown in the FILE I/O section of the SHOW ENGINE INNODB STATUS output. |
mysql.innodb.pending_aio_sync_ios (gauge) | As shown in the FILE I/O section of the SHOW ENGINE INNODB STATUS output. |
mysql.innodb.pending_buffer_pool_flushes (gauge) | As shown in the FILE I/O section of the SHOW ENGINE INNODB STATUS output. Shown as flush |
mysql.innodb.pending_checkpoint_writes (gauge) | As shown in the FILE I/O section of the SHOW ENGINE INNODB STATUS output. |
mysql.innodb.pending_ibuf_aio_reads (gauge) | As shown in the FILE I/O section of the SHOW ENGINE INNODB STATUS output. |
mysql.innodb.pending_log_flushes (gauge) | As shown in the FILE I/O section of the SHOW ENGINE INNODB STATUS output. Only available in MySQL 5.6 and 5.7. Shown as flush |
mysql.innodb.pending_log_writes (gauge) | As shown in the FILE I/O section of the SHOW ENGINE INNODB STATUS output. Only available in MySQL 5.6 and 5.7. Shown as write |
mysql.innodb.pending_normal_aio_reads (gauge) | As shown in the FILE I/O section of the SHOW ENGINE INNODB STATUS output. Shown as read |
mysql.innodb.pending_normal_aio_writes (gauge) | As shown in the FILE I/O section of the SHOW ENGINE INNODB STATUS output. Shown as write |
mysql.innodb.queries_inside (gauge) | As shown in the FILE I/O section of the SHOW ENGINE INNODB STATUS output. Shown as query |
mysql.innodb.queries_queued (gauge) | As shown in the FILE I/O section of the SHOW ENGINE INNODB STATUS output. Shown as query |
mysql.innodb.read_views (gauge) | As shown in the FILE I/O section of the SHOW ENGINE INNODB STATUS output. |
mysql.innodb.row_lock_current_waits (gauge) | The number of row locks currently being waited for by operations on InnoDB tables. |
mysql.innodb.row_lock_time (gauge) | Fraction of time spent (ms/s) acquiring row locks. Shown as fraction |
mysql.innodb.row_lock_waits (gauge) | The number of times per second a row lock had to be waited for. Shown as event |
mysql.innodb.rows_deleted (gauge) | Number of rows deleted from InnoDB tables. Shown as row |
mysql.innodb.rows_inserted (gauge) | Number of rows inserted into InnoDB tables. Shown as row |
mysql.innodb.rows_read (gauge) | Number of rows read from InnoDB tables. Shown as row |
mysql.innodb.rows_updated (gauge) | Number of rows updated in InnoDB tables. Shown as row |
mysql.innodb.s_lock_os_waits (gauge) | As shown in the SEMAPHORES section of the SHOW ENGINE INNODB STATUS output |
mysql.innodb.s_lock_spin_rounds (gauge) | As shown in the SEMAPHORES section of the SHOW ENGINE INNODB STATUS output. |
mysql.innodb.s_lock_spin_waits (gauge) | As shown in the SEMAPHORES section of the SHOW ENGINE INNODB STATUS output. Shown as wait |
mysql.innodb.semaphore_wait_time (gauge) | Semaphore wait time |
mysql.innodb.semaphore_waits (gauge) | The number semaphore currently being waited for by operations on InnoDB tables. |
mysql.innodb.tables_in_use (gauge) | Tables in use Shown as operation |
mysql.innodb.x_lock_os_waits (gauge) | As shown in the SEMAPHORES section of the SHOW ENGINE INNODB STATUS output. Shown as wait |
mysql.innodb.x_lock_spin_rounds (gauge) | As shown in the SEMAPHORES section of the SHOW ENGINE INNODB STATUS output. |
mysql.innodb.x_lock_spin_waits (gauge) | As shown in the SEMAPHORES section of the SHOW ENGINE INNODB STATUS output. Shown as wait |
mysql.myisam.key_buffer_bytes_unflushed (gauge) | MyISAM key buffer bytes unflushed. Shown as byte |
mysql.myisam.key_buffer_bytes_used (gauge) | MyISAM key buffer bytes used. Shown as byte |
mysql.myisam.key_buffer_size (gauge) | Size of the buffer used for index blocks. Shown as byte |
mysql.myisam.key_read_requests (gauge) | The number of requests to read a key block from the MyISAM key cache. Shown as read |
mysql.myisam.key_reads (gauge) | The number of physical reads of a key block from disk into the MyISAM key cache. If key_reads is large, then your keybuffersize value is probably too small. The cache miss rate can be calculated as key_reads /key_read_requests .Shown as read |
mysql.myisam.key_write_requests (gauge) | The number of requests to write a key block to the MyISAM key cache. Shown as write |
mysql.myisam.key_writes (gauge) | The number of physical writes of a key block from the MyISAM key cache to disk. Shown as write |
mysql.net.aborted_clients (gauge) | The number of connections that were aborted because the client died without closing the connection properly. Shown as connection |
mysql.net.aborted_connects (gauge) | The number of failed attempts to connect to the MySQL server. Shown as connection |
mysql.net.connections (gauge) | The rate of connections to the server. Shown as connection |
mysql.net.max_connections (gauge) | The maximum number of connections that have been in use simultaneously since the server started. Shown as connection |
mysql.net.max_connections_available (gauge) | The maximum permitted number of simultaneous client connections. Shown as connection |
mysql.performance.bytes_received (gauge) | The number of bytes received from all clients. Shown as byte |
mysql.performance.bytes_sent (gauge) | The number of bytes sent to all clients. Shown as byte |
mysql.performance.com_delete (gauge) | The rate of delete statements. Shown as query |
mysql.performance.com_delete_multi (gauge) | The rate of delete-multi statements. Shown as query |
mysql.performance.com_insert (gauge) | The rate of insert statements. Shown as query |
mysql.performance.com_insert_select (gauge) | The rate of insert-select statements. Shown as query |
mysql.performance.com_load (gauge) | The rate of load statements. Shown as query |
mysql.performance.com_replace (gauge) | The rate of replace statements. Shown as query |
mysql.performance.com_replace_select (gauge) | The rate of replace-select statements. Shown as query |
mysql.performance.com_select (gauge) | The rate of select statements. Shown as query |
mysql.performance.com_update (gauge) | The rate of update statements. Shown as query |
mysql.performance.com_update_multi (gauge) | The rate of update-multi. Shown as query |
mysql.performance.cpu_time (gauge) | Percentage of CPU time spent by MySQL. Shown as percent |
mysql.performance.created_tmp_disk_tables (gauge) | The rate of internal on-disk temporary tables created by second by the server while executing statements. Shown as table |
mysql.performance.created_tmp_files (gauge) | The rate of temporary files created by second. Shown as file |
mysql.performance.created_tmp_tables (gauge) | The rate of internal temporary tables created by second by the server while executing statements. Shown as table |
mysql.performance.digest_95th_percentile.avg_us (gauge) | Query response time 95th percentile per schema. Shown as microsecond |
mysql.performance.handler_commit (gauge) | The number of internal COMMIT statements. Shown as operation |
mysql.performance.handler_delete (gauge) | The number of internal DELETE statements. Shown as operation |
mysql.performance.handler_prepare (gauge) | The number of internal PREPARE statements. Shown as operation |
mysql.performance.handler_read_first (gauge) | The number of internal READ_FIRST statements. Shown as operation |
mysql.performance.handler_read_key (gauge) | The number of internal READ_KEY statements. Shown as operation |
mysql.performance.handler_read_next (gauge) | The number of internal READ_NEXT statements. Shown as operation |
mysql.performance.handler_read_prev (gauge) | The number of internal READ_PREV statements. Shown as operation |
mysql.performance.handler_read_rnd (gauge) | The number of internal READ_RND statements. Shown as operation |
mysql.performance.handler_read_rnd_next (gauge) | The number of internal READRNDNEXT statements. Shown as operation |
mysql.performance.handler_rollback (gauge) | The number of internal ROLLBACK statements. Shown as operation |
mysql.performance.handler_update (gauge) | The number of internal UPDATE statements. Shown as operation |
mysql.performance.handler_write (gauge) | The number of internal WRITE statements. Shown as operation |
mysql.performance.kernel_time (gauge) | Percentage of CPU time spent in kernel space by MySQL. Shown as percent |
mysql.performance.key_cache_utilization (gauge) | The key cache utilization ratio. Shown as fraction |
mysql.performance.max_prepared_stmt_count (gauge) | The maximum allowed prepared statements on the server. |
mysql.performance.open_files (gauge) | The number of open files. Shown as file |
mysql.performance.open_tables (gauge) | The number of of tables that are open. Shown as table |
mysql.performance.opened_tables (gauge) | The number of tables that have been opened. If opened_tables is big, your table_open_cache value is probably too small.Shown as table |
mysql.performance.prepared_stmt_count (gauge) | The current number of prepared statements. Shown as query |
mysql.performance.qcache.utilization (gauge) | Fraction of the query cache memory currently being used. Shown as fraction |
mysql.performance.qcache_free_blocks (gauge) | The number of free memory blocks in the query cache. Shown as block |
mysql.performance.qcache_free_memory (gauge) | The amount of free memory for the query cache. Shown as byte |
mysql.performance.qcache_hits (gauge) | The rate of query cache hits. Shown as hit |
mysql.performance.qcache_inserts (gauge) | The number of queries added to the query cache. Shown as query |
mysql.performance.qcache_lowmem_prunes (gauge) | The number of queries that were deleted from the query cache because of low memory. Shown as query |
mysql.performance.qcache_not_cached (gauge) | The number of noncached queries (not cacheable, or not cached due to the query_cache_type setting).Shown as query |
mysql.performance.qcache_queries_in_cache (gauge) | The number of queries registered in the query cache. Shown as query |
mysql.performance.qcache_size (gauge) | The amount of memory allocated for caching query results. Shown as byte |
mysql.performance.qcache_total_blocks (gauge) | The total number of blocks in the query cache. Shown as block |
mysql.performance.queries (gauge) | The rate of queries. Shown as query |
mysql.performance.query_run_time.avg (gauge) | Avg query response time per schema. Shown as microsecond |
mysql.performance.questions (gauge) | The rate of statements executed by the server. Shown as query |
mysql.performance.select_full_join (gauge) | The number of joins that perform table scans because they do not use indexes. If this value is not 0, you should carefully check the indexes of your tables. Shown as operation |
mysql.performance.select_full_range_join (gauge) | The number of joins that used a range search on a reference table. Shown as operation |
mysql.performance.select_range (gauge) | The number of joins that used ranges on the first table. This is normally not a critical issue even if the value is quite large. Shown as operation |
mysql.performance.select_range_check (gauge) | The number of joins without keys that check for key usage after each row. If this is not 0, you should carefully check the indexes of your tables. Shown as operation |
mysql.performance.select_scan (gauge) | The number of joins that did a full scan of the first table. Shown as operation |
mysql.performance.slow_queries (gauge) | The rate of slow queries (log queries that exceed a particular execution time). Shown as query |
mysql.performance.sort_merge_passes (gauge) | The number of merge passes that the sort algorithm has had to do. If this value is large, you should consider increasing the value of the sort_buffer_size system variable.Shown as operation |
mysql.performance.sort_range (gauge) | The number of sorts that were done using ranges. Shown as operation |
mysql.performance.sort_rows (gauge) | The number of sorted rows. Shown as operation |
mysql.performance.sort_scan (gauge) | The number of sorts that were done by scanning the table. Shown as operation |
mysql.performance.table_cache_hits (gauge) | The number of hits for open tables cache lookups. Shown as hit |
mysql.performance.table_cache_misses (gauge) | The number of misses for open tables cache lookups. Shown as miss |
mysql.performance.table_locks_immediate (gauge) | The number of times that a request for a table lock could be granted immediately. |
mysql.performance.table_locks_immediate.rate (gauge) | The rate of times that a request for a table lock could be granted immediately. |
mysql.performance.table_locks_waited (gauge) | The total number of times that a request for a table lock could not be granted immediately and a wait was needed. |
mysql.performance.table_locks_waited.rate (gauge) | The rate of times that a request for a table lock could not be granted immediately and a wait was needed. |
mysql.performance.table_open_cache (gauge) | The number of open tables for all threads. Increasing this value increases the number of file descriptors that mysqld requires. |
mysql.performance.thread_cache_size (gauge) | How many threads the server should cache for reuse. When a client disconnects, the client's threads are put in the cache if there are fewer than thread_cache_size threads there.Shown as byte |
mysql.performance.threads_cached (gauge) | The number of threads in the thread cache. Shown as thread |
mysql.performance.threads_connected (gauge) | The number of currently open connections. Shown as connection |
mysql.performance.threads_created (count) | The number of threads created to handle connections. If threads_created is big, you may want to increase the thread_cache_size value.Shown as thread |
mysql.performance.threads_running (gauge) | The number of threads that are not sleeping. Shown as thread |
mysql.performance.user_connections (gauge) | The number of user connections. Tags: processlist_db , processlist_host , processlist_state , processlist_user Shown as connection |
mysql.performance.user_time (gauge) | Percentage of CPU time spent in user space by MySQL. Shown as percent |
mysql.queries.count (count) | The total count of executed queries per normalized query and schema. (DBM only) Shown as query |
mysql.queries.errors (count) | The total count of queries run with an error per normalized query and schema. (DBM only) Shown as error |
mysql.queries.lock_time (count) | The total time spent waiting on locks per normalized query and schema. (DBM only) Shown as nanosecond |
mysql.queries.no_good_index_used (count) | The total count of queries which used a sub-optimal index per normalized query and schema. (DBM only) Shown as query |
mysql.queries.no_index_used (count) | The total count of queries which do not use an index per normalized query and schema. (DBM only) Shown as query |
mysql.queries.rows_affected (count) | The number of rows mutated per normalized query and schema. (DBM only) Shown as row |
mysql.queries.rows_examined (count) | The number of rows examined per normalized query and schema. (DBM only) Shown as row |
mysql.queries.rows_sent (count) | The number of rows sent per normalized query and schema. (DBM only) Shown as row |
mysql.queries.select_full_join (count) | The total count of full table scans on a joined table per normalized query and schema. (DBM only) |
mysql.queries.select_scan (count) | The total count of full table scans on the first table per normalized query and schema. (DBM only) |
mysql.queries.time (count) | The total query execution time per normalized query and schema. (DBM only) Shown as nanosecond |
mysql.replication.group.conflicts_detected (gauge) | The number of transactions that have not passed the conflict detection check. Shown as transaction |
mysql.replication.group.member_status (gauge) | Information about the node status in a group replication environment, always equal to 1. |
mysql.replication.group.transactions (gauge) | The number of transactions in the queue pending conflict detection checks. Shown as transaction |
mysql.replication.group.transactions_applied (gauge) | Number of transactions this member has received from the group and applied. Shown as transaction |
mysql.replication.group.transactions_check (gauge) | The number of transactions that have been checked for conflicts. Shown as transaction |
mysql.replication.group.transactions_in_applier_queue (gauge) | The number of transactions that this member has received from the replication group which are waiting to be applied. Shown as transaction |
mysql.replication.group.transactions_proposed (gauge) | The number of transactions which originated on this member and were sent to the group. Shown as transaction |
mysql.replication.group.transactions_rollback (gauge) | The number of transactions which originated on this member and were rolled back by the group. Shown as transaction |
mysql.replication.group.transactions_validating (gauge) | The number of transaction rows which can be used for certification, but have not been garbage collected. Shown as transaction |
mysql.replication.replicas_connected (gauge) | Number of replicas connected to a replication source. |
mysql.replication.seconds_behind_master (gauge) | The lag in seconds between the master and the slave. Shown as second |
mysql.replication.seconds_behind_source (gauge) | The lag in seconds between the source and the replica. Shown as second |
mysql.replication.slave_running (gauge) | Deprecated. Use service check mysql.replication.replica_running instead. A boolean showing if this server is a replication slave / master that is running. |
mysql.replication.slaves_connected (gauge) | Deprecated. Use mysql.replication.replicas_connected instead. Number of slaves connected to a replication master. |
The check does not collect all metrics by default. Set the following boolean configuration options to true
to enable the respective metrics:
extra_status_metrics
adds the following metrics:
Metric name | Metric type |
---|---|
mysql.binlog.cache_disk_use | GAUGE |
mysql.binlog.cache_use | GAUGE |
mysql.performance.handler_commit | RATE |
mysql.performance.handler_delete | RATE |
mysql.performance.handler_prepare | RATE |
mysql.performance.handler_read_first | RATE |
mysql.performance.handler_read_key | RATE |
mysql.performance.handler_read_next | RATE |
mysql.performance.handler_read_prev | RATE |
mysql.performance.handler_read_rnd | RATE |
mysql.performance.handler_read_rnd_next | RATE |
mysql.performance.handler_rollback | RATE |
mysql.performance.handler_update | RATE |
mysql.performance.handler_write | RATE |
mysql.performance.opened_tables | RATE |
mysql.performance.qcache_total_blocks | GAUGE |
mysql.performance.qcache_free_blocks | GAUGE |
mysql.performance.qcache_free_memory | GAUGE |
mysql.performance.qcache_not_cached | RATE |
mysql.performance.qcache_queries_in_cache | GAUGE |
mysql.performance.select_full_join | RATE |
mysql.performance.select_full_range_join | RATE |
mysql.performance.select_range | RATE |
mysql.performance.select_range_check | RATE |
mysql.performance.select_scan | RATE |
mysql.performance.sort_merge_passes | RATE |
mysql.performance.sort_range | RATE |
mysql.performance.sort_rows | RATE |
mysql.performance.sort_scan | RATE |
mysql.performance.table_locks_immediate | GAUGE |
mysql.performance.table_locks_immediate.rate | RATE |
mysql.performance.threads_cached | GAUGE |
mysql.performance.threads_created | MONOTONIC |
extra_innodb_metrics
adds the following metrics:
Metric name | Metric type |
---|---|
mysql.innodb.active_transactions | GAUGE |
mysql.innodb.buffer_pool_data | GAUGE |
mysql.innodb.buffer_pool_pages_data | GAUGE |
mysql.innodb.buffer_pool_pages_dirty | GAUGE |
mysql.innodb.buffer_pool_pages_flushed | RATE |
mysql.innodb.buffer_pool_pages_free | GAUGE |
mysql.innodb.buffer_pool_pages_total | GAUGE |
mysql.innodb.buffer_pool_read_ahead | RATE |
mysql.innodb.buffer_pool_read_ahead_evicted | RATE |
mysql.innodb.buffer_pool_read_ahead_rnd | GAUGE |
mysql.innodb.buffer_pool_wait_free | MONOTONIC |
mysql.innodb.buffer_pool_write_requests | RATE |
mysql.innodb.checkpoint_age | GAUGE |
mysql.innodb.current_transactions | GAUGE |
mysql.innodb.data_fsyncs | RATE |
mysql.innodb.data_pending_fsyncs | GAUGE |
mysql.innodb.data_pending_reads | GAUGE |
mysql.innodb.data_pending_writes | GAUGE |
mysql.innodb.data_read | RATE |
mysql.innodb.data_written | RATE |
mysql.innodb.dblwr_pages_written | RATE |
mysql.innodb.dblwr_writes | RATE |
mysql.innodb.hash_index_cells_total | GAUGE |
mysql.innodb.hash_index_cells_used | GAUGE |
mysql.innodb.history_list_length | GAUGE |
mysql.innodb.ibuf_free_list | GAUGE |
mysql.innodb.ibuf_merged | RATE |
mysql.innodb.ibuf_merged_delete_marks | RATE |
mysql.innodb.ibuf_merged_deletes | RATE |
mysql.innodb.ibuf_merged_inserts | RATE |
mysql.innodb.ibuf_merges | RATE |
mysql.innodb.ibuf_segment_size | GAUGE |
mysql.innodb.ibuf_size | GAUGE |
mysql.innodb.lock_structs | GAUGE |
mysql.innodb.locked_tables | GAUGE |
mysql.innodb.locked_transactions | GAUGE |
mysql.innodb.log_waits | RATE |
mysql.innodb.log_write_requests | RATE |
mysql.innodb.log_writes | RATE |
mysql.innodb.lsn_current | RATE |
mysql.innodb.lsn_flushed | RATE |
mysql.innodb.lsn_last_checkpoint | RATE |
mysql.innodb.mem_adaptive_hash | GAUGE |
mysql.innodb.mem_additional_pool | GAUGE |
mysql.innodb.mem_dictionary | GAUGE |
mysql.innodb.mem_file_system | GAUGE |
mysql.innodb.mem_lock_system | GAUGE |
mysql.innodb.mem_page_hash | GAUGE |
mysql.innodb.mem_recovery_system | GAUGE |
mysql.innodb.mem_thread_hash | GAUGE |
mysql.innodb.mem_total | GAUGE |
mysql.innodb.os_file_fsyncs | RATE |
mysql.innodb.os_file_reads | RATE |
mysql.innodb.os_file_writes | RATE |
mysql.innodb.os_log_pending_fsyncs | GAUGE |
mysql.innodb.os_log_pending_writes | GAUGE |
mysql.innodb.os_log_written | RATE |
mysql.innodb.pages_created | RATE |
mysql.innodb.pages_read | RATE |
mysql.innodb.pages_written | RATE |
mysql.innodb.pending_aio_log_ios | GAUGE |
mysql.innodb.pending_aio_sync_ios | GAUGE |
mysql.innodb.pending_buffer_pool_flushes | GAUGE |
mysql.innodb.pending_checkpoint_writes | GAUGE |
mysql.innodb.pending_ibuf_aio_reads | GAUGE |
mysql.innodb.pending_log_flushes | GAUGE |
mysql.innodb.pending_log_writes | GAUGE |
mysql.innodb.pending_normal_aio_reads | GAUGE |
mysql.innodb.pending_normal_aio_writes | GAUGE |
mysql.innodb.queries_inside | GAUGE |
mysql.innodb.queries_queued | GAUGE |
mysql.innodb.read_views | GAUGE |
mysql.innodb.rows_deleted | RATE |
mysql.innodb.rows_inserted | RATE |
mysql.innodb.rows_read | RATE |
mysql.innodb.rows_updated | RATE |
mysql.innodb.s_lock_os_waits | RATE |
mysql.innodb.s_lock_spin_rounds | RATE |
mysql.innodb.s_lock_spin_waits | RATE |
mysql.innodb.semaphore_wait_time | GAUGE |
mysql.innodb.semaphore_waits | GAUGE |
mysql.innodb.tables_in_use | GAUGE |
mysql.innodb.x_lock_os_waits | RATE |
mysql.innodb.x_lock_spin_rounds | RATE |
mysql.innodb.x_lock_spin_waits | RATE |
extra_performance_metrics
adds the following metrics:
Metric name | Metric type |
---|---|
mysql.performance.query_run_time.avg | GAUGE |
mysql.performance.digest_95th_percentile.avg_us | GAUGE |
schema_size_metrics
adds the following metric:
Metric name | Metric type |
---|---|
mysql.info.schema.size | GAUGE |
The MySQL check does not include any events.
mysql.can_connect
Returns CRITICAL
if the Agent is unable to connect to the monitored MySQL instance. Returns OK
otherwise.
Statuses: ok, critical
mysql.replication.slave_running
Deprecated. Returns CRITICAL for a replica that’s not running Slave_IO_Running or Slave_SQL_Running, WARNING if one of the two is not running. Returns OK
otherwise.
Statuses: ok, warning, critical
mysql.replication.replica_running
Returns CRITICAL for a replica that’s not running Replica_IO_Running or Replica_SQL_Running, WARNING if one of the two is not running. Returns OK
otherwise.
Statuses: ok, warning, critical
mysql.replication.group.status
Returns OK
if the host status is ONLINE, returns CRITICAL
otherwise.
Statuses: ok, critical
Additional helpful documentation, links, and articles: