web-dev-qa-db-ja.com

debianmysql自動毎日バックアップ

MySQLサーバーをDebianサーバーで毎日バックアップする必要があります。そこにはたくさんのスクリプトがあることは知っていますが、SQLファイルとして毎日バックアップし、各バックアップを別々に(ファイル名として現在の日付?)同じフォルダーに配置して、各バックアップで1つのファイルを上書きしないようにする必要があります。

よろしく

4
Hellnar

私は常に使用しています automysqlbackup.sh mysqldumpを毎日実行し、1週間保持し、1か月間毎週バックアップを保持し、1年間毎月バックアップを保持します-またはそう...すべて非常に手間がかかりません!

3
lepole

何かのようなもの:

 for db in $(mysql -e "show databases" -B  --skip-column-names); do
     mysqldump --opt --databases "$db" \
     | gzip -3 --rsyncable > "/var/backup/$db-$(date +%Y-%m-%d).sql.gz"
 done

その後、cronジョブでそれを使用して、毎日バックアップを実行できます。

Mysqldumpにすべてのデータベースを1つのファイルにダンプさせることはできますが、問題が発生した場合に1つのデータベースだけを復元することは非常に困難です。 rsyncを介してファイルを別のサーバーにコピーする場合は、-rsyncableオプションが本当に必要です。 rsyncよりもパフォーマンスが向上する代わりに、ディスクスペースを浪費します。これは主に、rsyncが転送するデータのブロックを計算する方法と関係があります。

ファイル名に日付を使用しないことを除いて、上記のスクリプトと非常によく似たものを使用します。これにより、古いバックアップのクリーンアップに対処する必要があります。 backuppcを使用して、古いコピーを保持します。すでにリモートバックアップソリューションをお持ちでない限り、backuppcを検討することを強くお勧めします。

1
David Pashley

Zmanda Recovery Manager(zrm-m​​ysql)を試してみることもできます。

一見複雑すぎるように見えますが、ZRMのCommunity Editionを使用して、多数のリモートMySQLサーバー用に完全に暗号化された適切に管理された集中バックアップソリューションを作成しました。

トピックに関する詳細情報は、HowtoForgeにあります。例:

http://www.howtoforge.com/mysql-backups-with-zrm-2.

乾杯

0
Ilya Zakreuski

私が以前行ったことの1つは、バックアップファイルが生成された後にバックアップファイルoff-serverを電子メールで送信することでした。そうすれば、サーバーが停止した場合でも、別のサーバーに最新のバックアップがあります。 rsyncまたはその他の方法を使用して、バックアップアーカイブを別のマシンに移動することもできます。

0
sybreon

RSNAPSHOT.orgのrsnapshotを使用します。 「apt-getinstallrsnapshot」から入手できます。

マシンのSSHキーを設定した後は、チャームのように機能し、SSHを介して機能します... Webサイトには、MySQLをバックアップするためのスクリプトがいくつか用意されています。これらは、特定のニーズに合わせて変更できます。

rsnapshotは、ローカルシステムとリモートシステムのバックアップを作成するためのファイルシステムスナップショットユーティリティです。

Rsyncとハードリンクを使用すると、複数の完全バックアップを即座に利用できるようにすることができます。必要なディスク容量は、1つの完全バックアップと増分の容量よりもわずかに多くなります。

構成によっては、わずか数分でセットアップすることも可能です。ファイルは、rootユーザーが関与することなく、ファイルを所有するユーザーが復元できます。

0
Sniek NL

または、すべてのデータベースを1つのSQLファイルにまとめたい場合:

mysqldump -u -p --opt --all-databases>/path/to/backup/$(date -Imin).sql

次に、1週間分のバックアップのみを保持します。

/ path/to/backup -type -f -mtime + 7-deleteを検索します
0
James

Davidは私にはよく見えますが、参考のためにさらにいくつかあります(2番目はすべてのデータベースをバックアップしますが、Davidのmysqlオプションは私が思うsedコマンドよりも優れています):

例1:

#!/bin/bash
#Create local backups of the mysql drupal database for easy restore
#KMB 2008

dumpdir='/root/drupaldumps'
backupdir='/root/drupal_backups'
myuser='drupal'
mypass='SECRET'
dumpfile="${dumpdir}/drupal-$(date +%s).sql"

mysqldump -udrupal -p${mypass} drupal > $dumpfile
mv $dumpfile ${backupdir}/
find $backupdir -name '*.sql*' -type f -mtime +7 -exec rm {} +

例2:

#!/bin/bash
#KMB March 2009 
umask u=rw,g=,o=
dumpdir='/root/db_backups'
backupdir='/root/db_backups/dumps'
myuser='backup_user'
mypass='SUPER_SECRET'

while read database; do
        dumpfile="${dumpdir}/${database}-$(date +%s).sql.bz2"
        mysqldump -u $myuser -p${mypass} $database | bzip2 > $dumpfile
        mv $dumpfile ${backupdir}/
done < <(mysql -u $myuser -p${mypass} -e 'show databases' -s | sed '1d;$d')

find $backupdir -name '*.sql.bz2*' -type f -mtime +7 -exec rm {} \;
0
Kyle Brandt

スクリプトを crontab に追加することを忘れないでください

15 0 * * * /path/to/script.sh

0
Mad_Dud