PHPスクリプトを介してmysqldumpを実行するcronジョブを実行していますが、ダンプにはRELOAD特権が必要です。MySQL管理者アカウントを使用することは正しくないと感じますが、管理者権限を持つユーザーを作成することも正しくありません。
私の主な関心事はセキュリティの側面です。使用しているクラスの保護された配列「プロパティ」にdb属性(ユーザー名、パスワードなど)をロードしています。
どちらのアプローチがより理にかなっているのか、それとも同じ結果を達成する別の方法があるのか疑問に思います。
概要:
LAMPサーバー:CENTOS 5.8、Apache 2.2.3、MySQL 5.0.95、PHP 5.3.3
cronジョブの概要:
- Webサイトdbの2つのInnoDBテーブルから生の統計データをダンプします。これらには外部キーの関係があります。
- 統計データベースのテーブルにデータをロードします
- 転送された自動インクリメント主キーの最後の値を取得します
- Webサイトデータベースからコピーされたデータを削除するクエリで主キー値を使用します
- 統計データベースで転送されたデータを処理して、レポートテーブルにデータを入力します
- 処理が完了したら、統計データベースから生の統計データを削除します
Webサイトデータベースはバイナリロギングを備えたマスターとして構成され、統計データがWebサイトデータベースに保存および処理されなくなると、複製されたサーバーがセットアップされます(Webサイトデータベースの複製は、統計を独自のデータベースに移動するための推進力でした) )。
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)
mysqladmin資格情報を使用すると正常に動作します。