powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / backup инкрементальный
25 сообщений из 31, страница 1 из 2
backup инкрементальный
    #35086292
Quiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не катит мне с пониманием этой логики. Шагаю по инструкции:
1. pg_start_backup, копирую кластер, pg_stop_backup
2. shutdown postgres, rm ..., cp..., благополучно восстанавливаюсь.
3. работаю с базой
2. shutdown postgres, rm ..., cp..., восстанавливаюсь, но на уровень 1 бэкапа - нет redo последующих сегментов WAL.

при cp..., rm... pg_xlog не трогаю.

LOG: starting archive recovery
LOG: restore_command = "cp /db/archivedir/%f %p"
cp: /db/archivedir/00000001.history: No such file or directory
LOG: restored log file "000000010000000000000000.004BA040.backup" from archive
LOG: restored log file "000000010000000000000000" from archive
LOG: automatic recovery in progress
LOG: redo starts at 0/4BA088
cp: /db/archivedir/000000010000000000000001: No such file or directory
LOG: record with zero length at 0/10005E0
LOG: redo done at 0/1000598
LOG: last completed transaction was at log time 2008-01-24 23:46:24.354548+05
cp: /db/archivedir/000000010000000000000001: No such file or directory
LOG: restored log file "00000002.history" from archive
cp: /db/archivedir/00000003.history: No such file or directory
LOG: selected new timeline ID: 3
cp: /db/archivedir/00000001.history: No such file or directory
LOG: archive recovery complete
LOG: database system is ready to accept connections
LOG: autovacuum launcher started
LOG: archived transaction log file "00000003.history"

Как накатить последующие WAL?

---
8.3beta1
postgres.conf:
archive_command = 'cp -i %p /db/archivedir/%f </dev/null'

recovery.conf:
restore_command = 'cp /db/archivedir/%f %p'
...
Рейтинг: 0 / 0
backup инкрементальный
    #35089574
Quiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что никто не юзает PITR?
...
Рейтинг: 0 / 0
backup инкрементальный
    #35091234
Sergej Grischenkow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пытаюсь это использовать,
но пока по этому поводу ничего добавить не могу...
У меня другая проблема, по истечении checkpoint_timeout
не создается новый WAL файл и как следствие не архивируется на другой компьютер.
Может я что-то не так делаю ?
Может нужно использовать archive_timeout ?
...
Рейтинг: 0 / 0
backup инкрементальный
    #35091323
Quiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergej Grischenkow
У меня другая проблема, по истечении checkpoint_timeout
не создается новый WAL файл и как следствие не архивируется на другой компьютер.


Код: plaintext
show all;

checkpoint_timeout - Sets the maximum time between automatic WAL checkpoints.
archive_timeout - Forces a switch to the next xlog file if a new file has not been started within N seconds.

Sergej GrischenkowМожет нужно использовать archive_timeout ?
конечно
...
Рейтинг: 0 / 0
backup инкрементальный
    #35091536
Sergej Grischenkow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, понятно, сделал archive_timeout=120

Теперь пишутся WAL'ы почему-то через каждые 4 и 6 минут
по идее должны писаться через 2 минуты.

Теперь что мне не нравится....
Пишутся 16 MB каждые 2 минуты, даже если в базе вообще ничего не происходит.
За день должно набежать около 12000 MB !!!!

Как сделать, что-бы писалось только тогда, когда произошли изменения в базе ?
Если ничего не изменилось в базе, зачем писать WAL ?
...
Рейтинг: 0 / 0
backup инкрементальный
    #35092009
Sergej Grischenkow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вероятно использование archive_timeout не рационально.
Надо попробовать pg_switch_xlog() как то "прикрутить"...
...
Рейтинг: 0 / 0
backup инкрементальный
    #35092426
alex_v13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В доке написано, что если не указывать archive_timeout, то кусок лога будет сбрасываться только по достижению фактического размера изменений в 16 МБ, но на практике это не работает ни хрена.

Думаю, выходом будет явно указать archive_timeout=0

Чтобы папка с логами не распухала, надо делать восстановление по логами на кластер в режиме recovery, с последующим удалением логов или, например, делать этот цикл раз в день.
...
Рейтинг: 0 / 0
backup инкрементальный
    #35095465
Sergej Grischenkow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сейчас пробую на версии 8.2.6 - все работает.

