必要なものが見つかりませんか? 自分でやる

そのため、MySQLとPostgreSQLデータベースのバックアップを設定する必要がありました。 私は非常に明確なもの、すなわち:

ネットワーク上に既製のスクリプトは見つかりませんでしたが、いくつかのソリューションを選択して組み合わせ、必要なものを取得しました。



一般的なスクリプトアルゴリズムでは、データベースのリストが選択され、そこからアーカイブが保存されます。 廃止されたものは削除されます。 スクリプトには、ローテーション用のアーカイブコピーの数、DBMSのログイン/パスワード、および作業結果を保存するためのフォルダーを指定する機能と必要性があります。



MySQL:

#!/bin/bash



# user & password

USER=root

PASS=pass



# number of backups to be saved

KEEP=14



# dir to backup

DIR=/ var /backups/mysql



NOW=$(date + "%Y-%m-%d" )

DBS= "$(mysql -u $USER -p$PASS -Bse 'show databases')"



for db in $DBS

do



BACKUPS=`find $DIR -name "$db.*.gz" | wc -l | sed 's/\ //g' `

while [ $BACKUPS -ge $KEEP ]

do

ls -tr1 $DIR/$db.*.gz | head -n 1 | xargs rm -f

BACKUPS=`expr $BACKUPS - 1`

done



FILE=$DIR/$db.$NOW-$(date + "%T" ).sql.gz

mysqldump -u $USER -p$PASS $db | gzip -9 > $FILE



done



exit 0




* This source code was highlighted with Source Code Highlighter .






どうしてもパスワードを渡すことができなかったので、PostgreSQLを長い間いじりましたが、解決策がありました。



PostgreSQL:

#!/bin/bash



# user & password

USER=postgres

PASS=pass



# number of backups to be saved

KEEP=14



# dir to backup

DIR=/ var /backups/pgsql



PGPASSWORD=$PASS

export PGPASSWORD



NOW=$(date + "%Y-%m-%d" )

DBS= "$(psql -U $USER -lt |awk '{ print $1}' |grep -vE '^-|^List|^Name|template[0|1]')"



for db in $DBS

do



BACKUPS=`find $DIR -name "$db.*.gz" | wc -l | sed 's/\ //g' `

while [ $BACKUPS -ge $KEEP ]

do

ls -tr1 $DIR/$db.*.gz | head -n 1 | xargs rm -f

BACKUPS=`expr $BACKUPS - 1`

done



FILE=$DIR/$db.$NOW-$(date + "%T" ).sql.gz



pg_dump -U $USER $db | gzip -c > $FILE



done



PGPASSWORD=

export PGPASSWORD



exit 0




* This source code was highlighted with Source Code Highlighter .






これらのすばらしいスクリプトは、Debianを実行しているマシンで長く成功しました。 クラウンにを加えるだけです。



All Articles