私は最新の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バックアップファイル一週間以上cronjobができることを願っています削除自動的に。
答え1
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
答え2
上記の情報を使用して、バックアップ速度を低下させる非常に大きなテーブルの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ディストリビューションがそれをサポートしている場合は、適切なインストールプログラムを使用できます。
sudo apt-get install p7zip-full
または、より快適な場合は、tar.gzを使用することができます。
/home/users/backup.sh
2) 次に、次の内容でスクリプトを作成します。
#!/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を追加します) )。前の回答で述べたようにダンプ前のコマンド)
chmod +x /home/users/backup.sh
3)実行可能にした。
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分にMySQLデータベースをバックアップし、バックアップを圧縮します。
答え4
@Graemeの回答に追加するには、cronジョブで「%」文字をエスケープする必要があるため、次のように表示できることに注意する価値があります。
mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +\%F)_full_myDB.sql