Пятница, 26.04.2024, 16:12

Компьютерная помощь

Записки системного администратора

Меню сайта
Категории раздела
Компьютер [36]
Общекомпьютерные темы
Windows server [18]
Статьи по версиям windows для серверов.
Windows [30]
Статьи по версиям windows для рабочих станций.
Unix [65]
Статьи на тему unix-подобных систем. Linux, FreeBSD и т.п.
Видеомонтаж [10]
Статьи по нелинейному видеомонтажу
Программирование [9]
Заметки по программированию
Databases [10]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Вход на сайт

Поиск

Главная » Статьи » Databases

PostgreSQL. Backup restore базы данных с pg_dump

pg_dump - это утилита позволяющая делать бэкап базы данных из postgresql. Она сохраняет в файл набор SQL команд которые полностью воссоздают структуру исходной базы данных. Для последующего восстановления из подобного файла достаточно psql которая почти всегда идет в комплекте с самим postgresql.

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

В этой небольшой статье мы рассмотрим несколько полезных примеров использования pg_dump.

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

Бэкап одной базы данных

В примере ниже, мы сделаем резервную копию базы данных под названием computerhelpucozua, принадлежащей пользователю computerhelp и сохраним её в файл computerhelpucozua.sql:

pg_dump -U computerhelp computerhelpucozua -f computerhelpucozua.sql

Если вы работаете с базой данных не под тем же пользователем, под которым работаете в системе, то pg_dump спросит пароль к базе данных и после его успешного ввода создаст указанный файл содержащий SQL команды для создания необходимой структуры и копирования данных.

Вот часть дампа моей базы данных, чтобы вы понимали что в нем находится:

--

-- Name: auth_user; Type: TABLE; Schema: public; Owner: computerhelp; Tablespace:

--

 

CREATE TABLE auth_user (

    id integer NOT NULL,

    username character varying(250) NOT NULL,

    password character varying(250),

    email character varying(250),

    first_name character varying(250),

    last_name character varying(250),

    middle_name character varying(250),

    authenticated boolean,

    active boolean,

    is_admin boolean

);

 

 

ALTER TABLE auth_user OWNER TO computerhelp;

 

--

-- Name: auth_user_id_seq; Type: SEQUENCE; Schema: public; Owner: computerhelp

--

 

CREATE SEQUENCE auth_user_id_seq

    START WITH 1

    INCREMENT BY 1

    NO MINVALUE

    NO MAXVALUE

    CACHE 1;

 

 

ALTER TABLE auth_user_id_seq OWNER TO computerhelp;

 

--

-- Name: auth_user_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: computerhelp

--

 

ALTER SEQUENCE auth_user_id_seq OWNED BY auth_user.id;

 

--

-- Data for Name: auth_user; Type: TABLE DATA; Schema: public; Owner: computerhelp

--

 

COPY auth_user (id, username, password, email, first_name, last_name, middle_name, authenticated, active, is_admin) FROM stdin;

1       test    pbkdf2:sha1:$sfadfadafda$sfadfadf10019sdfadfad0101010dsfadf0202022      \N                              f       f       f

\.

Так же можно передать ключ --format=t, чтобы pg_dump запаковал базу данных в tar:

pg_dump -U computerhelp computerhelpucozua --format=t -f computerhelpucozua.sql.tar

Бэкап всех баз данных

Для того, чтобы сделать резервную копию всех баз данных, нужно использовать другую утилиту - pg_dumpall.

Права доступа могут быть настроены у всех по разному, поэтому бэкап всех баз данных лучше делать из под пользователя postgres.

Зайдем под ним:

su - postgres

И выполним:

pg_dumpall > all_databases.sql

Бэкап всех баз данных будет содержаться в файле all_databases.sql.

Крайне желательно убедится, что все нужные базы данных были копированы. Для этого все из под того же пользователя postgres посмотрим список всех баз данных:

psql -l

В моем случае было три базы данных:

postgres:~$ psql -l

                                      List of databases

     Name      |  Owner   | Encoding |   Collate   |    Ctype    |     Access privileges    

---------------+----------+----------+-------------+-------------+---------------------------

 computerhelpucozua    | postgres | UTF8     | ru_RU.UTF-8 | ru_RU.UTF-8 | =Tc/postgres             +

               |          |          |             |             | postgres=CTc/postgres    +

               |          |          |             |             | computerhelpucozua=CTc/postgres

 testdb1       | postgres | UTF8     | ru_RU.UTF-8 | ru_RU.UTF-8 | =Tc/postgres             +

               |          |          |             |             | postgres=CTc/postgres    +

               |          |          |             |             | testdb1=CTc/postgres

 testdb2       | postgres | UTF8     | ru_RU.UTF-8 | ru_RU.UTF-8 | =Tc/postgres             +

               |          |          |             |             | postgres=CTc/postgres    +

               |          |          |             |             | testdb2=CTc/postgres

(3 rows)

Теперь удостоверимся, что все перечисленные базы попали в дамп:

bash:~$ grep "^[\]connect" all.sql

\connect computerhelpucozua

\connect testdb1

\connect testdb2

Бэкап определенной таблицы

pg_dump --table auth_user -U computerhelp computerhelpucozua -f auth_user_table.sql

Для бэкапа определенной таблицы используется параметр --table и следом за ним названием таблицы. Если в базе данных указанная таблица есть в разных схемах, то её можно указать используя параметр --schema.

Восстановление из бэкапа

Восстановление одной базы данных

psql -U computerhelp -d computerhelpucozua -f computerhelpucozua.sql

В процессе восстановления из резервной копии, могут возникнуть ошибки и предупреждения. Их можно игнорировать:

psql:mydb.sql:49: ERROR:  must be owner of schema public

psql:mydb.sql:89: ERROR:  must be member of role "computerhelp"

psql:mydb.sql:159: WARNING:  no privileges could be revoked

psql:mydb.sql:261: WARNING:  no privileges could be revoked

psql:mydb.sql:381: WARNING:  no privileges were granted

psql:mydb.sql:452: WARNING:  no privileges were granted

Восстановление из бэкапа всех баз данных

su - postgres

psql -f all_databases.sql

Восстановление одной таблицы

psql -f auth_user_table.sql computerhelpucozua

 

https://the-bosha.ru/2016/06/01/backup-restore-postgresql-bazy-dannykh-s-pg_dump/

Категория: Databases | Добавил: admin (10.10.2017)
Просмотров: 719 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: