Резервное копирование баз данных 1с на PostgreSQL

Дата публикации: 22-06-2011 | Автор: MelfisFettel | Рубрика: , PostgreSql, Ubuntu Server

PostgreSQL резервное копирование Баз данныхВ поставку PostgreSQL сервера входят утилиты для резервного копирования, и восстановления из резервной копии базы данных: pg_dump и pg_restore. В этой статье разберу способы резервного копирования и восстановления баз данных сервера PostgreSQL на Linux.

Резервное копирование базы Postgre (pg_dump)

Используем pg_dump для резервного копирования базы данных с именем «Test». pg _dump позволяет делать как текстовые, так и сжатые архивы вашей БД.

Дамп с сжатием:

1
pg_dump –Fc –U postgres "Имя базы данных" > *.back.tgz
pg_dump –Fc –U postgres "Имя базы данных" > *.back.tgz

Где:

postgres – имя пользователя базы данных.
«Имя базы данных» – имя базы данных на вашем сервере.
*.back – имя конечного файла содержащего дамп.

Текстовый дамп:

1
pg_dump –Fе –U postgres "Имя базы данных" > *.sql
pg_dump –Fе –U postgres "Имя базы данных" > *.sql

Где:

postgres – имя пользователя базы данных.
«Имя базы данных» – имя базы данных на вашем сервере.
*.sql – имя конечного файла содержащего дамп в текстовом формате.

Восстановление базы данных из архивной копии. (pg_restore)

Восстановление базы данных postgre производится при помощи утилиты pg_restore. Для ее использования нужно указать Имя пользователя сервера БД, имя базы данных и имя файла с вашим дампом:

1
pg_restore –U ИМЯ ПОЛЬЗОВАТЕЛЯ БД –d ИМЯ БАЗЫ ДАННЫХ –v ПУТЬ К ВАШЕМУ ДАМПУ.
pg_restore –U ИМЯ ПОЛЬЗОВАТЕЛЯ БД –d ИМЯ БАЗЫ ДАННЫХ –v ПУТЬ К ВАШЕМУ ДАМПУ.

Например:
Имя пользователя postgres.
Имя базы данных Test.
Имя файла dump.back.

1
pg_restore –U postgres –d Test –v dump.back
pg_restore –U postgres –d Test –v dump.back

Создадим небольшой скрпит для автоматического архивирования базы данных postgreSQL. В имени архивной копии будем использовать текущее число, что бы по названию можно было определить дату архива.

1
2
3
4
5
6
7
8
BackUpDir="/home/melfis/dump/"  // Директория для хранения бэкапов
DateName=`date +%d.%m.%Y-%H.%M` //Получаем дату для имени файла
 
cd $BackUpDir  //Переходим в директорию с бэкапами
echo Начато резервное копирование базы данных
pg_dump -Fc -U postgres "Test" > $DateName.Test.backup  //Делаем бэкап
echo Резервное копирование завершено нажмите любую клавишу.
read x
BackUpDir="/home/melfis/dump/"  // Директория для хранения бэкапов
DateName=`date +%d.%m.%Y-%H.%M` //Получаем дату для имени файла

cd $BackUpDir  //Переходим в директорию с бэкапами
echo Начато резервное копирование базы данных
pg_dump -Fc -U postgres "Test" > $DateName.Test.backup  //Делаем бэкап
echo Резервное копирование завершено нажмите любую клавишу.
read x

Сделайте скрипт исполняемым, и добавьте его в cron. В результате выполнения этого кода в директории находящейся в переменной BackUpDir будет создана сжатая архивная копия вашей базы данных.

При создании резервной копии с ключом -t, будет создана текстовая резервная копия. Она занимает намного больше места, но удобна тем что SQL код поддается редактированию.

