php - PHP cron 作业期间 mysqldump 的 MySQL 重新加载权限 : Use MySQL admin account or create unique user? 安全性?

标签 php mysql cron innodb mysqldump

我正在运行一个通过 PHP 脚本执行 mysqldump 的 cron 作业,转储需要 RELOAD 权限。使用 MySQL 管理员帐户感觉不对,但创建具有管理员权限的用户也不对。

我主要关心的是安全方面,我在我正在使用的类的 protected 数组“属性”中加载数据库属性(用户名、密码等)。

我想知道哪种方法更有意义,或者是否有另一种方法可以达到相同的结果。


概述:
LAMP服务器:CENTOS 5.8、Apache 2.2.3、MySQL 5.0.95、PHP 5.3.3

Cron 作业大纲:

  1. 从网站数据库中的两个 InnoDB 表中转储原始统计数据,它们 有外键关系。
  2. 将数据加载到统计数据库中的表中
  3. 获取自增主键的最后一个值 转移
  4. 在删除复制数据的查询中使用主键值 来自网站数据库
  5. 处理统计数据库中传输的数据以填充报告 表格
  6. 处理完成后,从统计数据中删除原始统计数据 分贝

网站数据库被配置为具有二进制日志记录的主服务器,一旦统计数据不再在网站数据库中存储和处理,将设置复制服务器(复制网站数据库是将统计数据移动到他们自己的数据库)。

在 cron 作业期间访问的所有文件都位于 DocumentRoot 目录之外。


细节:
第一步执行的mysqldump需要RELOAD权限,命令如下:

<?php
$SQL1 = "--no-create-info --routines --triggers --master-data ";
$SQL1 .= "--single-transaction --quick --add-locks --default-character-set=utf8 ";
$SQL1 .= "--compress --tables stats_event stats_event_attributes";

$OUTPUT_FILENAME = "/var/stats/daily/daily-stats-18.tar.gz";

$cmd1 = "/usr/bin/mysqldump -u website_user -pXXXXXX website_db $SQL1 | gzip -9 > $OUTPUT_FILENAME";

exec( $cmd1 );
?>

错误信息:

mysqldump: Couldn't execute 'FLUSH TABLES': Access denied; you need the RELOAD privilege for this operation (1227)

如果我使用 mysql 管理员凭据,工作正常。

最佳答案

I'm wondering which approach makes more sense or if there's another way to achieve the same results.

底线是您需要具有特定权限的用户才能运行该 mysqldump 命令。虽然为这个 cron 作业创建一个新用户只是可能看起来很愚蠢,但这是您可以采用的最直接、最简单的方法,至少可以提供 lol 安全性的外观。

鉴于这是一个权宜之计,直到您可以启动并运行复制,所以这里没有真正的伤害。通过复制来做到这一点完全是可行的方法,权宜之计似乎是理智的。

此外,当需要开始复制时,xtrabackup是你的 friend 。它包括二进制日志命名和位置信息以及它拍摄的快照,这使得设置新的从站变得轻而易举。

关于php - PHP cron 作业期间 mysqldump 的 MySQL 重新加载权限 : Use MySQL admin account or create unique user? 安全性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13944882/

相关文章:

php - Symfony 服务中的模拟邮件程序

jquery - 当用户关闭页面时更改mysql上的数据

javascript - 如何将mysql datetime传递给输入datetime-local

php - 获取单个数组中的两个类别值

javascript - 无需页面刷新即可制作 Ajax 和 PHP 更新页面?

php - 如何编码单引号

java - Apache Camel 每天安排多次

PHP 脚本在 Ubuntu 服务器上不能作为 cron 作业运行

java - quartz 不触发简单触发器

php - Laravel 5.x 如何使用路由名称获取 Controller 名称?