I have a mysql password that starts with a space. I want to put this password into a variable and then use it to connect in a bash script.
this works fine:
mysql -u me -p' examplepw'
but this does not:
pw=" examplepw"
mysql -u me -p'$pw'
because the single quotes make the variable name be interpreted literally (ie. mysql does not recognise the string $pw as a valid password).
How can I use a variable to hold a mysql password that requires escaping?
Ah I just found the solution: terminate the single quote, and concatenate the variable quoted with double quotes:
mysql -u me -p''"$pw"''
As long as you're using environment variables, you could store the password in MYSQL_PWD. MySQL will just take it from there:
export MYSQL_PWD=" examplepw"
mysql -u me
${} expands a variable.
PASS=" 12345678"
mysql -u me -p"${PASS}"
In this case, ${PASS} is extended to 12345678
Can I pass this string
mysql2://user1:rXbNgLjBHrdxYT#localhost/onebody?socket=/opt/bitnami/mysql/tmp/mysql.sock
to the mysql command inside bash, to make a connection?
If so, how...
Not literally. mysql CLI takes several options into which the string needs to be split (see man mysql).
Assuming "onebody" is the DB name, I guess it is:
mysql --protocol=socket --socket=/opt/bitnami/mysql/tmp/mysql.sock --database=onebody --user=user1 --password=rXbNgLjBHrdxYT.
If you omit the password value following the --password or -p option
on the command line, mysql prompts for one.
Specifying a password on the command line should be considered insecure. See Section 6.1.2.1, “End-User Guidelines for Password Security”. You can use an option file to avoid giving the password on the command line.
I have a question, What is the significance of the whitespace after the user flag -u inside a mysql connection string?
mysql -u myname -pmypass mydb
I mean to say, the above command works just fine, if I don't pass a whitespace after -u and just write the above command as below.
mysql -umyname -pmypass mydb
I tried searching for an explaination by using the following search terms.
mysql login whitespace after user flag
mysql connection console whitespace after user flag
I found the mention of whitespace after the password flag -p, Here. But the page no where talks about the whitespace after the user flag -u.
....there must be no space between -p or --password= and the password following it.
The -p option takes an optional argument:
mysql --help --verbose
...
-p, --password[=name]
Password to use when connecting to server. If password is
not given it's asked from the tty.
So, a command line that contains:
-p mydb
would be ambiguous ... does this means to:
Prompt the user for a password, and use the mydb database ?
Use the password mydb, and not set a default database ?
This is why the documentation insists on a particular rule for the password option: the value, if given, must be attached (no space).
For options that always take an argument, like -u, there are no special considerations, so the white space is not significant.
See the manual for a full documentation of command line options:
http://dev.mysql.com/doc/refman/5.7/en/command-line-options.html
I have this script:
read PASS
mysql -u root -p "$PASS" < myfile.sql
If I already provided the password, why am I getting a second prompt to enter the password for mysql?
The syntax is either:
mysql -u root -p"$PASS" < myfile.sql
with no space after -p or:
mysql -u root --password="$PASS" < myfile.sql
The explanation for the first syntax is in the Documentation. For most options, the space between the option and its value is optional. But it says:
An exception to this rule is the option for specifying your MySQL password. This option can be given in long form as --password=pass_val or as --password. In the latter case (with no password value given), the program prompts you for the password. The password option also may be given in short form as -ppass_val or as -p. However, for the short form, if the password value is given, it must follow the option letter with no intervening space. The reason for this is that if a space follows the option letter, the program has no way to tell whether a following argument is supposed to be the password value or some other kind of argument.
I'm trying to use mysqldump to dump a schema, and it mostly works but I ran into one curiosity: the -p or --password option seems like it is doing something other than setting the password (as the man page and --help output say it should).
Specifically, it looks like it's doing what is indicated here: http://snippets.dzone.com/posts/show/360 - that is, setting the database to dump.
To support my somewhat outlandish claim, I can tell you that if I do not specify the --password (or -p) option, the command prints the usage statement and exits with an error. If I do specify it, I am immediately prompted to enter a password (!), and then the database specified in the --password option is dumped (or an error is given in the usual case that a password not matching any database name was specified).
Here's a transcript:
$ mysqldump -u test -h myhost --no-data --tables --password lose
Enter password:
-- MySQL dump 10.10
mysqldump: Got error: 1044: Access denied for user 'test'#'%' to
database 'lose' when selecting the database
So, what gives? Is this the way this is supposed to work? It surely does not appear to make sense nor does it match the official documentation. And finally, if this just the way it works, how am I meant to specify the password to be used in an automated job? Using expect???
I'm using mysqldump Ver 10.10 Distrib 5.0.22, for pc-linux-gnu (i486).
From man mysqldump:
--password[=password], -p[password]
The password to use when connecting to the server. If you use
the short option form (-p), you cannot have a space between the option
and the password. If you omit the password value following the
--password or -p option on the command line, you are prompted for
one.
Specifying a password on the command line should be considered
insecure. See Section 6.6, "Keeping Your Password Secure".
Syntactically, you are not using the --password switch correctly. As such, the command line parser is seeing your use of "lose" as a stand-alone argument which mysqldump interprets as the database name as it would if you were to attempt a simpler command like mysqldump lose
To correct this, try using --password=lose or -plose or simply use -p or --password and type the password when prompted.
Another option is to create the file ~/.my.cnf (permissions need to be 600).
Add this to the .my.cnf file
[client]
password=lose
This lets you connect as a MySQL user who requires a password without having to actually enter the password. You don't even need the -p or --password.
Very handy for scripting mysql & mysqldump commands.
I found that this happens if your password has special characters in it. The mysql password here has a ! in it, so I have to do ==password='xxx!xxxx' for it to work corrrectly. Note the ' marks.
Try placing a '=' in between --password lose like:
--password=lose
If you use -p, then there can be no space between the -p and the password, i.e. '-plose'.
I am not sure if it works for the --password version, but if you use -p you can specify the password immediately afterwards (the key is not to include a space):
mysqldump -pmypassword ...
Did you try --password=whatever-password-is ?
Perhaps I'm missing the question, but that is what I do to run the tool.
If you use the -p or --password without an argument, you will get a prompt, asking to insert a password.
If you want to indicate a password on the command line, you must use -pYOURPASSWORD or --password=YOURPASSWORD. Notice that there is no space after -p, and there is an "=" sign after --password.
In your example, mysqldump asks for a password, and then treats "lose" as the database name. If that was your password, you should have included a "="
The -p option does not require an argument. You just put -p or --password to indicate that you're going to use a password to access the database. The reason it's dumping the database named whatever you put after -p is that the last argument for mysqldump should be the name of the database you want to dump (or --all-databases if you want them all).
#Nathan's answer is also true. You can specify the password immediately following the -p switch (useful in scripts and such where you can't enter it by hand after executing the command).
--password[=password]
Here is the documentation
Maybe your user "test" doesn't have the permission to access your "lose" database?