Friends, I am trying to implement a readinessProbe here like this:
readinessProbe:
exec:
command: ["mysql", "-u root", "-p $(MYSQL_ROOT_PASSWORD)", "SHOW DATABASES;"]
initialDelaySeconds: 5
periodSeconds: 2
timeoutSeconds: 1
But I am getting an access denied error: ERROR 1045 (28000): Access denied for user ' root'@'localhost' (using password: YES)
When I exec inside my pod, I can connect to the database normally so I think I am doing something wrong by the execution the the connection commands. Any idea how can I solve this problem?
It worked for me like this:
readinessProbe:
exec:
command:
- "bash"
- "-c"
- "mysql --user=${MYSQL_USER} --password=${MYSQL_PASSWORD} --execute=\"SHOW DATABASES;\""
But I still don't know how to "translate" this if I want to use brackets.
When you use JSON-array syntax for command:
and similar options, you specify exactly how the command is split up into "words". So when the option says
command: [..., "-u root", ...]
That is a single option containing an embedded space (I might say aloud "dash u space root"). In an interactive shell it'd be the equivalent of quoting the option mysql '-u root' ...
.
From your error message, it looks like the mysql
client tool interprets the space as part of the user name; you don't want that. Either split it yourself into two separate options, or remove the space between the option and the argument.
command: [..., "-u", "root", ...]
command: [..., "-uroot", ...]