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?
Related
I'm trying to make a copy of my website's database, so that I can download it and import it into wamp for local testing.
Here is what I'm entering in Putty:
mysqldump -u my_database_username -p dataname_db.sql --single-transaction --quick --lock-tables=false > dataname_db_local-$(date +%F).sql && gzip dataname_db_local.sql
No matter what combo of user and pass I use, I get this error
Got error: 1044: "Access denied for user to database when selecting the database
It wants the MySQL user that has full privileges to that database, right? ie the same credentials as what I use to connect to the database in a new MySQLi() command in php, right?
I read that sometimes passwords with special characters aren't allowed, so I made a new user, full priveleges, for that database with a plain alphanumeric pass, but it's still not accepted.
I then thought maybe it wants the same username and pass as what I use to connect to my server via Putty, but that didn't work. Neither did -u root with the server password.
Can someone please clarify exactly which username it wants?
Thank you
Yes, you are right, mysqldump requires exactly the same username and password as what you use to connect to the database in a new MySQLi() command in php.
Make sure your account has Lock_Table privilege.
If it still didn't work, try to pass the –-single-transaction option to mysqldump:
mysqldump --single-transaction -u db_username -p DBNAME > backup.sql
Notice that there is a syntax problem, you should select your DB at last of mysqldump statement:
mysqldump [options] db_name [tbl_name ...] > filename.sql
Reference: [1] , [2]
mysql -hhost -uuser -ppassword
Is there a rationale behind why there's no need for spaces? In fact, it wouldn't work unless there is no space.
Found my answer:
https://dev.mysql.com/doc/refman/5.7/en/command-line-options.html
It's just the way they wrote it.
If you use a command like
mysql -h hostname -u username -p xxx
the command is ambiguous. It could mean that xxx is the password and no database was specified, or it could mean that xxx is the database and no password was specified (in which case mysql prompts for a password).
They chose the second interpretation. But if you use -pxxx then xxx can only be interpreted as the password.
Not sure why this is happening.
My user has the right password/privileges (where host is '%')
If I run the command as such:
mysql -h myhost -u myuser -p
Password:
It connects.
However if I do:
mysql -h myhost -u myuser --password=
I get Access Denied for user 'myuser'#'172.xxx' <-- internal IP
Not sure why this is happening and I can't seem to figure out how to resolve it. Adding it the host for 172.% doesn't seem to work either.
Thanks in advance.
From man mysql (emphasis mine):
SYNOPSIS
mysql [options] db_name
--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, mysql prompts for one. [...]
Let's concentrate on the first command you mentioned:
mysql -h myhost -u myuser -p Password
You said that this works, but in fact, it shouldn't. According to the manual, there must be no space between -p and the password. If there is one (as in your case), Password will just be interpreted as additional command line parameter (in this case: the last command line parameter).
On the other hand, according to the manual, the last command line parameter is the name of the database to use.
Thus, according to my understanding of the manual, the following should happen when the command shown above is entered:
The MySQL client should connect to myhost and then (on the command line) ask for the password for myuser (because -p is given without the actual password from its point of view). If the password is entered correctly, it should login myuser and switch immediately to the database which has Password (i.e. the last command line parameter) as its name.
If it connects immediately without prompting for myuser's password (as you wrote), then there probably is no password for myuser yet.
In every case, after the actual login is done, you should get an error message because there probably is no database which has Password (i.e. the last command line parameter) as its name. Could you please tell us if you get such an error message after login, and if there is a database which has Password (i.e. the last command line parameter) as its name?
If we know the reason why the command shown above works although it shouldn't, then we will know the reason why your second command (mysql -h myhost -u myuser --password=) fails.
EDIT 1 (after you have edited your question)
This behavior is expected. Saying --password= is formally the same as saying --password=''; in other words, you are telling the MySQL client that it should use the empty string as password.
If you want it to prompt for the password, then just use --password (without the equal sign) instead. Your command line line then would be:
mysql -h myhost -u myuser --password
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 a picture on the website below, which shows all tries I have done in vain.
What is the right way to create this dump file? I want to create it and later use it.
I think that user logger in system don't have write access to designated location.
Try to write a dump in Your profile folder in c:\users\YOUR_LOGIN_NAME
ex:
mysqldump -uroot -proot derek > c:\users\matt\dump.sql
Looks like a problem with authentication. Are you giving it the correct password? If you are, check if this user with this password is allowed to login from localhost. Information should be in the users table.
According to this,
--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, mysqldump prompts for one.
If your username is root and your password is root, change
mysqldump -u root -p root
to
mysqldump -u root -proot