Can't connect to port-forwarded Pod running MySQL

8/13/2017

I have the following deployment which puts up MySQL instance:

kind: Deployment
apiVersion: apps/v1beta1
metadata:
  name: mysql
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:8
        ports:
        - containerPort: 3306
        env:
          - name: MYSQL_ROOT_PASSWORD
            valueFrom:
              secretKeyRef:
                name: mysql-root-password
                key: password

The password is just root :

kind: Secret
apiVersion: v1
metadata:
  name: mysql-root-password
type: Opaque
data:
  password: cm9vdA==

The problem is I try to connect to the instance after port forwarding the MySQL port, following the instructions from here, but get an error:

$ kubectl port-forward mysql-824284009-rpbpk 3306
Forwarding from 127.0.0.1:3306 -> 3306
Forwarding from [::1]:3306 -> 3306

# from another terminal
$ mysql -u root -p
Enter password:  
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

Connecting to the server from the pod itself works:

$ kubectl exec -it mysql-824284009-rpbpk -- /bin/bash
root@mysql-824284009-rpbpk:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
...
mysql>

I have basically the same setup like here, except I'm running the cluster in minikube instead of GCP. My local MySQL is not runnning, so I assume there is no chance of clashing.

-- Gabriel Ruiu
kubernetes
mysql

1 Answer

8/13/2017

The port forwarding is likely there, but you need to tell mysql client to connect using host/port and not unix socket (default)

mysql --host=localhost --protocol tcp --port=3306 -u root -p

If you don't, mysql by default uses local linux socket to connect to he server: /var/run/mysqld/mysqld.sock .. It even tells you so ;)

Update: As Gabriel checked - adding --protocol tcp had finally made it works, so I am addding it to my answer

-- Jarek Potiuk
Source: StackOverflow