连接到 MySQL 5.6 inside Docker For Desktop/Kubernetes: ERROR 1130 (HY000): 不允许主机 'xx.xx.xx.xx' 连接到此 MySQL 服务器

Connecting to MySQL 5.6 inside Docker For Desktop/Kubernetes: ERROR 1130 (HY000): Host 'xx.xx.xx.xx' is not allowed to connect to this MySQL server

following theses instructions(第 181 页)创建了一个持久卷并声明了一个 mysql 副本集和服务。我在副本集的 yaml 文件中指定 mysql v5.6。

查看 pod 的日志后,看起来是成功的。那么我

kubectl run -it --rm --image=mysql --restart=Never mysql-client -- bash
mysql -h mysql -p 3306 -u root

它提示我输入密码,然后出现此错误:

ERROR 1130 (HY000): Host '10.1.0.17' is not allowed to connect to this MySQL server

显然 MySQL 有一个默认情况下不允许远程连接的功能,我必须更改配置文件,但我不知道如何在 yaml 文件中执行此操作。下面是我的 YAML。如何更改它以允许远程连接?

谢谢

齐格弗里德

cat <<END-OF-FILE | kubectl apply -f -
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: mysql
  # labels so that we can bind a Service to this Pod
  labels:
    app: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: tododata
        image: mysql:5.6
        resources:
          requests:
            cpu: 1
            memory: 2Gi
        env:
        # Environment variables are not a best practice for security,
        # but we're using them here for brevity in the example.
        # See Chapter 11 for better options.
        - name: MYSQL_ROOT_PASSWORD
          value: some-password-here
        livenessProbe:
          tcpSocket:
            port: 3306
        ports:
        - containerPort: 3306
        volumeMounts:
          - name: tododata
            # /var/lib/mysql is where MySQL stores its databases
            mountPath: "/var/lib/mysql"
      volumes:
      - name: tododata
        persistentVolumeClaim:
          claimName: tododata
END-OF-FILE

美国东部时间 2020 年 10 月 24 日星期六下午 3 点更新:试用 Bitnami MySQL

我喜欢 Ben 的 using bitnami mysql 想法,因为这样我就不必创建自己的自定义 docker 图像。但是,当使用 bitnami 并尝试连接到他们 mysql 服务器时,我得到

ERROR 2003 (HY000): Can't connect to MySQL server on 'my-release-mysql.default.svc.cluster.local' (111)

这发生在我使用此命令成功获得 bash shell 后:

kubectl run my-release-mysql-client --rm --tty -i --restart='Never' --image  docker.io/bitnami/mysql:8.0.22-debian-10-r0 --namespace default --command -- bash

然后,按照说明,我这样做并得到上面的 HY000 错误。

mysql -h my-release-mysql.default.svc.cluster.local -uroot -p

2020 年 11 月 4 日星期三更新:

谢谢 Ben.. 是的——我已经在 10 月 24 日(大约)尝试过,当我做 k describe pod 我得到 mysqladmin: connect to server at 'localhost' failed error: 'Can't connect to local MySQL server through socket '/opt/bitnami/mysql/tmp/mysql.sock' (2)' Check that mysqld is running and that the socket: '/opt/bitnami/mysql/tmp/mysql.sock' exists!.

当然,当我 运行 mysql 客户端按照很好地生成的说明中的描述,客户端无法连接,因为 mysqld 已经死了。

这是在删除 pvcs 和 stss 并在通过 helm 重新安装之前执行 helm delete my-release

不幸的是,当我第一次尝试这个时(几周前)我没有设置 root 密码并使用默认生成的密码,我认为它仍在尝试使用那个。

在创建了一个新的 azure kubernetes 集群后,这在 azure kubernetes 上确实有效。如何在我的 docker for desktop windows 中重置我的 kubernetes 集群?我尝试了 google 搜索,但到目前为止没有成功。

谢谢 齐格弗里德

