
EDIT
: O seguinte descreve minha pergunta original, mas como ainda não resolvi o problema, pensei que talvez devesse alterar as configurações dentro do mysql
POD criado em vez dos mysql
arquivos de configuração no meu computador local. Mas quando tento fazer alguma alteração dentro do mysql
POD recebo command not found
erros!
Tentei implantar uma mysql
imagem em meu local Kubernetes
que está sendo executada em um Kind
cluster da seguinte forma:
Eu tentei kubectl create secret generic mysql-secret --from-literal MYSQL_KEY=11111
e criei mysql-server
da seguinte forma:
mysql-secret Opaque 1 3d21h
Este é mysql-pv.yaml
o arquivo:
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"
Eu fiz kubectl apply -f mysql-pv.yaml
e ele foi criado com sucesso.
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
Eu fiz kubectl apply -f mysql-depl.yaml
e ele foi criado com sucesso.
Mas quando eu quero rodar mysql
dentro do pod relacionado usando os comandos kubectl exec -it <mysql-pod-name> sh
então mysql -p
, ele pede a senha e depois de inserir a senha ( 11111
) eu recebo:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Este é /etc/mysql/my.cnf
o conteúdo:
#
# 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/
Dentro /etc/mysql/conf.d/
há dois arquivos. mysql.cnf
como segue:
[mysql]
socket = /var/run/mysqld/mysqld.sock
[client]
socket = /var/run/mysqld/mysqld.sock
E mysqldump.cnf
como segue:
[mysqldump]
quick
quote-names
max_allowed_packet = 16M
Também dentro /etc/mysql/mysql.conf.d/
do diretório, existem dois arquivos 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
E 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
Além disso, tenho os seguintes arquivos em /var/run/mysqld/
:
mysqld.pid mysqld.sock mysqld.sock.lock mysqlx.sock mysqlx.sock.lock
Responder1
Eu acho que você esqueceu a variável de ambiente de senha para o contêiner mysql. Por favor, verifique novamente esta etapa.
Responder2
Este erro pode ocorrer quando o link simbólico é quebrado entre o arquivo de soquete (mysql.sock) no armazenamento físico e /var/run/mysqld/mysqld.sock no contêiner.
Seu armazenamento físico é montado em /var/lib/mysql, então você encontrará o arquivo mysql.sock em /var/lib/mysql/mysql.sock no contêiner.
Se for assim:
exec no contêiner mysql para obter um prompt do bash
execute 'ln -s /var/lib/mysql/mysql.sock /var/run/mysqld/mysqld.sock'
então tente executar mysql -u -p ...etc para fazer login
Você pode precisar executar 'flush hosts' se seu ambiente de trabalho mysql ainda estiver insatisfeito.