回答:
上述のようにman mysqldump
:参照6.1.2.1を。MySQLリファレンスマニュアルのパスワードセキュリティのエンドユーザーガイドライン。
オプションファイルは、特に上記の参考文献によると、最も安全な賭けです。crontabでプレーンテキストで指定するのは良くありません。特に、デフォルトではプロセスのコマンドラインps
が他のユーザーに表示されるためです。リファレンスで説明されているように、同じことが実際に環境変数に適用されます。
オプションファイルにパスワードを保存します。たとえば、Unixでは、ホームディレクトリのファイルの
[client]
セクションにパスワードをリストできます.my.cnf
。[client] password=your_pass
パスワードを安全に保つために、ファイルは自分以外の誰もアクセスできないようにする必要があります。これを確実にするには、ファイルアクセスモードを
400
またはに設定します600
。例えば:shell> chmod 600 .my.cnf
パスワードを含む特定のオプションファイルをコマンドラインから指定するには、
--defaults-file=file_name
オプションを使用します。ここfile_name
で、はファイルへのフルパス名です。例えば:shell> mysql --defaults-file=/home/francis/mysql-opts
セクション4.2.3.3「オプションファイルの使用」では、オプションファイルについて詳しく説明します。
特定のユーザーとしてcronjobを実行し、単純なBashロジックを使用して、ユーザー(またはグループ)のみがアクセスできる権限を持つシステム上のどこかに保存されているプレーンテキストファイルからパスワードを抽出します。
PASS=`cat /path/to/pwdfile`
mysqldump -u aUser -p $PASS--all-databases > backup.sql
したがって、cronjobがユーザー「example」として実行される場合、ファイルの所有権は「example:example」であり、許可された0400である必要があります。
ユーザーレベルの.my.cnfを使用して同様の機能を実現することもできます。
read PASS < /path/to/pwdfile
は同じことをするための慣用的なクリーナーです(ほぼ間違いなく、superuser.com / q / 323060/49184が適用されます)。
ARGMAX
ことのような構造を誘惑かもしれないが、それは内蔵のシェルを使用しての余分なプロセスを代わりに受け取り、for i in `cat file`; do ...
として、などの問題、のしかし、もちろん、独自の配列を持ちますほとんどの場合:何が起こっているかを知っていれば、自由に選択できます。私は、それがどのように見えるかに関わらず、ここでの十字軍ではありません:-D。
バックアップのために、次のようにmysqlに読み取り専用ユーザーを持つことを検討してください。
CREATE USER bUser IDENTIFIED BY 'p4ss';
GRANT SELECT ON *.* TO bUser@localhost;
GRANT LOCK TABLES ON *.* TO bUser@localhost;
mysqldumpには、そのジョブを実行するための特権SELECT
とLOCK TABLES
特権のみが必要です。