pg_switch_xlog() поставил в cron с интервалом 1 минута.
Это позволяет на неактивной базе не создавать "пустых" WAL'ов,
как это происходит, если указать archive_timeout равное 1 минуте.

Увеличил checkpoint_timeout до 10 минут.
При этом регулярно через 10 минут получаю новый WAL файл
и если между checkpoint'ами происходит изменение базы,
то pg_switch_xlog() тоже создает новый WAL файл.

Явное указание archive_timeout=0 или нет - не играет роли,
если не указано, то оно равно 0.

Теперь вопросы:
1. На что влияет значение checkpoint_timeout ?
2. Что происходит при checkpoint'е ?
3. Если я укажу checkpoint_timeout равным 60 минут, какие могут быть неприятности ?
...
Рейтинг: 0 / 0
backup инкрементальный
    #35095487
Sergej Grischenkow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Испавления...

pg_switch_xlog() поставил в cron с интервалом 1 минута.
Это позволяет на неактивной базе не создавать "пустых" WAL'ов,
как это происходит, если указать archive_timeout равное 1 минуте.

А также pg_switch_xlog() создает новый WAL после checkpoint'а
...
Рейтинг: 0 / 0
backup инкрементальный
    #35106156
Quiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anyone?
...
Рейтинг: 0 / 0
backup инкрементальный
    #35107876
Sergej Grischenkow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ответы на эти вопросы я еще не получил...
1. На что влияет значение checkpoint_timeout ?
2. Что происходит при checkpoint'е ?
3. Если я укажу checkpoint_timeout равным 60 минут, какие могут быть неприятности ?
...
Рейтинг: 0 / 0
backup инкрементальный
    #35108094
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A checkpoint is a point in the transaction log sequence at which all data files have been updated to reflect the information in the log. All data files will be flushed to disk
тут
...
Рейтинг: 0 / 0
backup инкрементальный
    #35108868
Sergej Grischenkow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где лежит документация, я знаю.
Меня интересует практика использования этих параметов.
...
Рейтинг: 0 / 0
backup инкрементальный
    #35109733
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я представляю - это влияет на время восстановления(подъема) БД при отказе и последующем запуске кластера(REDO/UNDO)
...
Рейтинг: 0 / 0
backup инкрементальный
    #35110153
Sergej Grischenkow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. если я поставлю checkpoint_timeout равным 3 часам,
то Postgresql будет как минимум хранить все WAL за последнии 3 часа ?

Если произойдет отказ оборудования, то рестарт базы
начнется от последнего checkpoint'а (который был создан около 3 часов назад) и
будет "проигрывать" все WAL'ы который создались после checkpoint'а ?

А на стороне "горячего" сервера при старте базы в режиме восстановления всеравно
будут использоваться ВСЕ WAL'ы начиная от последнего "полного" backup'а
не зависимо от checkpoint'ов ?
...
Рейтинг: 0 / 0
backup инкрементальный
    #35110523
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется не за 3 часа, а больше. В точке чекпоинта все закоммиченые транзакции сброшены на диск(и все изменения по незакоммиченым тоже?). С последнего чекпоинта накатываются закоммиченные транзакции, и откатываются оборванные. Т е число WAL будет определятся еще и длительностью транзакции. Т е если есть "длинные транзакции", то для их отката нужны и предыдущие чекпоинты. Где-то так
...
Рейтинг: 0 / 0
backup инкрементальный
    #35111371
Sergej Grischenkow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот представляю на "суд" общественности мои скрипты,
которые работают на сервере (CopyWAL.sh, SwitchWAL.sh, BackupDB.sh:)
и скрипт (RestoreDB.sh) который "запускает" базу на "горячем" backup сервере (k1):

CopyWAL.sh:
#!/bin/sh
/usr/bin/scp -p $1 postgres@k1:/var/lib/postgresql/WAL/$2

SwitchWAL.sh:
#!/bin/sh
/usr/bin/psql -h localhost -U postgres -c "select pg_switch_xlog()"

