PostgreSQL自带的命令行工具19- pg_checksums
基础信息
OS版本:Red Hat Enterprise Linux Server release 7.9 (Maipo)
DB版本:16.2
pg软件目录:/home/pg16/soft
pg数据目录:/home/pg16/data
端口:5777
pg_checksums
是 PostgreSQL 数据库中的一个工具,用于启用、禁用或校验数据页。数据页校验是 PostgreSQL 9.3 版本引入的一项功能,旨在提高数据完整性,通过对每个数据页计算校验,并在数据读取时验证这些校验,来检测硬件故障或磁盘I/O错误导致的数据损坏。
通过help查看帮助文档。
pg_checksums --help
pg_checksums enables, disables, or verifies data checksums in a PostgreSQL database cluster.
Usage:
pg_checksums [OPTION]... [DATADIR]
Options:
[-D, --pgdata=]DATADIR data directory
-c, --check check data checksums (default)
-d, --disable disable data checksums
-e, --enable enable data checksums
-f, --filenode=FILENODE check only relation with specified filenode
-N, --no-sync do not wait for changes to be written safely to disk
-P, --progress show progress information
-v, --verbose output verbose messages
-V, --version output version information, then exit
-?, --help show this help, then exit
If no data directory (DATADIR) is specified, the environment variable PGDATA
is used.
Report bugs to <pgsql-bugs@lists.postgresql.org>.
PostgreSQL home page: <https://www.postgresql.org/>
主要功能
- 启用校验: 在初始化数据库集群时 (
initdb
使用-k
或--data-checksums
选项) 可以启用页面校验。如果你的数据库是在没有启用校验的情况下初始化的,你可以使用pg_checksums
工具来启用它们,但这需要在数据库服务器关闭的情况下进行。 - 禁用校验: 与启用校验相同,禁用校验也需要在数据库服务器关闭的情况下进行。
- 校验数据库文件:
pg_checksums
只能在数据库关闭时进行,用于校验所有数据文件的校验,来检测潜在的数据损坏。
使用 pg_checksums
1 停止数据库服务
在启用或禁用校验和时,确保首先停止 PostgreSQL 服务:
[pg16@test ~]$ pg_ctl stop
waiting for server to shut down....2024-05-10 06:13:43.605 PDT [88551] DEBUG: logger shutting down
done
server stopped
2 启用校验
在 PostgreSQL 数据目录上运行 pg_checksums
来启用校验。我的库在初始化时已经加-K 参数,故提示已enabled。
[pg16@test 16413]$ pg_checksums --enable -D /home/pg16/data/
pg_checksums: error: data checksums are already enabled in cluster
3 禁用校验
pg_checksums --disable -D /home/pg16/data/
4 校验
[pg16@test 16413]$ pg_checksums -D /home/pg16/data/
Checksum operation completed
Files scanned: 1862
Blocks scanned: 26646
Bad checksums: 0
Data checksum version: 1
数据库运行时执行校验的话会报错。
[pg16@test ~]$ pg_checksums -D /home/pg16/data/
pg_checksums: error: cluster must be shut down
这将会报告任何发现的校验和错误,但不会修复它们。
5 重启数据库服务
在启用或禁用校验和后,需要重启 PostgreSQL 服务
[pg16@test ~]$ pg_ctl start
waiting for server to start....2024-05-10 06:36:32.829 PDT [90005] DEBUG: registering background worker "logical replication launcher"
2024-05-10 06:36:32.829 PDT [90005] DEBUG: loaded library "pg_stat_statements"
2024-05-10 06:36:32.829 PDT [90005] DEBUG: mmap(153092096) with MAP_HUGETLB failed, huge pages disabled: Cannot allocate memory
2024-05-10 06:36:32.838 PDT [90005] LOG: redirecting log output to logging collector process
2024-05-10 06:36:32.838 PDT [90005] HINT: Future log output will appear in directory "log".
done
server started
注意事项
- 启用或禁用校验和需要在整个数据库集群上执行,并且在这个过程中数据库服务不能运行。
- 校验和对性能有轻微的影响,但对于保证数据完整性非常有用。
- 使用校验和可以增加在物理错误发生时发现错误的几率,但它不能替代定期的备份与灾难恢复计划。
pg_checksums
是维护数据完整性和检测数据损坏的有力工具。在考虑使用此工具之前,建议仔细阅读 PostgreSQL 的官方文档和指导,确保你了解启用校验和对你的系统可能产生的影响。
谨记:心存敬畏,行有所止。