我正在通过 bash 脚本运行 mysqldump,但遇到密码包含特殊字符的问题。
mysqldump -hlocalhost -uUSERNAME -pPA$$W0RD DATABASE |
gzip > /home/USERNAME/backups-mysql/BACKUP.gz
Run Code Online (Sandbox Code Playgroud)
我如何转义密码?
更好的是,不要将用户名或密码放在命令行上,任何人都可以看到它ps -ef。
创建一个名为如下的控制文件/etc/mysqldump.cnf:
[client]
user=root
password=YOUR_MYSQL_ROOT_PASSWORD
Run Code Online (Sandbox Code Playgroud)
...哪里client是文字(不是您的服务器的名称)并且YOUR_MYSQL_ROOT_PASSWORD是...嗯...您的 mysql root 密码。
然后像这样调用:
mysqldump --defaults-file=/etc/mysqldump.cnf DATABASE | gzip > /home/USERNAME/backups-mysql/BACKUP.gz
Run Code Online (Sandbox Code Playgroud)
就个人而言,我的调用更像是这样:
#!/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
Run Code Online (Sandbox Code Playgroud)
我从来没有想过如何--defaults-file为 mysql使用类似的参数,但是由于这个命令运行得相当快,暴露的风险要低得多......尽管确实应该修复。