BackupDB.sh:
#!/bin/sh
/usr/bin/ssh postgres@k1 rm -rf /var/lib/postgresql/WAL.BAK
/usr/bin/ssh postgres@k1 mv /var/lib/postgresql/WAL /var/lib/postgresql/WAL.BAK
/usr/bin/ssh postgres@k1 mkdir -p /var/lib/postgresql/WAL
/usr/bin/ssh postgres@k1 chown postgres:postgres /var/lib/postgresql/WAL
/usr/bin/ssh postgres@k1 chmod 700 /var/lib/postgresql/WAL
/usr/bin/ssh postgres@k1 rm -rf /var/lib/postgresql/DB.BAK
/usr/bin/ssh postgres@k1 mv /var/lib/postgresql/DB /var/lib/postgresql/DB.BAK
/usr/bin/ssh postgres@k1 mkdir -p /var/lib/postgresql/DB
/usr/bin/ssh postgres@k1 chown postgres:postgres /var/lib/postgresql/DB
/usr/bin/ssh postgres@k1 chmod 700 /var/lib/postgresql/DB
DATE=`date +%Y%m%d_%H%M%S`
/usr/bin/psql -h localhost -U postgres -c "select pg_start_backup('Backup_$DATE')"
sleep 5
rm -rf /tmp/S.tar.gz
tar -czf /tmp/S.tar.gz /var/lib/postgresql/8.3/main
/usr/bin/scp -p /tmp/S.tar.gz postgres@k1:/var/lib/postgresql/DB/
rm -rf /tmp/S.tar.gz
sleep 5
/usr/bin/psql -h localhost -U postgres -c "select pg_stop_backup()"

RestoreDB.sh:
#!/bin/sh
/etc/init.d/postgresql-8.3 stop
sleep 5
rm -rf /var/lib/postgresql/8.3/main.BAK
mv /var/lib/postgresql/8.3/main /var/lib/postgresql/8.3/main.BAK
tar -xzf /var/lib/postgresql/DB/S.tar.gz -C /
rm -rf /var/lib/postgresql/8.3/main/pg_xlog/*
cp /var/lib/postgresql/recovery.conf /var/lib/postgresql/8.3/main/
/etc/init.d/postgresql-8.3 start

recovery.conf:
restore_command = 'cp /var/lib/postgresql/WAL/%f %p'

надеюсь, что кому-нибудь это поможет.
...
Рейтинг: 0 / 0
backup инкрементальный
    #35111551
Sergej Grischenkow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл... вот еще ...

Изменения на сервере в postgresql.conf:
--- postgresql.conf.ORIGINAL 2008-02-05 00:29:15.000000000 +0100
+++ postgresql.conf 2008-02-05 14:51:36.000000000 +0100
@@ -54,6 +54,7 @@
# - Connection Settings -

#listen_addresses = 'localhost' # what IP address(es) to listen on;
+listen_addresses = '*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost', '*' = all
# (change requires restart)
@@ -170,14 +171,19 @@

#checkpoint_segments = 3 # in logfile segments, min 1, 16MB each
#checkpoint_timeout = 5min # range 30s-1h
+checkpoint_timeout = 10min # range 30s-1h
+
#checkpoint_completion_target = 0.5 # checkpoint target duration, 0.0 - 1.0
#checkpoint_warning = 30s # 0 is off

# - Archiving -

#archive_mode = off # allows archiving to be done
+archive_mode = on # allows archiving to be done
# (change requires restart)
#archive_command = '' # command to use to archive a logfile segment
+archive_command = '/usr/local/bin/CopyWAL.sh %p %f' # command to use to archive a logfile segment
+
#archive_timeout = 0 # force a logfile segment switch after this
# time; 0 is off

Это тоже на сервере WAL.cron:
0 */1 * * * /usr/local/bin/BackupDB.sh
* * * * * /usr/local/bin/SwitchWAL.sh
...
Рейтинг: 0 / 0
backup инкрементальный
    #35152058
Sergej Grischenkow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал новый сервер...
Пытаюсь на нем восстановить Базу по вышеизложеной схеме (PITR):

