
EDIT
: Im Folgenden wird meine ursprüngliche Frage beschrieben, aber da ich das Problem noch nicht gelöst habe, dachte ich, ich sollte vielleicht die Einstellungen im erstellten mysql
POD ändern, anstatt in mysql
den Konfigurationsdateien auf meinem lokalen Computer. Aber wenn ich versuche, Änderungen im mysql
POD vorzunehmen, erhalte ich command not found
Fehler!
mysql
Ich habe versucht , auf meinem lokalen Computer Kubernetes
, der auf einem Cluster ausgeführt wird, ein Image Kind
wie folgt bereitzustellen :
Ich habe Folgendes versucht kubectl create secret generic mysql-secret --from-literal MYSQL_KEY=11111
und erstellt :mysql-server
mysql-secret Opaque 1 3d21h
Dies ist mysql-pv.yaml
die Datei:
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"
Ich habe es getan kubectl apply -f mysql-pv.yaml
und es wurde erfolgreich erstellt.
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
Ich habe es getan kubectl apply -f mysql-depl.yaml
und es wurde erfolgreich erstellt.
Wenn ich es aber mit den entsprechenden Befehlen mysql
im zugehörigen Pod ausführen möchte , werde ich nach dem Kennwort gefragt und nach Eingabe von password( ) erhalte ich Folgendes:kubectl exec -it <mysql-pod-name> sh
mysql -p
11111
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Das ist /etc/mysql/my.cnf
Inhalt:
#
# 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/
Darin /etc/mysql/conf.d/
befinden sich die mysql.cnf
folgenden zwei Dateien:
[mysql]
socket = /var/run/mysqld/mysqld.sock
[client]
socket = /var/run/mysqld/mysqld.sock
Und mysqldump.cnf
zwar wie folgt:
[mysqldump]
quick
quote-names
max_allowed_packet = 16M
Außerdem /etc/mysql/mysql.conf.d/
befinden sich im Verzeichnis zwei Dateien 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
Und 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
Darüber hinaus habe ich die folgenden Dateien darin /var/run/mysqld/
:
mysqld.pid mysqld.sock mysqld.sock.lock mysqlx.sock mysqlx.sock.lock
Antwort1
Ich vermute, Sie haben die Umgebungsvariable für das Kennwort für den MySQL-Container vergessen. Bitte überprüfen Sie diesen Schritt noch einmal.
Antwort2
Dieser Fehler kann auftreten, wenn der symbolische Link zwischen der Socket-Datei (mysql.sock) auf dem physischen Speicher und /var/run/mysqld/mysqld.sock im Container unterbrochen ist.
Ihr physischer Speicher ist auf /var/lib/mysql gemountet, daher finden Sie die Datei mysql.sock im Container unter /var/lib/mysql/mysql.sock.
Wenn ja:
exec in den MySQL-Container, um eine Bash-Eingabeaufforderung zu erhalten
Führen Sie „ln -s /var/lib/mysql/mysql.sock /var/run/mysqld/mysqld.sock“ aus.
Versuchen Sie dann, mysql -u -p ...etc auszuführen, um sich anzumelden
Wenn Ihre MySQL-Workbench weiterhin nicht funktioniert, müssen Sie möglicherweise „Flush Hosts“ ausführen.