I wrote a script to backup my MySQL databases using:
mysqldump --opt --all-databases -u user -pmypassword > myDump.sql
A cron launches it every night and scp the result to another server.
mypassword
appears in clear in my script, everyone can see it with the appropriate rights. I have been told about /proc issues too (where the cmd run can be seen).
MySQL documentation says:
Specifying a password on the command line should be considered insecure. See Section 7.6, "Keeping Your Password Secure".
I have not found this magic 7.6 sections anywhere.
What is the good practice to deal with automatic mysqldump and password security?
The following method works for me on a Windows machine, if you have 2 versions of MySQL installed, and you are not sure which my.ini is used when you run mysqldump, this will also help:
1, C:\ProgramData\MySQL\MySQL Server 5.6\my.ini, fine [client], replace it to:
2, Use this command:
C:\Program Files\MySQL Server 5.6\bin>mysqldump --default-extra-file="C:\ProgramData\MySQL\MySQL Server 5.6\my.ini" -u my_user db_to_export > db_to_export.sql
to add to Sahil's answer above, use --defaults-extra-file
--defaults-extra-file is used to tell a program to read a single specific option file in addition to the standard option files.
whereas --defaults-file is read instead of the default my.cnf file.
The accepted answer stores the password in a plain text file, which could be read by anyone with administrative (root) access. If your database is in a shared hosting environment, this is undesirable.
A better option would be to use
mysql_config_editor
to create an encrypted login path namedmysqldump
. According to the MySQL documentation:The following command will create your
mysqldump
login path:You will be prompted to enter your password, and the login path you created will be stored in encrypted format.
mysqldump
will automatically use this login path whenever you call it in the future, unless you specify a different login path with the--login-path
command line option.Here is how you would invoke
mysqldump
after creating an encrypted login path:All answers here are in pieces so sharing a complete command which will do the required and must be used if database are heavy in size,
--single-transaction
and--lock-tables
are very important hereNote: Answer is in add of Avibodha and sahil answer, they have already made the point. I am just putting their answer in single piece of code with
important measure should be taken at time of backing up live database
Check out Keeping Passwords Secure for a good answer. You can store your password in the my.cnf file changing the permissions on that file to keep the password secure.
You can also check the last comment on this page too:
MYSQL_PWD="tinkerbell" mysqldump -ubackup --all-databases > dump.sql
Quoting the MySQL docs(http://dev.mysql.com/doc/refman/5.1/en/password-security-user.html):