# 在docker-compose.yml中设置内存限制
services:
mysql:
image: mysql:8.0
deploy:
resources:
limits:
memory: 512M # 根据实际情况调整
docker pull mysql:8.0-alpine # 使用基于Alpine的轻量级镜像
在my.cnf
或通过环境变量配置:
[mysqld]
innodb_buffer_pool_size=128M # 根据可用内存调整(通常50-70%的总内存)
key_buffer_size=16M
query_cache_size=0 # 在MySQL 8.0中已移除
tmp_table_size=32M
max_heap_table_size=32M
table_open_cache=200
innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1 # 可靠性优先,可设为2降低I/O负载
innodb_flush_method=O_DIRECT
performance_schema=OFF # 关闭性能监控
environment:
- MYSQL_INNODB_BUFFER_POOL_SIZE=128M
- MYSQL_PERFORMANCE_SCHEMA=OFF
docker run -d --name mysql \
--memory="512m" --memory-swap="1g" \
--cpus="1" \
-e MYSQL_ROOT_PASSWORD=password \
mysql:8.0
environment:
- MYSQL_DATABASE=only_necessary_db # 只创建必要数据库
- MYSQL_USER=appuser
- SKIP_INNODB_BUFFER_POOL_DUMP_AT_SHUTDOWN=1
- SKIP_INNODB_BUFFER_POOL_LOAD_AT_STARTUP=1
docker stats mysql_container_name
-- 在MySQL客户端中运行
SHOW ENGINE INNODB STATUS;
SELECT * FROM sys.memory_global_by_current_bytes;
-- 定期优化表
OPTIMIZE TABLE important_tables;
-- 清理缓存
FLUSH TABLES;
FLUSH STATUS;
通过以上组合优化,通常可以将Docker中MySQL的内存使用量减少30-50%,具体效果取决于应用负载和查询模式。