Bug #117881 MY-013935 error message occurs frequently
Submitted: 4 Apr 2:01 Modified: 4 Apr 11:58
Reporter: SeWoong Jeon Email Updates:
Status: Duplicate Impact on me:
None 
Category:MySQL Server Severity:S3 (Non-critical)
Version:8.4.4 OS:Linux (Rocky Linux 8.8)
Assigned to: MySQL Verification Team CPU Architecture:x86 (4.18.0-477.21.1.el8_8.x86_64)
Tags: ER_CONDITIONAL_DEBUG, IO-layer timeout, MY-013935

[4 Apr 2:01] SeWoong Jeon
Description:
Hello,
I am frequently getting the following error message on my MySQL 8.4.4 server:

2025-04-03T21:40:00.303896+09:00 22437 [ERROR] [MY-013935] [Server] IO-layer timeout before wait_timeout was reached.
2025-04-03T21:40:00.303927+09:00 22436 [ERROR] [MY-013935] [Server] IO-layer timeout before wait_timeout was reached.
2025-04-04T00:19:28.559877+09:00 28983 [ERROR] [MY-013935] [Server] IO-layer timeout before wait_timeout was reached.
2025-04-04T00:19:28.559866+09:00 29028 [ERROR] [MY-013935] [Server] IO-layer timeout before wait_timeout was reached.
2025-04-04T00:23:17.935869+09:00 29126 [ERROR] [MY-013935] [Server] IO-layer timeout before wait_timeout was reached.
2025-04-04T00:23:17.935887+09:00 29127 [ERROR] [MY-013935] [Server] IO-layer timeout before wait_timeout was reached.
...

This is a newly created test database server with almost zero traffic and minimal system load.

12:00:01 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
12:17:01 AM     all      1.88      0.00      0.97      0.08      0.00     97.07
12:18:01 AM     all      1.93      0.00      0.92      0.08      0.00     97.06
12:19:01 AM     all      2.03      0.00      1.02      0.17      0.00     96.77
12:20:01 AM     all      1.99      0.00      1.01      0.17      0.00     96.83
12:21:01 AM     all      1.91      0.00      0.96      0.09      0.00     97.04
12:22:01 AM     all      1.90      0.00      0.95      0.08      0.00     97.07
12:23:01 AM     all      1.91      0.00      0.96      0.08      0.00     97.05
12:24:01 AM     all      1.86      0.00      0.95      0.08      0.00     97.11
12:25:01 AM     all      1.93      0.00      0.96      0.09      0.00     97.02

According to the MySQL error documentation, this error is identified as ER_CONDITIONAL_DEBUG. 
https://dev.mysql.com/doc/mysql-errors/8.4/en/server-error-reference.html#error_er_conditi...

Could this be a debug-level message?
Could you please help me determine what is causing this error and suggest ways to prevent it from occurring?

=========

The my.cnf configuration is as follows.

[mysqld]
user    = mysql
port    = 3306
basedir = /db/mysql_844
datadir = /db/mysql_844/data
plugin_dir = /db/mysql_844/lib/plugin
lc_messages_dir = /db/mysql_844/share
tmpdir  = /db/mysql_844/tmp
socket  = /db/mysql_844/tmp/mysql.sock

binlog_cache_size = 1M
binlog_expire_logs_seconds = 259200 
binlog_rows_query_log_events = ON
caching_sha2_password_auto_generate_rsa_keys = on
character_set_server=utf8mb4
default_storage_engine=InnoDB
default-time-zone = 'Asia/Seoul'
event_scheduler=on
group_concat_max_len = 131072
interactive_timeout = 31536000
internal_tmp_mem_storage_engine = MEMORY
join_buffer_size = 8M
local_infile = 0
lock_wait_timeout = 60
long_query_time = 0.5
log-bin = mysql-bin
log_error_suppression_list = 'MY-10956,MY-010957'
log_error_verbosity = 2
log_output = FILE
log_timestamps = SYSTEM
max_allowed_packet = 1G
max_binlog_size = 1G
max_connect_errors = 999999
max_connections = 30000
max_heap_table_size = 1G
max_prepared_stmt_count = 1048576
mysqlx = OFF
read_buffer_size = 2M
read_rnd_buffer_size = 16M
secure_file_priv = '/work'
skip_name_resolve = ON
slow_query_log = ON
sort_buffer_size = 1M
sql_mode=STRICT_TRANS_TABLES
sync-binlog = 1
sysdate-is-now
table_open_cache = 2000
table_open_cache_instances = 16
thread_cache_size = 128
tmp_table_size = 64M
transaction-isolation = READ-COMMITTED
wait_timeout = 31536000

information_schema_stats_expiry = 3600
performance_schema = ON

innodb_adaptive_hash_index = OFF
innodb_buffer_pool_dump_at_shutdown = ON
innodb_buffer_pool_in_core_file = OFF
innodb_buffer_pool_instances = 2 
innodb_buffer_pool_load_at_startup = ON
innodb_buffer_pool_size = 4G
innodb_data_file_path = ibdata1:512M:autoextend
innodb_ddl_buffer_size = 1G
innodb_doublewrite_files = 2
innodb_doublewrite_pages = 128
innodb_file_per_table = ON
innodb_flush_log_at_trx_commit = 1
innodb_flush_method = O_DIRECT            # if supported
# innodb_force_recovery=1
innodb_lock_wait_timeout = 60
innodb_log_buffer_size = 64M
innodb_numa_interleave = ON
innodb_page_size = 16384
innodb_purge_threads = 1
innodb_read_io_threads = 4
innodb_redo_log_capacity = 8G
innodb_stats_on_metadata = OFF
innodb_strict_mode = 1
innodb_temp_data_file_path = ibtmp1:512M:autoextend
innodb_use_fdatasync = ON
innodb_thread_concurrency = 0
innodb_write_io_threads = 4

# for SAS/SATA
innodb_flush_neighbors = 1
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000

server-id = 24
gtid_mode = on
enforce_gtid_consistency = on
relay-log = relay-bin
replica_parallel_workers = 4
replica_preserve_commit_order = ON
rpl_semi_sync_replica_enabled = 1
rpl_semi_sync_source_enabled = 1
rpl_semi_sync_source_timeout = 500

How to repeat:
cannot be reproduced
[4 Apr 11:58] MySQL Verification Team
Duplicate of Bug #117678

This is just an informational message that the connection dropped before it was expected to timeout from wait_timeout.

Lowering tcp_keepalive_time could help.
https://tldp.org/HOWTO/TCP-Keepalive-HOWTO/usingkeepalive.html