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

そのため、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を実行しているマシンで長く成功しました。 クラウンにを加えるだけです。


Source: https://habr.com/ru/post/J82278/


All Articles