Включение ведения контрольных сумм в кластере 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

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


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