9

PHPスクリプトを介してmysqldumpを実行するcronジョブを実行していますが、ダンプにはRELOAD特権が必要です。MySQL管理者アカウントを使用することは正しくないと感じますが、管理者権限を持つユーザーを作成することも正しくありません。

私の主な関心事はセキュリティの側面です。使用しているクラスの保護された配列「プロパティ」にdb属性(ユーザー名、パスワードなど)をロードしています。

どちらのアプローチがより理にかなっているのか、それとも同じ結果を達成する別の方法があるのか​​疑問に思います。


概要:
LAMPサーバー:CENTOS 5.8、Apache 2.2.3、MySQL 5.0.95、PHP 5.3.3

cronジョブの概要:

  1. Webサイトdbの2つのInnoDBテーブルから生の統計データをダンプします。これらには外部キーの関係があります。
  2. 統計データベースのテーブルにデータをロードします
  3. 転送された自動インクリメント主キーの最後の値を取得します
  4. Webサイトデータベースからコピーされたデータを削除するクエリで主キー値を使用します
  5. 統計データベースで転送されたデータを処理して、レポートテーブルにデータを入力します
  6. 処理が完了したら、統計データベースから生の統計データを削除します

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資格情報を使用すると正常に動作します。

4

2 に答える 2

5

どちらのアプローチがより理にかなっているのか、それとも同じ結果を達成する別の方法があるのか​​疑問に思います。

つまり、そのmysqldumpコマンドを実行するには、特定の権限を持つユーザーが必要です。この1つのcronジョブのためだけに新しいユーザーを作成するのはばかげているように見えるかもしれませんが、少なくともlolsecurityの外観を与えることができる最も簡単で単純なアプローチです。

これがレプリケーションを起動して実行できるようになるまでの一時的な手段であることを考えると、ここで実際に害が生じることはありません。レプリケーションによってこれを行うことは完全に進むべき道であり、一時的な対策は正気のようです。

また、レプリケーションを開始するときは、xtrabackupが最適です。バイナリログの名前と位置情報がスナップショットとともに含まれているため、新しいスレーブを簡単にセットアップできます。

于 2012-12-19T04:37:32.323 に答える
3

MySQLのrootユーザーとして実行している場合でも、この同じエラー(おそらく、作業していたのと同じサイトで:))に遭遇しました。--skip-add-locksを指定しないことで、なんとか回避できました。たとえば、これは機能しました。

/usr/bin/mysqldump -u USERNAME -pPW DATABASE_NAME --skip-lock-tables --single-transaction --flush-logs --hex-blob
于 2015-02-19T05:29:24.873 に答える