1C512M内存小机使用Docker安装Mysql8.4LTS版的优化指南
针对1C512M小机Docker部署MySQL 8.4 LTS的优化,需重点关注内存控制与参数精简:通过mem_limit:256m限制容器内存,调整innodb-buffer-pool-size=64M适配小内存,关闭二进制日志(–skip-log-bin)及性能模式(–performance-schema=off)减少资源消耗。同时优化字符集、表缓存等配置,并限制最大连接数为30避免过载。
docker compose 文件
version: '3'
services:
# Mysql
mysql:
image: mysql:8.4
mem_limit: 256m # 还有其他程序故限制 256m
restart: always
volumes:
- ./mysql_data:/var/lib/mysql/
environment:
MYSQL_ROOT_PASSWORD: "5be43724-f79e-4b26-81f8-********"
MYSQL_DATABASE: "dev"
MYSQL_USER: "dev"
MYSQL_PASSWORD: "5be43724-f79e-4b26-81f8-********"
TZ: Asia/Shanghai
command: [
# 关闭二进制日志,主从 数据恢复功能将不可用, 与"--disable-log-bin"参数二选一
"--skip-log-bin",
# 设置utf8字符集
"--character-set-server=utf8mb4",
"--collation-server=utf8mb4_unicode_ci",
# InnoDB 恢复 0正常启动,不强制恢复 1-6启用
"--innodb-force-recovery=0",
# 慢日志 x 秒
"--long-query-time=5",
"--slow-query-log=0",
"--slow-query-log-file=/var/lib/mysql_log/mysql-slow.log",
# 禁用性能数据采集,节省内存但无法进行性能分析
"--performance-schema=off",
# 仅记录最后一次死锁信息,减少日志冗余
"--innodb-print-all-deadlocks=OFF",
# InnoDB引擎的核心参数,直接影响读写性能
"--innodb-buffer-pool-size=64M",
"--innodb-log-buffer-size=8M",
# 将全局表缓存分割为多个独立分区,减少多线程访问时的锁竞争。每个线程仅需锁定一个分区,提升高并发场景下的性能。
"--performance-schema-max-table-instances=100",
# 缓存表结构定义(.frm文件),减少元数据解析开销。与table_open_cache不同,它仅缓存表结构而非数据文件,不占用文件描述符。
"--table-definition-cache=100",
# 控制所有线程同时打开的表的数量上限
"--table-open-cache=100",
# 最大连接数
"--max-connections=30",
]
ports:
- "0.0.0.0:30601:3306"
networks:
- infra
adminer:
image: adminer
mem_limit: 128m
restart: always
ports:
- "0.0.0.0:30901:8080"
depends_on:
- mysql
networks:
- infra
networks:
infra:
内存占用
仅运行MySQL adminer 是内存状态140M左右,若再运行其他程序会动态减少占用至 40~60M的内容占用。