最新の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してください。
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
上記の情報を使用して、バックアップを遅くしている非常に大きなテーブルの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
私はそれが古いことを知っていますが、私は上記の答えを使用し、ファイル圧縮の指示を追加しました。うまくいけば、他の誰かがこれが役立つと思います。
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分(日曜を除く)にバックアップし、バックアップを圧縮します
@Graemeの回答に追加するには、cronジョブで「%」文字をエスケープする必要がある場合があるので、次のようになることに注意してください。
mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +\%F)_full_myDB.sql