在我的 OpenBSD 机器上,我为用户 _mysql 设置了以下 crontab
0 4 * * * /backup/mysql_backup/mysql_backup.sh
0 9 * * 1 mysql -uroot -pMySQLpassword -e "purge master logs before date_sub(now(),interval 5 day);"
第一个任务旨在备份此机器上的 mysql 数据库。我现在意识到这些任务之所以没有运行,是因为用户 _mysql 被拒绝连接(我已确认 _mysql 用户的密码是正确的)。
所以,我想我应该把这些作业放在不同用户的 crontab 中,但哪个(我认为它们不应该在 root 的 crontab 中)?所以,我正在寻找有关如何配置它的建议。或者我需要更改我的 mysql 配置。
编辑
该脚本与数据库位于同一台服务器上。这些 crontab 条目失败并出现错误
connect(';host=localhost;mysql_read_default_group=mysqlhotcopy','',...) 失败:在 /usr/local/bin/mysqlhotcopy 行 178 aigaion_copy DBI,用户 '_mysql'@'localhost' (使用密码:是) 的访问被拒绝
答案1
您可以在 my.cnf 中使用 expire_logs_days=5 来执行与第二个 cron 作业相同的功能。它可能更可靠。
答案2
运行 cronjob 的系统用户 (_mysql) 与连接到数据库的用户 (root) 无关。唯一重要的是脚本连接的服务器主机名/ip。
脚本和数据库位于同一台服务器上吗?尝试运行命令时您遇到的具体错误是什么?
答案3
根据发布的错误消息,用户“_mysql”@“localhost”在数据库内没有必要的权限。
您需要授予该用户必要的权限或在 /backup/mysql_backup/mysql_backup.sh 脚本中使用不同的凭据。