И еще один очень важный момент! Если вы редактировали ваш postgresql.conf файл, и меняли значения памяти (shared mem, mainterance mem, work mem и.т.д.), то при восстановлении базы данных из резервной копии pg_restore может пожаловаться на нехватку памяти. Что бы успешно восстановить БД из архивной копии, следует вернуть значения по умолчанию в файле postgresql.conf которые отвечают за объемы памяти используемые postgre, и перезапустить PostgreSQL сервер. Это случалось на базах данных 1с. На счет других ничего сказать не могу.

Понравилась статья? Расскажи друзьям:


Комментариев (10)

Спасибо, просто и понятно, необходимый минимум. А вот такой вопрос (связанный в некоторой степени с 1С). На сервере с postgree много баз (от 1С), половина из которых была заведена, когда у сервера был другой адрес. Теперь их не удается удалить (используя 1С Enterprice servers), так как в свойствах старых баз прописан прежний адрес сервера. Как его изменить? Сервер на ОС Fedora, ssh доступ есть
Заранее спасибо!

Честно говоря у меня нет ответа на этот вопрос, и поставить эксперимент не представляется возможным :( Если будет еще актуально то смогу ответить вам точно в середине Октября. Если у вас найдется решение раньше прошу поделится им. Заранее спасибо.

Удалить базы из PostgreSQL можно, подключившись к серверу через pgAdmin, — достаточно знать только пароль пользователя БД. изменить его можно с консоли сервера дав команду типа
$: psql -U postgres -d template1 -c “ALTER USER postgres PASSWORD ‘new_pwd’”
Удалить информационные базы из конфигурации сервера можно уджалив их из файла настроек 1CV8Reg.lst (в линуксе он хранится по пути /home/usr1cv82/.1cv82/1C/1Cv82/reg_1541, в винде — аналогично в Documents and Settings)
Если говорить об удалении баз средствами 1С, то можно отредактировать указанный выше файл настроек сервера 1С, заменив старый IP адрес сервера в нужных базах на новый.

Доброго времени суток. Вот такой вот вопрос: получится как-нибудь восстановить базу данных 1С, до переустановки сервера, скопировал папку /pgsql/BASE, переустановил сервер, теперь получится её обратно впихнуть каким-нибудь способом(DEBIAN 6, PostgreSQL 9.0 1C, 1C 8.2). Заранее благодарю.

Достаточно будет скопировать каталог обратно. Один из «методов» резервного копирования это копирование всего каталога /var/lib/pgsql/ . По крайней мере, такой эксперимент у меня проходил при полном удалении postgre с сервера, и чистой установке, но я копировал полностью весь каталог со всеми базами, что было бы равносильно pg_dumpall. Так же желательно поставить ту же версию PostgreSQL.

Кстати, я хотел бы обратить Ваше внимание на еще одну не маловажную вещь. Если восстановление из резервной копии, сделанной при помощи pg_dump производится в новую базу, то при создании базы следует выбирать шаблон template0. В противном случае, могут не восстановится некоторые процедуры, переменные и таблицы. Соответственно 1С не заведется.

спасибо за ответ. скопировал полностью папку /var/lib/pgsql/DATA, но теперь когда стартую сервер (/etc/init.d/postgresql start) пишет что сервер стартует, а потом вылазит ФАТАЛ ошибка мол контрольная сумма неверна в контрольном файле:(

Попробуйте сделать так. Удалите вообще содержимое каталога /var/lib/pgsql/. После чего снова инициализируйте PotgreSQL. Что то типа sudo /etc/init.d/postgresql -D /var/lib/pgsl. Postgre создаст новый каталог data и файлы настроек. После чего скопируйте из вашего «резервного» каталога (тот который вы сохранили с предыдущей системы), каталоги с базами данных из ваш_каталог/data/base в /var/lib/pgsql/data/base (все кроме каталога с именем 1 и файла pgsql_tmp).

А как запустить указанный скрипт под Виндовс в планировщике (чтоб он не спрашивал пароль)

Никак… Это Linux, детка!

Обсудить