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


12

最新のLinux Mintを使用しています。データベースのバックアップ用に特別なcronジョブを作成できるかどうか疑問に思っていました。

私の/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.sql2014-04-04_full_myDB.sqlたちが持っている日付に応じて、日付が動的に追加されるようなものを持ちたいです。

SQLバックアップファイルが1週間以上古い場合、cronjob で自動的に削除したいと思います。

回答:


15

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

私は答えを準備していましたが、あなたは私を打ち負かしました:P
Ramesh 14

2
@Ramesh、変更のために他の誰かに勝ったことをうれしく思います-通常私は投稿し、誰かがすでに同様の答えを持っています。
グレアム14

非常に素晴らしい。私の使用法で変更しているのは、dbアクセスの詳細を.my.cnfファイルに入れることだけです。
ヨハン・ダイク

4

上記の情報を使用して、バックアップを遅くしている非常に大きなテーブルの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

3

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

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

以上です。毎週4:30 am(日曜日を除く)にMySQLデータベースをバックアップし、バックアップを圧縮します


1

@Graemeの回答に追加するには、cronジョブで '%'文字をエスケープする必要がある場合があるので、次のようになります。

 mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +\%F)_full_myDB.sql
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.