web-dev-qa-db-ja.com

mysqldumpがcrontabで機能しない

Mysql dbをバックアップするcrontab(ubuntuサーバー)にcronjobを追加しようとしています。

ターミナルでrootとしてスクリプトを実行してもうまくいきますが、crontabに挿入しても何も起こりません。毎分実行しようとしましたが、/ var/db_backupsフォルダーにファイルが表示されません。

(他のcronjobsはうまくいきます)

ここにcronjobがあります:

* * * * * mysqldump -u root -pHERE THERE IS MY PASSWORD --all-databases | gzip>/var/db_backups/database_`date +%d%m%y`.sql .gz

何が問題になるのでしょうか?

21
xspecial

%文字を\でエスケープする必要があります

mysqldump -u 'username' -p'password' DBNAME > /home/eric/db_backup/liveDB_`date +\%Y\%m\%d_\%H\%M`.sql
73
The Java Guy

Cronログを確認します(/ var/log/syslogにあるはずです)。grepを使用してそれらを除外できます。

grep CRON/var/log/syslog

また、ローカルメールボックスをチェックして、cronメールがあるかどうかを確認することもできます。

/ var/mail/username

Crontabファイルで他の受信メールを設定することもできます

[email protected]

5
adam187

同じことを試していましたが、ダンプが0KBで作成されていることがわかりました。したがって、時間を節約したソリューションについて知りました。

コマンド:

0 0 * * * mysqldump -u 'USERNAME' -p'PASSWORD' DATEBASE > /root/liveDB_`date +\%Y\%m\%d_\%H\%M\%S`.sql

注: 1)必要に応じて時間設定を変更できます。上記のコマンドで毎日設定しています。

2)USERNAME、PASSWORD、およびDATABASEを単一引用符( ')の中に入力してください。

3)Crontabで上記のコマンドを書き留めます。

これが誰かのお役に立てば幸いです。

4
Krupal Patel

または、カスタムコマンドmycommandを作成することもできます。さらにオプションを追加できます。実行権限を与える必要があります。

すべてのバックアップを保存するフォルダーを作成することをお勧めします。この場合、たとえば「自宅」に最初に作成される書き込み可能なフォルダー「backup」を使用します。

マイコマンド "usr/local/bin/mycommand":

#!/bin/bash
MY_USER="your_user"
MY_PASSWORD="your_pass"
MY_HOME="your_home"
case $1 in 
"backupall")
    cd $MY_HOME/backup
    mysqldump --opt --password=$MY_PASSWORD --user=$MY_USER  --all-databases > bckp_all_$(date +%d%m%y).sql
    tar -zcvf bckp_all_$(date +%d%m%y).tgz bckp_all_$(date +%d%m%y).sql
    rm bckp_all_$(date +%d%m%y).sql;;
*)  echo "Others";;
esac

Cron:毎月1日を実行します。

0 0 1 * * /usr/local/bin/mycommand backupall

それがいくらか役に立てば幸いです。

2
alditis

新しいファイルを作成し、そこでコードを実行して、ファイルの場所にダンプし、Zip圧縮します。 cronを介してそのスクリプトを実行する

0
user3277973

Ubuntuで Percona Server (MySQLフォーク)を使用しています。パッケージ(通常のMySQLパッケージも同様)には、debian-sys-maintというメンテナンスアカウントが付属しています。このアカウントを使用するために、パッケージのインストール時に資格情報が作成されます。そして、それらは/etc/mysql/debian.cnfに格納されます。

そして驚きです:/root/.my.cnfを指すシンボリックリンク/etc/mysql/debian.cnfもインストールされます。

このファイルは オプションファイルmysqlまたはmysqldumpを使用すると自動的に読み込まれます。つまり、基本的には、そのファイルとコマンドラインで、ログイン資格情報が2回与えられます。これが私が抱えていた問題でした。

したがって、この状態を回避する1つの解決策は、mysqldump--no-defaults オプションを使用することです。その場合、オプションファイルは読み込まれません。ただし、コマンドラインを介して資格情報を提供するため、psを発行できるユーザーは、バックアップが実行されると実際にパスワードを見ることができます。したがって、ユーザー名とパスワードを使用して独自のオプションファイルを作成し、これを --defaults-file を介してmysqldumpに渡すことをお勧めします。

mysql_config_editor を使用するか、任意のエディタでオプションファイルを作成できます。

mysqldumpが通常$HOMEを変更しないため、_Sudoが機能するときにコマンドラインからrootを介してSudoを実行すると、.my.cnfが見つかりません。 cronjobとして実行する場合はそうです。

0
Shi

ローカルホストmysqlバックアップ:0 1 * * */usr/local/mysql/bin/mysqldump -uroot -ppassword --opt database> /path/to/directory/filename.sql

(-pとパスワード、または-uとユーザー名の間にスペースはありません。rootを正しいデータベースユーザー名に置き換えてください。)

わたしにはできる。 -pとパスワード、または-uとユーザー名の間にスペースを入れない

0
张春吉

わかりました、同様の問題があり、修正することができました。

あなたのケースでは、そのmysqldumpコマンドをスクリプトに挿入し、mysqldumpコマンドを実行しているユーザーのプロファイルを次のように取得できます。

. /home/bla/.bash_profile

次に、mysqldumpコマンドの絶対パスを使用します

/usr/local/mysql/bin/mysqldump -u root -pHERE THERE IS MY PASSWORD --all-databases | gzip > /var/db_backups/database_`date +%d%m%y`.sql.gz
0
niroshan.l