PHP cron作业期间mysqldump的MySQL重载权限:使用MySQL管理员帐户还是创建唯一用户?安全?

cod*_*gle 9 php mysql cron innodb mysqldump

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

我主要担心的是安全方面,我正在我正在使用的类的受保护数组"属性"中加载db属性(用户名,密码等).

我想知道哪种方法更有意义,或者是否有其他方法可以实现相同的结果.


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

Cron工作大纲:

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

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

在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 );
?>
Run Code Online (Sandbox Code Playgroud)

错误消息:

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

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

Cha*_*les 5

我想知道哪种方法更有意义,或者是否有其他方法可以实现相同的结果.

最重要的是,您需要具有某些特权的用户才能运行该mysqldump命令.虽然它可能看起来很可笑创建一个新用户为这一个cron作业,这是你可以采取至少给lolsecurity的外观最直接,最简单的方法.

鉴于这是一个权宜之计,直到你可以启动并运行复制,这里没有真正的伤害.通过复制实现这一目标是完全可行的方法,权宜之计措施似乎是理智的.

此外,当到了复制的时候,xtrabackup是你的朋友.它包括二进制日志命名和位置信息及其拍摄的快照,这使得设置新的从属设备变得轻而易举.