首页 > 解决方案 > Kubernetes MySQL pod 不断崩溃并显示 Unable to lock ./ibdata1 错误:11

问题描述

我已经为 mysql pod 创建了新的 docker 镜像并添加了 kubernetes statefulset yaml。当我将 mysql pod 缩放到 1 时,它一直在崩溃并抛出消息 unable to lock ./ibdata1 error: 11

我在谷歌上搜索了很多关于这个错误的信息,但没有一个给出解决方案。感谢有人帮助我!

在此处输入图像描述

码头工人文件:

FROM mysql/mysql-server
CMD [ "--max_connections=10000" ]

并创建如下 MySQL YAML:

{
  "kind": "StatefulSet",
  "apiVersion": "apps/v1beta2",
  "metadata": {
    "name": "mysql-test",
    "namespace": "test",
    "selfLink": "/apis/apps/v1beta2/namespaces/test/statefulsets/mysql-test",
    "uid": "e7768a0b-faf9-11e9-a989-d8c497367e2a",
    "resourceVersion": "315823479",
    "generation": 33,
    "creationTimestamp": "2019-10-30T09:44:44Z",
    "labels": {
      "app": "mysql-test",
      "release": "mysql-test"
    }
  },
  "spec": {
    "replicas": 1,
    "selector": {
      "matchLabels": {
        "app": "mysql-test"
      }
    },
    "template": {
      "metadata": {
        "creationTimestamp": null,
        "labels": {
          "app": "mysql-test"
        }
      },
      "spec": {
        "volumes": [
          {
            "name": "data",
            "persistentVolumeClaim": {
              "claimName": "mysqldata"
            }
          },
          {
            "name": "backup",
            "persistentVolumeClaim": {
              "claimName": "mysqlbackup"
            }
          }
        ],
        "containers": [
          {
            "name": "latest",
            "image": "<Enterprise repository>/careercompass/mysql:latest",
            "ports": [
              {
                "name": "mysql",
                "containerPort": 3306,
                "protocol": "TCP"
              }
            ],
            "env": [
              {
                "name": "MYSQL_PASSWORD",
                "valueFrom": {
                  "secretKeyRef": {
                    "name": "mysql",
                    "key": "mysql-password",
                    "optional": true
                  }
                }
              },
              {
                "name": "MYSQL_ROOT_PASSWORD",
                "valueFrom": {
                  "secretKeyRef": {
                    "name": "mysql",
                    "key": "mysql-root-password",
                    "optional": true
                  }
                }
              },
              {
                "name": "MYSQL_USER",
                "value": "mysql"
              },
              {
                "name": "MYSQL_DATABASE"
              }
            ],
            "resources": {
              "limits": {
                "cpu": "10",
                "memory": "10000Mi"
              },
              "requests": {
                "cpu": "200m",
                "memory": "3000Mi"
              }
            },
            "volumeMounts": [
              {
                "name": "data",
                "mountPath": "/var/lib/mysql"
              },
              {
                "name": "backup",
                "mountPath": "/var/lib/mysqlbackup"
              }
            ],
            "terminationMessagePath": "/var/lib/termination-log",
            "terminationMessagePolicy": "File",
            "imagePullPolicy": "IfNotPresent"
          }
        ],
        "restartPolicy": "Always",
        "terminationGracePeriodSeconds": 30,
        "dnsPolicy": "ClusterFirst",
        "securityContext": {
          "runAsUser": 999,
          "fsGroup": 999
        },
        "schedulerName": "default-scheduler"
      }
    },
    "serviceName": "",
    "podManagementPolicy": "OrderedReady",
    "updateStrategy": {
      "type": "RollingUpdate",
      "rollingUpdate": {
        "partition": 0
      }
    },
    "revisionHistoryLimit": 10
  },
  "status": {
    "observedGeneration": 33,
    "replicas": 1,
    "currentReplicas": 1,
    "updatedReplicas": 1,
    "currentRevision": "mysql-test-68cb64885c",
    "updateRevision": "mysql-test-68cb64885c",
    "collisionCount": 0
  }
}

标签: mysqldockerkubernetes

解决方案


在日志中你会发现一些这样的:

[ERROR] Do you already have another mysqlId sever running on port: 3306?

让我们找出端口 3306 上已经运行的内容:

lsof -i:3306

然后使用杀死它(即进程号)kill -9 PROCESS

kill -9 13498

然后尝试再次重新启动 MySQL。


推荐阅读