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
何が問題になるのでしょうか?
%文字を\でエスケープする必要があります
mysqldump -u 'username' -p'password' DBNAME > /home/eric/db_backup/liveDB_`date +\%Y\%m\%d_\%H\%M`.sql
Cronログを確認します(/ var/log/syslogにあるはずです)。grepを使用してそれらを除外できます。
grep CRON/var/log/syslog
また、ローカルメールボックスをチェックして、cronメールがあるかどうかを確認することもできます。
/ var/mail/username
Crontabファイルで他の受信メールを設定することもできます
同じことを試していましたが、ダンプが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で上記のコマンドを書き留めます。
これが誰かのお役に立てば幸いです。
または、カスタムコマンド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
それがいくらか役に立てば幸いです。
新しいファイルを作成し、そこでコードを実行して、ファイルの場所にダンプし、Zip圧縮します。 cronを介してそのスクリプトを実行する
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として実行する場合はそうです。
ローカルホストmysqlバックアップ:0 1 * * */usr/local/mysql/bin/mysqldump -uroot -ppassword --opt database> /path/to/directory/filename.sql
(-pとパスワード、または-uとユーザー名の間にスペースはありません。rootを正しいデータベースユーザー名に置き換えてください。)
わたしにはできる。 -pとパスワード、または-uとユーザー名の間にスペースを入れない
わかりました、同様の問題があり、修正することができました。
あなたのケースでは、その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