我有自动mysql备份安装在 Debian 上。我添加了 USERNAME 和 PASSWORD 到/etc/default/automysqlbackup
,但是当 automysqlbackup 运行时,我得到了输出:
/etc/cron.daily/automysqlbackup:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO
就像我没有配置任何凭据一样。
automysqlbackup 配置是默认配置,最后添加了两行:
USERNAME=root
PASSWORD="the root password"
/etc/mysql/debian.cnf
默认配置尝试从(使用 bash 代码片段中的 grep )获取凭据/etc/default/automysqlbackup
,其中包含一条警告,提示该文件已被弃用,并且在新安装中不再包含任何管理员密码。
我尝试使用 strace 来运行 automysqlbackup,/etc/default/automysqlbackup
即使不是由 cron 启动,它至少也可以读取数据。不过,它不使用密码。
答案1
问题在于在文件末尾附加用户名和密码,而该文件被视为 shellscript,并包含一些mysql
命令来列出已经需要登录的数据库名称。
它还似乎debian.cnf
通过查找如下数据库,做出了可用且包含所需凭据的有力假设:
DBNAMES=`mysql --defaults-file=/etc/mysql/debian.cnf --execute="SHOW DATABASES" | awk '{print $1}' | grep -v ^Database$ | grep -v ^mysql$ | grep -v ^performance_schema$ | grep -v ^information_schema$ | tr \\\r\\\n ,\ `
这可能需要使用参数来$USERNAME
代替$PASSWORD
已弃用的默认文件。
我知道旧的 mysql/mariadb 包配置了一个维护用户,debian.cnf
但是新安装不包含这样的帐户,因此在尝试列出数据库时脚本已经失败。
配置文件中已经包含一个似乎有效的注释掉的替代方案:
DBNAMES=`find /var/lib/mysql -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f5 | grep -v ^mysql\$ | tr \\\r\\\n ,\ `
我必须说,这两条线路对我来说看起来有点脆弱。我不确定这是否会在某个时候中断,并且整个 automysqlbackup 脚本或至少其配置可能不是最强大的解决方案。