小明
小明
Published on 2025-01-18 / 33 Visits
0

Rocky9.5启动MySQL5.7容器内存溢出

1.问题内容

2.问题表现

在使用k8s或docker启动MySQL5.7容器时,容器占用的内存会不断增长,直至系统杀死进程

3.启动命令

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  serviceName: mysql
  replicas: 1
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - name: mysql
          image: mysql:5.7
          ports:
            - containerPort: 3306
              protocol: TCP
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: "password"  # 将密码设置为 password
          volumeMounts:
            - name: mysql-data
              mountPath: /var/lib/mysql
      volumes:
        - name: mysql-data
          hostPath:
            path: /opt/data  # 主机上的存储路径
---
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  selector:
    app: mysql
  ports:
    - protocol: TCP
      port: 3306
      targetPort: 3306
      nodePort: 30306  # 将端口号映射至 30306
  type: NodePort
docker run -d --name mysql57 \
    -v /opt/data/:/var/lib/mysql \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=password \
    mysql:5.7

2.解决方案

1.升级版本

MySQL9.1.0运行正常

MySQL8.0.27运行正常

2.添加ulimit限制

docker run -d --name mysql \
  -p 3306:3306 \
  --ulimit nofile=262144:262144 \
  --restart on-failure \
  -e MYSQL_ROOT_PASSWORD=password \
  mysql:5.7

3.使用podman启动容器

podman run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123.com --name mysql docker.io/library/mysql:5.7

3.不可行方案

为容器添加内存限制

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  serviceName: mysql
  replicas: 1
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - name: mysql
          image: mysql:5.7
          ports:
            - containerPort: 3306
              protocol: TCP
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: "password"
          volumeMounts:
            - name: mysql-data
              mountPath: /var/lib/mysql
          resources:
            limits:
              memory: "4G" #限制内存为4G
      volumes:
        - name: mysql-data
          hostPath:
            path: /opt/data
---
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  selector:
    app: mysql
  ports:
    - protocol: TCP
      port: 3306
      targetPort: 3306
      nodePort: 30306
  type: NodePort