Even better, don't put the username or password on the command line where it can be seen by anyone who can do ps -ef
.
Create a control file named something like /etc/mysqldump.cnf
:
[client]
user=root
password=YOUR_MYSQL_ROOT_PASSWORD
...where client
is literal (not the name of your server) and YOUR_MYSQL_ROOT_PASSWORD
is... well... your mysql root password.
Then invoke like this:
mysqldump --defaults-file=/etc/mysqldump.cnf DATABASE | gzip > /home/USERNAME/backups-mysql/BACKUP.gz
Personally my invocation is more like this:
#!/bin/bash
NOW=`perl -e 'print time;'`
cd /opt/backup/mysql
mkdir $NOW
for i in `echo "show databases" | mysql -u root --password="MySqlRootPassword" | grep -v Database`; do
mysqldump --defaults-file=/etc/mysqldump.cnf --databases $i --opt > $NOW/$i.dump
one
tar cfpz $NOW.tgz $NOW
du -sh $NOW $NOW/* > $NOW.report
rm -rf $NOW
I've never figured out how to use a similar --defaults-file
parameter for mysql, however since this command runs fairly quickly the risk of exposure is much lower... although really that should be fixed.