MySQL - 以前のバックアップを上書きせずにバックアップ[閉じる]

MySQL - 以前のバックアップを上書きせずにバックアップ[閉じる]

以前のバックアップを上書きせずにどのようにこのバックアップを作成できますか?これは私が作った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

関連情報