Архив / Октябрь, 2013

Резервное копирование БД

Понадобилось создавать резервную копию базы. Но дамп надо было хранить на другой машине, недоступной из сети. Т.к. база занимает более 80Gb и постоянно растёт каждую таблицу необходимо было поместить в отдельный файл для случаев, если необходимо восстановить данные одной таблицы.

Для этого был написан такой скрипт на sh:

#!/bin/sh

DATE=`date -d "yesterday" +"%Y-%m-%d"`
DIR=%backups path%

HOSTUSER=%ssh user name%
HOSTNAME=%ssh host%

DBBASE=%database name%
DBUSER=%database user%
DBPASS=%database password%

echo "Create dir $DIR$DATE"
mkdir -p $DIR$DATE

for TABLE in $(ssh -p 222 $HOSTUSER@$HOSTNAME -C "mysql -B -s -u$DBUSER -p$DBPASS $DBBASE -e 'show tables'")
do
    echo "Create dump for table $TABLE"
	ssh -p 222 $HOSTUSER@$HOSTNAME -C "mysqldump -u$DBUSER -p$DBPASS $DBBASE $TABLE | gzip -c" > $DIR$DATE/$TABLE.sql.gz
done

echo "Create full archive"
tar -czvf $DIR/$DATE.sql.tar.gz $DIR$DATE

echo "Remove dir $DIR$DATE"
rm -rf $DIR$DATE

echo "Finished"

Также скрипт можно взять на GitHub

Восстановление пароля PostgreSQL 9.1

1) Открываем файл /etc/postgresql/9.1/main/pg_hba.conf
2) Находим сточку local all postgres peer
3) Меняем на local all postgres trust
4) Перезагружаем базу:

service postgresql reload

5) Логинимся в PostgreSQL без пароля:

psql -d template1 -U postgresql

6) Меняем пароль:

ALTER USER postgres WITH PASSWORD 'newpassword';

7) Возвращаем строчку на своё место local all postgres peer