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工作大纲:
网站数据库配置为具有二进制日志记录的主数据库,一旦统计数据不再存储并在网站数据库中处理,将设置复制服务器(复制网站数据库是将统计数据移动到自己的数据库的动力) ).
在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管理员凭据,工作正常.
我想知道哪种方法更有意义,或者是否有其他方法可以实现相同的结果.
最重要的是,您需要具有某些特权的用户才能运行该mysqldump命令.虽然它可能看起来很可笑创建一个新用户只为这一个cron作业,这是你可以采取至少给lolsecurity的外观最直接,最简单的方法.
鉴于这是一个权宜之计,直到你可以启动并运行复制,这里没有真正的伤害.通过复制实现这一目标是完全可行的方法,权宜之计措施似乎是理智的.
此外,当到了复制的时候,xtrabackup是你的朋友.它包括二进制日志命名和位置信息及其拍摄的快照,这使得设置新的从属设备变得轻而易举.
| 归档时间: |
|
| 查看次数: |
3962 次 |
| 最近记录: |