在GaussDB 中,第一个控制文件是主控制文件,其作用至关重要。以下测试来验证这个结论。
首先,前面小节的测试已经表明,如果丢失了控制文件,数据库肯定是无法正常启动的。我们接下来看看其他运行时情况。
以下实验,在运行时清空控制文件的内容,重新启动数据库时,可以发现数据库没有出现错误,而二号控制文件被自动复制同步过来:
[eygle@enmodb1 data]$ python $GSDB_HOME/bin/zctl.py -t start
Successfully started instance.
[eygle@enmodb1 data]$
[eygle@enmodb1 data]$ echo "" > cntl2
[eygle@enmodb1 data]$ ls -l cntl2
-rw------- 1 eygle enmotech 1 Jan 3 12:24 cntl2
[eygle@enmodb1 data]$ python $GSDB_HOME/bin/zctl.py -t stop
Successfully stopped instance.
[eygle@enmodb1 data]$ ls -l cntl2
-rw------- 1 eygle enmotech 32768 Jan 3 12:24 cntl2
[eygle@enmodb1 data]$ python $GSDB_HOME/bin/zctl.py -t start
Successfully started instance.
[eygle@enmodb1 data]$ ls -l cntl2
-rw------- 1 eygle enmotech 10485760 Jan 3 12:25 cntl2
这种情况,就为我们恢复控制文件提供了一个新的选择,如果数据库丢了的是二号或者三号控制文件,那么仅仅需要创造一个空文件出来,数据库在启动过程中就会自动来同步恢复这两个控制文件。
测试如下:
[eygle@enmodb1 data]$ python $GSDB_HOME/bin/zctl.py -t stop
Successfully stopped instance.
[eygle@enmodb1 data]$ echo "" > cntl2
[eygle@enmodb1 data]$ echo ""> cntl3
[eygle@enmodb1 data]$ ls -l cntl*
-rw------- 1 eygle enmotech 10485760 Jan 3 12:28 cntl1
-rw------- 1 eygle enmotech 1 Jan 3 12:28 cntl2
-rw------- 1 eygle enmotech 1 Jan 3 12:28 cntl3
[eygle@enmodb1 data]$ python $GSDB_HOME/bin/zctl.py -t start
Successfully started instance.
[eygle@enmodb1 data]$ ls -l cntl[1-3]
-rw------- 1 eygle enmotech 10485760 Jan 3 12:28 cntl1
-rw------- 1 eygle enmotech 10485760 Jan 3 12:28 cntl2
-rw------- 1 eygle enmotech 10485760 Jan 3 12:28 cntl3
但是如果损失的是一号控制文件,则数据库将无法启动:
[eygle@enmodb1 data]$ python $GSDB_HOME/bin/zctl.py -t stop
Successfully stopped instance.
[eygle@enmodb1 data]$ echo ""> cntl1
[eygle@enmodb1 data]$ python $GSDB_HOME/bin/zctl.py -t start
Can not get instance '/gaussdb/gaussdata' process pid
所以在此补充一下本章的第一句话:控制文件是数据库的“大脑,而一号控制文件是GaussDB的灵魂。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




