之前备份Docker下的MySQL数据库,我都是这样写的:
docker exec mysql sh -c 'exec mysqldump somedatabase -uroot -pmy-secret-pw' > /opt/somedatabase-dump.sql
somedatabase 是某个数据库的名字,-p后面的是密码,如果密码包含了复杂的特殊字符密码,例如里面含有$@!等字符,就会提示密码不正确。
解决方案是把密码作为变量,并且修改写法,如下:
MYSQL_PASSWORD='mysqlpwd@3$5' cmd="docker exec mysql /usr/bin/mysqldump somedatabase -uroot --password='$MYSQL_PASSWORD' > /opt/somedatabase-dump.sql" eval "$cmd"
还有一个办法,把密码存到文件中,例如 /opt/password_file.txt
docker exec mysql sh -c 'exec mysqldump somedatabase -uroot --password-file=/opt/password_file.txt' > /opt/somedatabase-dump.sql
文章评论