
EDIT
: Lo siguiente describe mi pregunta original, pero como aún no he resuelto el problema, pensé que tal vez debería cambiar la configuración dentro del mysql
POD creado en lugar de mysql
los archivos de configuración en mi computadora local. ¡Pero cuando intento hacer cambios dentro del mysql
POD, obtengo command not found
errores!
Intenté implementar una mysql
imagen en mi local Kubernetes
que se ejecuta en un Kind
clúster de la siguiente manera:
Probé kubectl create secret generic mysql-secret --from-literal MYSQL_KEY=11111
y creé mysql-server
de la siguiente manera:
mysql-secret Opaque 1 3d21h
Este es mysql-pv.yaml
el archivo:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 20Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
Lo hice kubectl apply -f mysql-pv.yaml
y se creó con éxito.
This is `mysql-depl.yaml` file:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: MYSQL_KEY
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
---
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
clusterIP: None
Lo hice kubectl apply -f mysql-depl.yaml
y se creó con éxito.
Pero cuando quiero ejecutar mysql
dentro de su pod relacionado usando kubectl exec -it <mysql-pod-name> sh
los mysql -p
comandos, me pide la contraseña y después de ingresar la contraseña ( 11111
) obtengo:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Este es /etc/mysql/my.cnf
el contenido:
#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
#
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
En su interior /etc/mysql/conf.d/
hay dos archivos. mysql.cnf
como sigue:
[mysql]
socket = /var/run/mysqld/mysqld.sock
[client]
socket = /var/run/mysqld/mysqld.sock
Y mysqldump.cnf
como sigue:
[mysqldump]
quick
quote-names
max_allowed_packet = 16M
También dentro /etc/mysql/mysql.conf.d/
del directorio, hay dos archivos mysql.cnf
:
#
# The MySQL database client configuration file
#
# Ref to https://dev.mysql.com/doc/refman/en/mysql-command-options.html
[mysql]
socket = /var/run/mysqld/mysqld.sock
[client]
socket = /var/run/mysqld/mysqld.sock
Y mysqld.cnf
:
#
# The MySQL database server configuration file.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
# Here is entries for some specific programs
# The following values assume you have at least 32M ram
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
datadir = /var/lib/mysql
# If MySQL is running as a replication slave, this should be
# changed. Ref https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_tmpdir
# tmpdir = /tmp
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
mysqlx-bind-address = 127.0.0.1
#
# * Fine Tuning
#
key_buffer_size = 16M
# max_allowed_packet = 64M
# thread_stack = 256K
# thread_cache_size = -1
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover-options = BACKUP
# max_connections = 151
# table_open_cache = 4000
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
#
# Log all queries
# Be aware that this log type is a performance killer.
# general_log_file = /var/log/mysql/query.log
# general_log = 1
#
# Error log - should be very few entries.
#
log_error = /var/log/mysql/error.log
#
# Here you can see queries with especially long duration
# slow_query_log = 1
# slow_query_log_file = /var/log/mysql/mysql-slow.log
# long_query_time = 2
# log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
# other settings you may need to change.
# server-id = 1
# log_bin = /var/log/mysql/mysql-bin.log
# binlog_expire_logs_seconds = 2592000
max_binlog_size = 100M
# binlog_do_db = include_database_name
# binlog_ignore_db = include_database_name
Además, tengo los siguientes archivos dentro /var/run/mysqld/
:
mysqld.pid mysqld.sock mysqld.sock.lock mysqlx.sock mysqlx.sock.lock
Respuesta1
Supongo que olvidaste la variable de entorno de contraseña para el contenedor MySQL. Por favor, vuelva a verificar este paso.
Respuesta2
Este error puede ocurrir cuando el enlace simbólico está roto entre el archivo de socket (mysql.sock) en el almacenamiento físico y /var/run/mysqld/mysqld.sock en el contenedor.
Su almacenamiento físico está montado en /var/lib/mysql, por lo que encontrará el archivo mysql.sock en /var/lib/mysql/mysql.sock en el contenedor.
En ese caso:
exec en el contenedor mysql para obtener un indicador de bash
ejecute 'ln -s /var/lib/mysql/mysql.sock /var/run/mysqld/mysqld.sock'
luego intente ejecutar mysql -u -p ...etc para iniciar sesión
Es posible que necesite ejecutar 'flush hosts' si su banco de trabajo mysql aún no está satisfecho.