Answers:
如中所述man mysqldump
:参见6.1.2.1。MySQL参考手册中的《最终用户密码安全准则》。
选项文件是最安全的选择,尤其是根据上述参考。在crontab中以纯文本形式提供它不是很好,这尤其是因为默认情况下ps
其他用户可以通过该进程命令行看到它。实际上,这也适用于参考资料中所述的环境变量。
将密码存储在选项文件中。例如,在Unix上,您可以在主目录中文件的
[client]
部分中列出密码.my.cnf
:[client] password=your_pass
为了确保密码安全,除了您自己之外,任何人都不能访问该文件。为此,请将文件访问模式设置为
400
或600
。例如:shell> chmod 600 .my.cnf
要从命令行命名包含密码的特定选项文件,请使用
--defaults-file=file_name
选项,其中file_name
是文件的完整路径名。例如:shell> mysql --defaults-file=/home/francis/mysql-opts
以特定用户身份运行cronjob,并使用一些简单的Bash逻辑从存储在系统某处的纯文本文件中提取密码,该文件的权限仅允许用户(或组)访问它。
PASS=`cat /path/to/pwdfile`
mysqldump -u aUser -p $PASS--all-databases > backup.sql
因此,如果cronjob以用户'example'的身份运行,则文件的所有权应为“ example:example”,并且权限为0400。
您还可以使用用户级.my.cnf实现类似的功能。
read PASS < /path/to/pwdfile
是做同一件事的惯用语言(可以说我猜是这样;superuser.com/q/323060/49184适用)。
为了进行备份,请考虑在mysql中拥有一个只读用户,如下所示
CREATE USER bUser IDENTIFIED BY 'p4ss';
GRANT SELECT ON *.* TO bUser@localhost;
GRANT LOCK TABLES ON *.* TO bUser@localhost;
mysqldump只需要SELECT
和LOCK TABLES
特权就可以完成它的工作。