mysqldump抛出“访问被拒绝”错误,但仅当通过logrotate运行时才会出现?

时间:2019-12-03 14:02:25

标签: mysql cron logrotate

我有一个CentOS 7.7盒子。它正在运行mariadb 15.1

我正在尝试设置一个每天将数据库转储到文件系统的过程。转储的数据将由logrotate管理,logrotate将转储数据并旋转文件,仅保留最新版本。

我已经在其他系统上做到了这一点,但没有问题,但是该服务器没有配合。

/etc/logrotate.d/mariadb文件包含与以下类似的节(系统上的每个数据库一个):

/usr/local/backups/database-dumps/dbname-SQL-dump.sql.gz {
    daily
    rotate 8
    nocompress
    create 640 root adm
    postrotate
    mysqldump -u root dbname > /usr/local/backups/database-dumps/dbname-SQL-dump.sql --single-transaction
    gzip -9f /usr/local/backups/database-dumps/dbname-SQL-dump.sql
    endscript
}

我已经在/ root和/ etc中创建了.my.cnf文件(权限设置为0600,由root拥有)。

如果这通过正常计划的logrotate运行,则总是失败,并显示以下信息:

mysqldump: Got error: 1045: "Access denied for user 'root'@'localhost' (using password: NO)" when trying to connect

如果我使用crontab条目(例如:)使用root的cron作业显式运行该logrotate配置文件,则它起作用:

50 8 * * * /usr/sbin/logrotate -f /etc/logrotate.d/mariadb

我想念什么?为什么通过root的crontab运行mysqldump会起作用,而通过正常调度的logrotate运行时mysqldump为什么会失败?

1 个答案:

答案 0 :(得分:0)

好的...我知道了。这是对/root/.my.cnf文件的SELinux权限。 (我发现那里的信息说/etc/.my.cnf文件也可以工作,但是显然在这种情况下没有对其进行检查。)

当我意识到如果在运行logrotate命令时未在环境中设置$ HOME环境变量会触发完全相同的错误时,我将暂时导致错误的路径。因此,如果看到的不是SELinux,请检查$ HOME变量,并确保相应的目录包含.my.cnf文件。