我有一个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为什么会失败?
答案 0 :(得分:0)
好的...我知道了。这是对/root/.my.cnf文件的SELinux权限。 (我发现那里的信息说/etc/.my.cnf文件也可以工作,但是显然在这种情况下没有对其进行检查。)
当我意识到如果在运行logrotate命令时未在环境中设置$ HOME环境变量会触发完全相同的错误时,我将暂时导致错误的路径。因此,如果看到的不是SELinux,请检查$ HOME变量,并确保相应的目录包含.my.cnf文件。