这对我来说似乎在 windows 上工作得很好。完成以下步骤:

helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-release --set root.password=awesomePassword bitnami/mysql

这就是 运行 mysql 实例所需的全部内容。它不会提供一些服务和状态集。然后,要连接到它,您

  1. 要么必须在另一个 kubernetes 容器中。没有这个,你将找不到 my-release-mysql.default.svc.cluster.local

    的 dns 记录
    run my-release-mysql-client --rm --tty -i  --image  docker.io/bitnami/mysql:8.0.22-debian-10-r0 --namespace default --command -- bash
    
    mysql -h my-release-mysql.default.svc.cluster.local -uroot -p my_database
    

    密码应该是'awesomePassword'

  2. 端口将服务转发到您的本地计算机。

    kubectl port-forward svc/my-release-mysql 3306:3306
    

请注意,如果您将 bitnami 容器杀死并仅使用您的 helm 命令重新启动它并且未设置密码,它将会出现问题。持久卷声明通常会保留 - 因此您需要将密码设置为旧密码。如果你不指定密码,你可以通过运行使用bitnami告诉你的命令来获取密码。

NAME: my-release

LAST DEPLOYED: Thu Oct 29 20:39:23 2020

NAMESPACE: default

STATUS: deployed

REVISION: 1

TEST SUITE: None

NOTES: Please be patient while the chart is being deployed

Tip:

Watch the deployment status using the command: kubectl get pods -w --namespace default

Services:

echo Master: my-release-mysql.default.svc.cluster.local:3306 echo Slave: my-release-mysql-slave.default.svc.cluster.local:3306

Administrator credentials:

echo Username: root echo Password : $(kubectl get secret --namespace default my-release-mysql -o jsonpath="{.data.mysql-root-password}" | base64 --decode)

To connect to your database:

  1. Run a pod that you can use as a client:

    kubectl run my-release-mysql-client --rm --tty -i --restart='Never' --image docker.io/bitnami/mysql:8.0.22-debian-10-r0 --namespace default --command -- bash

  2. To connect to master service (read/write):

    mysql -h my-release-mysql.default.svc.cluster.local -uroot -p my_database

  3. To connect to slave service (read-only):

    mysql -h my-release-mysql-slave.default.svc.cluster.local -uroot -p my_database

To upgrade this helm chart:

  1. Obtain the password as described on the 'Administrator credentials' section and set the 'root.password' parameter as shown below:

    ROOT_PASSWORD=$(kubectl get secret --namespace default my-release-mysql -o jsonpath="{.data.mysql-root-password}" | base64 --decode) helm upgrade my-release bitnami/mysql --set root.password=$ROOT_PASSWORD

在 bitnami 人员的大量帮助下,我了解到我 4 岁的笔记本电脑上的旋转磁盘有点慢(现在为什么这是 Bitnami MySQL 而不是 Bitnami PostreSQL 的问题是一个谜)。

这对我有用:

helm install my-mysql bitnami/mysql \
  --set image.debug=true \
  --set primary.persistence.enabled=false,secondary.persistence.enabled=false \
  --set primary.readinessProbe.enabled=false,primary.livenessProbe.enabled=false \
  --set secondary.readinessProbe.enabled=false,secondary.livenessProbe.enabled=false

这会关闭持久卷,因此数据会在 pod 死机时丢失。

是的,这对我的开发目的很有用,任何人都不应该将 Docker For Desktop/Kubernetes 用于生产...我只需要填充一个小型数据库并测试我的查询和如果我每次重启都需要重新填充数据库,那不是什么大问题。

所以也许我需要买一台新的笔记本电脑?配备 4TB 旋转磁盘 space 的笔记本电脑的价格在过去几年中上涨了……而且我找不到那种尺寸的 SSD 驱动器,所以即使我购买了一个新的旋转磁盘替代品,我可能有同样的问题?嗯....

感谢大家的帮助!

齐格弗里德