web-dev-qa-db-ja.com

接頭辞付きファイルへの自動DBバックアップ用のcronjob

最新のLinux Mintを使用しています。データベースのバックアップ用に特別なcronjobを作成できるかどうか考えていました。

私の/etc/cronjobファイルには、次のコードがあります。

# Minute   Hour   Day of Month       Month          Day of Week        Command    
# (0-59)  (0-23)     (1-31)    (1-12 or Jan-Dec)  (0-6 or Sun-Sat)                
30        4          *            *                1-6            /home/users/backup.sh

私の/home/users/backup.shには:

mysqldump -uroot -p MyDatabase > /home/users/backup_MyDB/full_myDB.sql

full_myDB.sqlの代わりに、2014-04-04_full_myDB.sqlのようなものを用意します。ここで、日付は日付に応じて動的に追加されます。

SQLバックアップファイルが1週間より古いの場合、cronjobで自動的にdeleteしてください。

12
pbaldauf

GNU date(Linux Mintのデフォルト))を使用すると、次のことができます。

mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +%F)_full_myDB.sql

1週間以上経過したファイルを削除するには:

find /home/users/backup_MyDB -type f -mtime +7 -exec rm {} +

一般に、削除する前に(少なくともスクリプトをテストするときは)何を削除するかを確認することをお勧めします。

find /home/users/backup_MyDB -type f -mtime +7
15
Graeme

上記の情報を使用して、バックアップを遅くしている非常に大きなテーブルの1つを実際に切り捨てるマイナーアップデートをもう1つ提供したいと考えました。

うまくいけば、これは他の誰かを助けます。

上記の情報を使用して、以下の内容でmysqlbackup.shという名前の基本的なシェルスクリプトを作成しました。

#!/bin/sh
find /data/var/backups/mysql/dumps -type f -mtime +3 -exec rm {} +
mysql -e "truncate table sitename_prod.cache_table"
mysqldump sitename_prod > /data/var/backups/mysql/dumps/$(date +%F)_full_sitename_prod.sql

必ず実行してください:chmod + x mysqlbackup.sh

私はこれを私のcrontab -eにも入れました:

# MYSQL Dump and retention for 3 days
30 22 * * * bash /root/bin/mysqldump.sh > /dev/null 2>&1
4
Jason Ruyle

私はそれが古いことを知っていますが、私は上記の答えを使用し、ファイル圧縮の指示を追加しました。うまくいけば、他の誰かがこれが役立つと思います。

1)少し調べてみると、7-Zipは最高のコンプレッサーのようです。 Linuxディストリビューションがサポートしている場合は、aptインストーラーを使用できます。

Sudo apt-get install p7Zip-full

または、tar.gzを使用することもできます。

2)次に、スクリプトを作成します。例:/home/users/backup.sh以下の内容で:

#!/bin/sh
find /home/users/backup_MyDB -type f -mtime +7 -exec rm {} +
mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +%F)_full_myDB.sql
7z a /home/users/backup_MyDB/$(date +%F)_full_myDB.7z /home/users/backup_MyDB/*.sql
rm -f /home/users/backup_MyDB/*.sql

このスクリプトは、7日を超えるファイルを見つけて削除し、sqlダンプを作成します。次に、ディレクトリ内のすべての.sqlファイルを7-Zipし、ディレクトリ内のすべての.sqlを削除します(ところで、必要に応じて前の回答で述べたように、ダンプの前にmysqlコマンドをオプションで追加できます)

3)chmod +x /home/users/backup.shを実行して、実行可能にします。

3.1)スクリプトが意図したとおりに機能するかどうかをテストする必要があります

4)crontab -eを使用してタスクをプログラムします

# Minute   Hour   Day of Month       Month          Day of Week        Command    
# (0-59)  (0-23)     (1-31)    (1-12 or Jan-Dec)  (0-6 or Sun-Sat)                
30        4          *            *                1-6            /home/users/backup.sh >> /dev/null 2>&1

以上です。それはあなたのMySQLデータベースを毎日午前4時30分(日曜を除く)にバックアップし、バックアップを圧縮します

3
Gusstavv Gil

@Graemeの回答に追加するには、cronジョブで「%」文字をエスケープする必要がある場合があるので、次のようになることに注意してください。

 mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +\%F)_full_myDB.sql
1
frezq