CentOS或Ubuntu 22.04系统下,2核2G服务器启动MySQL官方Docker镜像需要调整哪些内核参数?

在2核2G的服务器上运行MySQL Docker镜像,需要调整以下内核参数以优化性能和稳定性:

1. 关键内核参数调整

/etc/sysctl.conf 配置:

# 内存相关
vm.swappiness = 10
vm.dirty_ratio = 60
vm.dirty_background_ratio = 5

# 网络相关(连接数优化)
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.core.netdev_max_backlog = 65535

# 文件描述符和inode
fs.file-max = 65535
fs.nr_open = 65535

# 内存过载保护
vm.overcommit_memory = 1
vm.overcommit_ratio = 95

# TCP连接优化
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0  # CentOS 7+和Ubuntu禁用此项
net.ipv4.tcp_keepalive_time = 1200

# 内存映射区域
vm.max_map_count = 262144  # 对InnoDB缓冲池重要

应用配置:

# 立即生效
sudo sysctl -p

# 对于CentOS 7/8
sudo systemctl restart systemd-sysctl

# 对于Ubuntu 22.04
sudo service procps restart

2. Docker特定配置

创建或修改 /etc/docker/daemon.json

{
  "default-ulimits": {
    "nofile": {
      "Name": "nofile",
      "Hard": 65535,
      "Soft": 65535
    },
    "nproc": {
      "Name": "nproc",
      "Hard": 65535,
      "Soft": 65535
    }
  },
  "storage-driver": "overlay2"
}

重启Docker服务:

sudo systemctl restart docker

3. MySQL容器启动参数

docker run -d 
  --name mysql 
  --restart unless-stopped 
  --memory="1.5g"           # 限制容器内存使用
  --memory-swap="2g"        # 限制swap使用
  --cpus="1.5"              # 限制CPU使用
  --ulimit nofile=65535:65535 
  --ulimit nproc=65535:65535 
  -e MYSQL_ROOT_PASSWORD=your_password 
  -p 3306:3306 
  mysql:8.0 
  --innodb_buffer_pool_size=512M 
  --max_connections=200 
  --table_open_cache=2000 
  --innodb_log_file_size=128M

4. 针对2G内存的MySQL配置优化

在MySQL配置文件或启动参数中添加:

# my.cnf 或 docker环境变量
[mysqld]
innodb_buffer_pool_size = 512M
innodb_log_file_size = 128M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
max_connections = 200
thread_cache_size = 50
table_open_cache = 2000
query_cache_type = 0
query_cache_size = 0
tmp_table_size = 64M
max_heap_table_size = 64M

5. 系统限制检查

# 检查当前限制
ulimit -a

# 修改用户限制(CentOS/Ubuntu)
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
echo "* soft nproc 65535" >> /etc/security/limits.conf
echo "* hard nproc 65535" >> /etc/security/limits.conf

# 对于systemd系统(Ubuntu 22.04/CentOS 7+)
sudo mkdir -p /etc/systemd/system/docker.service.d/
sudo tee /etc/systemd/system/docker.service.d/limits.conf << EOF
[Service]
LimitNOFILE=infinity
LimitNPROC=infinity
LimitMEMLOCK=infinity
EOF

6. 验证配置

# 检查内核参数
sysctl vm.swappiness vm.max_map_count net.core.somaxconn

# 检查容器限制
docker inspect mysql | grep -i "ulimit|memory|cpu"

# 检查MySQL运行状态
docker exec mysql mysqladmin status -p

注意事项:

  1. 内存分配:2G服务器上,建议MySQL容器使用1-1.5G内存,为系统和Docker守护进程预留资源
  2. swap设置:适当启用swap(1-2G)但降低swappiness
  3. 监控调整:使用docker stats监控资源使用情况,根据实际负载调整参数
  4. 数据持久化:确保使用volume挂载数据目录
  5. 备份策略:小内存服务器更需要注意备份和监控

这些调整能确保MySQL在资源有限的服务器上稳定运行,同时避免因内核参数限制导致的性能问题。

云服务器