Включение ведения контрольных сумм в кластере PostgreSQL 12

Аппаратура пока несовершенна и данные могут быть повреждены на носителе, при передаче данных по интерфейсным кабелям и т.п.
Часть таких ошибок обрабатывается на аппаратном уровне, но часть — увы нет.
Чтобы вовремя обнаружить возникшую проблему, в PostgreSQL журнальные записи всегда снабжаются контрольными суммами.
Страницы данных также можно защитить контрольными суммами.

Как это сделать? Читаем ниже.

Исходные данные: Кластер PostgreSQL 12
Задача: Включить защиту страниц данных контрольными суммами.

Включить защиту страниц данных контрольными суммами можно сделать только при инициализации кластера, но в версии PostgreSQL 12 ее можно включать и выключать с помощью утилиты pg_checksums (правда, пока не «на лету», а только при остановленном кластер).

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

Вначале убедимся, что ведение контрольных сумм выключено:

su - postgres -c 'psql -c "SHOW data_checksums;"'

Если выведет off, то ведение контрольных сумм выключено:

 data_checksums
----------------
 off
(1 row)

Теперь останавливаем кластер для включения контрольных сумм:

pg_ctlcluster 12 main stop

Проверяем:

su - postgres -c '/usr/lib/postgresql/12/bin/pg_controldata -D "/var/lib/postgresql/12/main"' | grep state

Если выведет:

Database cluster state:               shut down

, то можно включать контрольные суммы:

su - postgres -c '/usr/lib/postgresql/12/bin/pg_checksums --enable -D "/var/lib/postgresql/12/main"'

Утилиты pg_checksums выведет такое сообщение:

Checksum operation completed
Files scanned:  961
Blocks scanned: 2996
pg_checksums: syncing data directory
pg_checksums: updating control file
Checksums enabled in cluster

Это означает, что защита страниц данных контрольными суммами включена.

Запускаем кластер:

pg_ctlcluster 12 main start

Проверяем включение контрольных сумм:

su - postgres -c 'psql -c "SHOW data_checksums;"'

Должно вывести:

 data_checksums
----------------
 on
(1 row)

Так же можно проверить включение контрольных сумм с помощью утилиты pg_controldata:

su - postgres -c '/usr/lib/postgresql/12/bin/pg_controldata -D "/var/lib/postgresql/12/main" | grep checksum'

Должно вывести:

Data page checksum version:           1

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


Оставить комментарий

avatar
1000

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

  Подписаться  
Уведомление о