[mysqld]
# ================= 最小化高并发调整 (仅改这 4 项) =================
# 1. 禁用 DNS 解析 (必改!防止连接延迟和超时)
# 默认是开启的,高并发下必须关闭,否则每个连接都要查域名,极慢。
skip-name-resolve = 1
# 2. 最大连接数 (根据需求调整)
# 默认是 151,高并发下远远不够。
# 建议值:2000 - 5000 (取决于你的内存大小,每连接约消耗 0.5-1MB)
max_connections = 2000
# 3. InnoDB 缓冲池大小 (最关键的性能参数)
# 默认通常只有 128M,对于生产环境太小了。
# ⚠️ 请根据你的服务器内存修改下面的值:
# 规则:专用数据库服务器 = 物理内存的 70% ~ 80%
# 示例:
# 4G 内存 -> 设置 3G
# 8G 内存 -> 设置 6G
# 16G 内存 -> 设置 12G
# 32G 内存 -> 设置 24G
innodb_buffer_pool_size = 2G
# 4. 缓冲池实例数 (配合上面的大小使用)
# 默认是 1。当缓冲池大于 1G 时,建议按每 1G 设 1 个实例,减少锁竞争。
# 如果上面设置了 12G,这里就填 12。最大不超过 64。
innodb_buffer_pool_instances = 2
# ================= 其他保持默认即可 =================
# MySQL 8.4 的默认值在日志写入、线程并发等方面已经比较优化,
# 除非有极端特殊需求,否则不需要动 innodb_flush_log_at_trx_commit 等参数,
# 以保持数据的最安全性(默认是双一安全)。
mysql:
image: mysql:8.4
container_name: mysql
ports:
- 3306:3306
restart: unless-stopped
privileged: true
environment:
MYSQL_ROOT_HOST: "%"
MYSQL_DATABASE: admin
MYSQL_ROOT_PASSWORD: 数据库密码
TZ: Asia/Shanghai
volumes:
- ./mysql/mysql:/var/lib/mysql
- ./mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf
SHOW VARIABLES LIKE 'max_connections';
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW VARIABLES LIKE 'skip_name_resolve';