【问题标题】:Executing events in MySQL without SUPER privelege (?)在没有超级权限的情况下在 MySQL 中执行事件 (?)
【发布时间】:2018-01-26 04:35:56
【问题描述】:

我在我的 MySQL 中创建了事件。他们正在工作,但为了让他们执行,我需要

SET event_scheduler = ON;.

为此,我需要获得 SUPER 特权。我收到以下错误:

访问被拒绝;您需要(至少一个)超级权限才能执行此操作

我尝试授予 super:GRANT SUPER ON *.* TO user@'localhost' IDENTIFIED BY 'password'; 并得到另一个错误:

错误 1045 (28000):用户访问被拒绝

我已经联系了我的主机,他们说因为他们的主机是共享的,所以他们无法为我的帐户添加超级权限。

谁能帮我找到另一种方法,让事件开始运行?帐号不属于我,所以我无法切换主机。

【问题讨论】:

  • 获取另一个允许超级权限的主机?在php中创建一个cron作业?
  • 除非托管服务提供商启用事件调度程序,否则您别无选择。
  • @FrankerZ 我不知道 PHP 中存在“cron”。帮了大忙。
  • 您希望我添加一个带有 cron 示例的答案吗?
  • 几乎忘记了共享主机上的事件

标签: mysql


【解决方案1】:

Cron 作业可能是共享主机上的最佳选择。如果您可以访问cPanel,它将让您的生活更轻松。

首先要做的是:创建您的脚本。这可以访问数据库,发送电子邮件,几乎可以做任何需要做的事情。请注意,$_GET$_POST$_REQUEST$_COOKIE 在脚本执行期间将不可用,因为这不是网络请求。您将无法设置 cookie,或查看有关远程用户的信息(因为没有)。但是,您可以使用$argv 通过命令行传递变量。请参阅this post 了解更多信息。

此示例脚本将向to_be_mailed 表中的所有用户发送简报:

<?php

include('db.cfg.php');
include('newsletter.php');

$body = get_newsletter();

$result = $db->query("SELECT * FROM to_be_mailed");

while ( $row = $result->fetch_row() )
{
    mail($row['email'], 'Nightly news update!', $body);
}

//Probably want to update the database again and set them all to sent.

echo 'Done sending emails!';

调试脚本可能很困难,因为您通常无权访问输出。查看this answer 并确保启用error_logs 以确保脚本成功执行。

使用cPanel's Cron Jobs 时,它会在执行结束时通过电子邮件将输出发送给您,从而使您的生活更轻松。这使您可以更轻松地跟踪错误,并确保您的 cron 作业成功执行。

接下来添加您的 cron 作业:

  • 有关如何为启用 cPanel 的主机添加 cron 作业的信息,请参阅 cPanel's Cron Jobs
  • 非 cpanel 主机:See this post。要点是,您使用crontab -e 添加任务(这将打开一个编辑器,您将在以下行中添加):
    # crontab -e
    00 * * * * /usr/local/bin/php /home/USERNAME/myscript.php
  • 如果您刚刚开始使用 cron 语法,this site 绝对是绝妙的。它将为您提供示例、语法帮助,并帮助您确定要运行的计划。

【讨论】:

    猜你喜欢
    • 2011-09-04
    • 2021-09-06
    • 2018-02-06
    • 2021-01-05
    • 2014-08-22
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多