金仓数据库学习笔记之WAL日志

📅 发布时间:2026/9/2 21:58:29
金仓数据库学习笔记之WAL日志
金仓数据库学习笔记之WAL日志WAL日志WAL 日志的核心作用金仓WAL日志控制参数金仓WAL日志存储位置查看WAL日志步骤1、 登录数据库小 tips当看到命令前缀显示为xxx#时是表示当前ksql使用超级用户system登录xxx数据库并执行相关sql命令。2、查看WAL日志加密参数确认WAL日志是否已经被加密3、查看未加密wal日志4、加密wal日志并查看总结WAL日志WALWrite-Ahead Logging预写式日志是数据库系统中一种关键的数据持久化和故障恢复机制。其核心思想是在对数据库的实际数据文件进行修改之前必须先将这些修改操作完整地记录到日志文件中。WAL 日志的核心作用保证数据持久性 (Durability)即使数据库在事务提交后、数据页刷盘前发生崩溃重启后也能通过重放RedoWAL 日志来恢复已提交的事务确保数据不丢失。支持崩溃恢复 (Crash Recovery)数据库异常终止后重启时会检查 WAL 日志将已提交但未落盘的事务重做Redo将未提交但已部分写入的事务撤销Undo使数据库恢复到一致状态。实现数据复制与高可用WAL 日志记录了数据的增量变化是流复制Streaming Replication、逻辑解码Logical Decoding等数据同步技术的基础用于构建主从架构、读写分离和容灾备份。提升写入性能通过将随机写转换为顺序写先写日志并配合检查点Checkpoint机制批量刷脏页可以显著减少磁盘 I/O 次数提高数据库的写入吞吐量。WAL 日志就是数据库的“操作日记”它确保了在任何意外情况下数据库都能“记住”自己应该变成什么样子从而保障数据的完整性与服务的连续性。金仓WAL日志控制参数金仓WAL日志加密控制参数wal_encryption,该参数为PGC_SIGHUP级别的GUC参数默认关闭状态。金仓WAL日志存储位置金仓数据库wal日志存储在$KINGBASE_DATA/.wallet目录下的主密钥文件masterkey.kr文件中。 该主密钥文件在查看加密日志时需要使用。如如果不知道这个$KINGBASE_DATA是什么可以通过echo命令进行查询查看WAL日志步骤1、 登录数据库ksql 数据库名 system 用system用户登录数据库小 tips当看到命令前缀显示为xxx#时是表示当前ksql使用超级用户system登录xxx数据库并执行相关sql命令。当看到命令前缀为XXX时则表示当前ksql使用非超级用户登录XXX数据库以执行命令。2、查看WAL日志加密参数确认WAL日志是否已经被加密执行命令wal_encryptionoff表示是关闭状态。3、查看未加密wal日志wal日志记录事务操作为测试wal日志情况测试步骤为创建表格、BEGIN命令开始事务并执行相关操作SELECT txid_current(),sys_current_wal_lsn() ,sys_walfile_name (sys_current_wal_lsn());如图对数据表执行增删改等操作并以END结束事务上述命令中SELECT txid_current(),sys_current_wal_lsn() ,sys_walfile_name (sys_current_wal_lsn());涉及了查看 WAL 日志信息的三个关键函数函数名描述返回值说明txid_current()查询当前会话正在执行的事务的唯一 ID。返回一个递增的事务 ID (Transaction ID)用于唯一标识一个事务。sys_current_wal_lsn()返回当前 WAL 日志的写入位置即日志序列号 (LSN)。如图返回的LSN 为0/XXXXXXXX是一个表示 WAL 日志中特定位置的 64 位十六进制数。sys_walfile_name(sys_current_wal_lsn())根据给定的 LSN返回对应的 WAL 日志文件名。返回形如0000000100000001000000A1的文件名该文件包含了指定 LSN 所在的 WAL 记录。接着使用wal日志查看命令查看对应日志sys_waldump -s wal日志序列号 /data/sys_wal/wal日志文件名 -d-d 选项为显示日志条目加密状态将查询到的wal日志序列号以及文件名代入之后可查询到查询到的enc:no即表示日志条目未加密。4、加密wal日志并查看将wal日志加密需要修改参数wal_encryption 为 on并使之生效。修改参数sql命令为ALTER SYSTEM SET wal_encryption TO on;修改系统参数之后需要重新加载conf文件SELECT sys_reload_conf;操作步骤为修改好参数之后即可重新查询wal日志。但经常会出现如下错误提示找到了加密的日志文件但没有找到可用的加密key文件。需要在执行sys_waldump命令 使用 -k选项指定主密钥文件** 查询到enc: yes则表示对包含敏感数据的日志条目是加密存储的。 enc: no表示对不包含敏感数据的日志条目是不会加密存储的。**总结1、金仓数据库的wal日志加密具有选择性数据库系统无法自动判断wal日志条目是否包含敏感数据并对敏感数据条目进行选择能性加密这种加密模式可有效减少因全量加密带来的性能开销。但加密操作本身是会消耗一定CPU资源的。2、主密钥文件masterkey.kr非常重要如果没有该文件则无法解密已加密的wal日志若该文件丢失则不测再通过sys_waldump解密查看历史的加密wal日志内容。物理备份时候会因为没有该文件无法解密wal日志而恢复失败。若没有对于主密钥文件的安全、可靠备份还会影响流复制备库时无法应用主库加密wal日志导致复制中断。3、wal日志加密后查询日志时-d 参数输出的enc: yes以及enc:no 分别表示表示该条 WAL日志记录已被加密其描述信息desc:…和内容在存储上是密文无法直接读取。必须使用-k 参数指定正确的主密钥文件才能解密查看。4、wal日志开启加密后需要谨慎关闭因其存在潜在数据泄露风险加密功能从开启变成关闭后若发生全页写则可能会将之前已经加密的wal日志中所修改的数据页包含敏感数据完整映像以明文形式记录到后续加密的wal日志中这样敏感数据就可能通过后面的未加密日志泄露了。生产环境谨慎操作5、wal日志加密与表空间加密、表加密之间的区别主要在于WAL日志加密主要是保护数据库的事务日志 而表空间与表加密则是保护的存储在数据文件中的静态数据也就是保护的是数据文件。 对于WAL日志进行加密则可以保障在事务日志里面不以明文形式记录数据变更的内容是在数据变更的过程中提供额外的安全保护层与静态数据加密共同构成多方位的保护体系。