以前のバックアップを上書きせずにどのようにこのバックアップを作成できますか?これは私が作ったcrontabです。
* 2 * * * /opt/bitnami/mysql/bin/mysqldump -u root -password--databases BDname>~/Backup/DBname
答え1
日付が表示されたダンプファイルを簡単に作成できます。
* 2 * * * /opt/bitnami/mysql/bin/mysqldump -u root -password--databases BDname >"$HOME/Backup/DBname_$(date +\%F).sql"
date +%F
日付がフォームに生成されますYYYY-MM-DD
。バックスラッシュは%
crontabエントリで%
特別な意味を持つため、エスケープする必要があります。
生成されたダンプファイル名今日しますDBname_2017-10-06.sql
。
dumpコマンドを独自のスクリプトに入れてスケジュールすると、より管理しやすいタスクが得られます。このcrontabエントリは、何が起こるかの境界ケースです。少しクローンの操作にはあまりにも「簡単ではありません」。
私はインタラクティブシェルを除くすべての場所でホームディレクトリの代わりにこれを使用する傾向があります$HOME
。これは主にこれが変数として機能せず、スクリプトやここでのようにcrontabでより説明的であるためです。例を見る~
~
$HOME
二重引用符の中でチルダ(〜)が拡張されないのはなぜですか?
以前のデータベースのバックアップもクリーンアップする必要がある場合は、次の質問に対する回答を参照してください。X日を過ぎたファイルを削除
これは別々のcronジョブで実行することも、2つのジョブ(バックアップ+クリーンアップ)を1つのスクリプトにまとめてスクリプトをスケジュールすることもできます(私がすること)。
答え2
データベースのバックアップに関するすべての手順を管理するスクリプトを作成すると、バックアップ名にデータタイムスタンプを適用でき、古いバックアップを削除してスペース使用量を最小限に抑え、ログアクティビティを実行できます。あなたがしなければならないのは、バックアップスクリプトを呼び出すことだけです。それ以外の場合は、実行したいコマンドごとにcrontapに別の行を入力する必要があります。より効率的なアプローチは、単純なスクリプトを使用することです。
[thebtm@server Backup] cat db_backup.sh
#!/bin/bash
BASE="~/Backup";
YESTERDAY=`TZ=$ENV{'TZ'}+30 date '+%Y%m%d'`
echo "****************"
date
echo Backing up Database
#find $BASE/DB/ -mtime +30 -type f -delete
/usr/bin/mysqldump -u root --password=password --routines dbname | bzip2 --best -c > $BASE/DB/dbname.$YESTERDAY.bz2
echo Done
date
次に、スクリプトを実行するようにcrontabを設定します。
# MySQL database backups for <dbname>
15 1 * * * ~/Backup/db_backup.sh >> ~/Backup/logs/db_backup.log 2>&1