#!/bin/sh
/etc/init.d/postgresql-8.3 stop
sleep 5
rm -rf /var/lib/postgresql/8.3/main.BAK
mv /var/lib/postgresql/8.3/main /var/lib/postgresql/8.3/main.BAK
tar -xzf /var/lib/postgresql/DB/S.tar.gz -C /
rm -rf /var/lib/postgresql/8.3/main/pg_xlog/*
cp /var/lib/postgresql/recovery.conf /var/lib/postgresql/8.3/main/
/etc/init.d/postgresql-8.3 start

... и вылетает сообщение:

Starting PostgreSQL 8.3 database server: main
Error: The server must be started under the locale : which does not exist any more.
failed!

Где может быть "собака зарыта" ?
...
Рейтинг: 0 / 0
backup инкрементальный
    #35152263
Nick Gazaloff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В локали. Какя локаль на исходном сервере?
...
Рейтинг: 0 / 0
backup инкрементальный
    #35152461
Sergej Grischenkow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сервере где работает база:
root@s1:~# locale
LANG=de_DE.UTF-8
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=
root@s1:~#

На сервере, куда восстанавливается база:
k4:~# locale
LANG=de_DE.UTF-8
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=
k4:~#
...
Рейтинг: 0 / 0
backup инкрементальный
    #35153131
Nick Gazaloff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Покажите результат команды

pg_controldata | grep LC_

на обоих серверах
...
Рейтинг: 0 / 0
backup инкрементальный
    #35153765
Sergej Grischenkow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сервер, где база работает:
root@s1:/usr/lib/postgresql/8.3/bin# ./pg_controldata /var/lib/postgresql/8.3/main | grep LC_
LC_COLLATE: de_DE.UTF-8
LC_CTYPE: de_DE.UTF-8
root@s1:/usr/lib/postgresql/8.3/bin#

Сервер, где не идет восстановление:
k4:/usr/lib/postgresql/8.3/bin# ./pg_controldata /var/lib/postgresql/8.3/main | grep LC_
LC_COLLATE: de_DE.UTF-8
LC_CTYPE: de_DE.UTF-8
k4:/usr/lib/postgresql/8.3/bin#
...
Рейтинг: 0 / 0
backup инкрементальный
    #35154006
Sergej Grischenkow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибся....
Дложно быть так:

Сервер, где база работает:
root@s1:/usr/lib/postgresql/8.3/bin# ./pg_controldata /var/lib/postgresql/8.3/main | grep LC_
LC_COLLATE: de_DE.UTF-8
LC_CTYPE: de_DE.UTF-8
root@s1:/usr/lib/postgresql/8.3/bin#

Сервер, где не идет восстановление:
k4:/usr/lib/postgresql/8.3/bin# ./pg_controldata /var/lib/postgresql/8.3/main | grep LC_
LC_COLLATE:
LC_CTYPE:
k4:/usr/lib/postgresql/8.3/bin#

И куда подевались LC_COLLATE и LC_CTYPE ?
...
Рейтинг: 0 / 0
backup инкрементальный
    #35154043
Sergej Grischenkow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
postgres@k4:/usr/lib/postgresql/8.3/bin$ ./pg_controldata /var/lib/postgresql/8.3/main
WARNUNG: Berechnete CRC-Checksumme stimmt nicht mit dem Wert in der Datei
überein. Entweder ist die Datei kaputt oder sie hat ein anderes Layout
als von diesem Program erwartet. Die Ergebnisse unten sind nicht
verlässlich.

pg_control-Versionsnummer: 833
Katalogversionsnummer: 200711281
Datenbanksystemidentifikation: 5163271145988284406
Datenbank-Cluster-Status: im Produktionsmodus
pg_control zuletzt geändert: Do 01 Jan 1970 01:00:00 CET
Position des letzten Checkpoints: 47C2F42C/0
Position des vorletzten Checkpoints: A/D7000020
REDO-Position des letzten Checkpoints: A/D6000020
TimeLineID des letzten Checkpoints: 10
NextXID des letzten Checkpoints: 3607101472/1
NextOID des letzten Checkpoints: 0
NextMultiXactId des letzten Checkpoints: 969
NextMultiOffset des letzten Checkpoints: 24576
Zeit des letzten Checkpoints: Do 01 Jan 1970 01:00:01 CET
Minimaler Wiederherstellungsendpunkt: 0/47C2F42B
Maximale Datenausrichtung (Alignment): 0
Datenbankblockgröße: 8
Blöcke pro Segment: 0
WAL-Blockgröße: 0
Bytes pro WAL-Segment: 1093850759
Maximale Bezeichnerlänge: 8192
Maximale Spalten in einem Index: 131072
Maximale Größe eines Stücks TOAST: 8192
Speicherung von Datum/Zeit-Typen: 64-Bit-Ganzzahlen
Maximallänge eines Locale-Namens: 64
LC_COLLATE:
LC_CTYPE:
postgres@k4:/usr/lib/postgresql/8.3/bin$

Хотя WARNUNG есть WARNUNG, но всетаки тоже настораживает...
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / backup инкрементальный
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]