2009-03-02 5 views
10

私はFreeBSDを実行している私のウェブサーバーでバックアップcronジョブを作成しようとしました。それは私がそれを実行したときにルートを接続するために使用するユーザー名とパスワードを使用して.my.cnfを持っているので(ルートとして正常に動作しますが、ジョブの実行時にセキュアMySQLバックアップcronジョブ - my.cnfが読み込まれていません

/usr/local/bin/mysqldump --opt --single-transaction --comments --dump-date --no-autocommit --all-databases --result-file=/var/backups/mysql/all.sql

:現在、それは次のようになりますcronのことで、my.cnfファイルが読み込まれません。

(それはちょっと不安定なだから)コマンド自体にユーザ名とパスワードを入れなくても、その周りに方法はありますか?

不思議なことに、私はPostgreSQLと.pgpassファイルで同じ設定をしており、それは魅力的に機能します。

答えて

16

それはmysqldumpを実行している方、ユーザが読めるだと仮定し.my.cnfファイルを(見つけるためにそれを伝えるために--defaults-extra-fileオプションを使用

+0

*簡単に;;)* upvote * – Node

+0

ああ、そうです。どのように私はそれを逃しましたか?私はそれを私の夜間の仕事にこだわるだけです。 :)私は眠っているときにそれをメッセージを得ることを楽しみにしています:) – mikl

+0

実際には、それはMySQLオンラインドキュメントで見つけるのは簡単ではありませんでした。個々のプログラムのどれも、そのマンページでそのオプションを言及していません。 – Alnitak

2

実際にはcronは奇妙なことに.my.cnfを読みます。/etc/crontabやcrontab -eでcronjobをどうやって動かすのですか? mysqldumpを使用している小さなシェルスクリプトであるAutoMySQLBackupを試すことができます。

+0

実際、それはcronから直接実行されるのではなく、FreeBSDの 'periodic'システムによって実行されます。実際には/ usr/local/etc/periodic/dailyのスクリプトファイルです。 定期的なcronジョブは、次のように '/ etc/cron'で実行されます。 >' 1 * *定期的な毎日のルート – mikl

+0

ああ、Markdownコメント内で有効になっていません。とにかく可読性があるといいですね:) – mikl

0

FreeBSDでは次を追加することができます。

security.bsd.see_other_uids=0 

の/ etcへ/sysctl.conf、再起動、またはsysctlの値を設定する

sysctl security.bsd.see_other_uids=0 

を使用する。

これで、root以外のユーザーは、自分のプロセスだけを表示できます。したがって、パスワードをコマンドラインに入力することは危険性が低くなります。

また、どのようにcrontabを実行していますか? crontab -e -u rootを使ってrootユーザーのcrontabに追加しましたか、/ etc/crontabに追加しましたか?

適切なアクセス権が.my.cnfに設定されていることと、crontabによって設定されている環境変数が、ホームディレクトリとは別の場所(FreeBSDのルートは/ルート)。

2

私もこれに遭遇しました。

MySQLは '$ HOME/.my.cnf'のようなものではなく、 '〜/ .my.cnf'を探すようにハードコードされているようです。の/ etcから/ crontabのは、チルダ「〜」の文字を無視しますので、実際には〜/ .my.cnf

のような値を無視し、次のように動作しませんと呼ばれるFreeBSD上で

、cronジョブ全く私:

MySQLの--defaults-余分なファイル=〜/ .my.cnf

しかし、$のHOME変数を使用して作業を行います。

HOME = /ホーム/管理 MySQLを - -defaults-extra-file = $ HOME/.my。cnf

代わりに、/ etc/crontabから/ var/cron/tabs/root(rootとして 'crontab -e'を使用)に移動すると、私のcronjobが動作します。

関連する問題