gs_ctl 重建备实例过程被中断导致秘钥文件不完整恢复方法

问题现象

用户在重建备实例的过程中被中断,再次重建备实例失败,出现以下报错信息

  1. CRC checksum does not match value stored in file, maybe the cipher file is corrupt
  2. non obs cipher file or random parameter file is invalid.
  3. read cipher file or random parameter file failed.
  4. 2020-06-18 20:58:12.080 5eeb64e3.1 [unknown] 140697304617088 [unknown] 0 dn_6001_6002 F0000 0 [BACKEND] FATAL: could not load server certificate file "server.crt": no start line
  5. [2020-06-18 20:58:12.086][24066][dn_6001_6002][gs_ctl]: waitpid 24446 failed, exitstatus is 256, ret is 2

原因分析

重建中断时证书文件不完整,再次重建会由于证书文件不完整而失败。

操作步骤

  1. 在数据目录下查看证书文件大小

    1. ll
    2. 查看秘钥文件大小
    3. -rw------- 1 omm omm 0 Jun 18 20:58 server.crt
    4. -rw------- 1 omm omm 0 Jun 18 20:58 server.key
    5. -rw------- 1 omm omm 0 Jun 18 20:58 server.key.cipher
    6. -rw------- 1 omm omm 0 Jun 18 20:58 server.key.rand
  2. 若证书文件大小为0,删除证书文件

    1. rm -rf server.crt server.key server.key.cipher server.key.rand
  3. 重建备实例

    1. gs_ctl build -D data_dir

gs_ctl 重建备实例过程被中断导致秘钥文件不完整恢复方法 - 图1 说明:
若备机数据库已停止,需要重新生成证书文件或者复制证书文件($GAUSSHOME/share下的证书文件)到数据目录,启动备机并重建备实例。生成证书文件的相关操作请参见《开发者指南》