1.前言
大家都知道openGauss数据库是基于PostgreSQL9.2的基础上二次开发的一个数据库,增加了很多功能。中启乘数科技经过一段时间的研究,把openGauss相对与PostgreSQL一些变化总结出来,让新手可以快速入门。
如果想先从大方面上了解openGauss与PostgreSQL区别,可以见:
2.一些工具的改变
下面的命令行工具出现了改名:
- pg_ctl改名成gs_ctl,同时增加了一些功能,可以用gs_ctl —help看到这些变化
- psql改名为gsql
- initdb改名为gs_initdb
- pg_basebackup改名为gs_basebackup
- pg_dump改名为gs_dump
- pg_dumpall改名为gs_dumpall
- pg_restore改名为gs_restore
注意默认情况下,我们以psql的习惯用gsql登录数据库后,会发现不能用上下光标键翻历史命令,也不能补全。这时只需要在gsql的命令行加上-r
参数后,就与psql的使用习惯完全一样了。
下面的工具没有改名:
- pg_config
- pg_controldata
- pg_receivexlog
- pg_recvlogical
- pg_resetxlog
增加的工具:
- gs_probackup: 类型pg_rman的备份集管理工具
- gs_guc: 配置数据参数的工具
3.数据库配置参数的变化
3.1 superuser_reserved_connections
这个参数用户控制超级用户占用的连接数,防止大量的应用连接上来后,导致DBA也无法连接到数据库去解决问题,专门为DBA保留的连接数。
这个参数在openGauss中被改名为sysadmin_reserved_connections。
3.2 connection_info
此参数是新增的参数,用于显示本连接的信息:
postgres=# show connection_info;
connection_info
-------------------------------------------------------------------------------------------------------------------------------
-
{"driver_name":"libpq","driver_version":"(openGauss 2.0.1 build d97c0e8a) compiled at 2021-06-02 19:37:17 commit 0 last mr "}
(1 row)
3.3 standby_shared_buffers_fraction
很多时候我们需要让备库占用的内存比主库少。但是在一个1主多备的集群中,备库也可能激活成主库,主库也可能转换为备库。openGauss增加了此参数,可以实现数据库在不同的主、备模式下占用不同的内存。
- 参数说明:备实例所在服务器使用shared_buffers内存缓冲区大小的比例。
- 该参数属于SIGHUP类型参数。
- 取值范围:双精度浮点型,0.1~1.0
- 默认值:0.3
3.4 double write的功能
openGauss实现了类似MySQL的double write的功能来防止操作系统异常宕机、断电等故障导致的数据文件坏块。这个功能是通过参数enable_double_write来控制,默认是on,当启用这个功能后full_page_writes关闭后也可以防止坏块。
postgres=# show enable_double_write;
enable_double_write
---------------------
on
(1 row)
postgres=# show wal_log_hints;
wal_log_hints
---------------
on
(1 row)
3.5 增量检查点参数
openGauss为了让数据库运行更平稳,实现了增量检查点的功能,这个功能由参数enable_incremental_checkpoint控制,默认是on:
postgres=# show enable_incremental_checkpoint;
enable_incremental_checkpoint
-------------------------------
on
(1 row)
3.6 防止WAL日志把空间撑爆
由于openGauss的物理备库也会建复制槽,为了防止备库把主库的空间撑爆,openGauss增加了两个参数:
- enable_xlog_prune: 默认为on,控制是否开启此功能。
- max_size_for_xlog_prune:WAL日志占用的最大空间。
当enable_xlog_prune为on时,不管复制槽需要WAL是否同步到备库,只要WAL占用的空间超过max_size_for_xlog_prune参数指定的值时,就会强制删除WAL日志。
postgres=# show max_size_for_xlog_prune;
max_size_for_xlog_prune
-------------------------
2147483647kB
(1 row)
3.7 most_available_sync
参数说明:在有同步备机故障时,主机事务不因同步备机故障而被阻塞。比如有两个同步备机,一个故障,另一个正常,这个时候主机事务只会等好的这个同步备,而不被故障的同步备所阻塞; 再比如走quorum协议时,一主三同步备,配置ANY 2(node1,node2,node3),当node1、node3故障,node2正常时,主机业务同样不被阻塞。
该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。
取值范围:布尔型
- on表示在有同步备机故障时,不阻塞主机。
- off表示在有同步备机故障时,阻塞主机。
- 默认值:off
3.8 防止数据库异常停止后,重新启动是恢复时间过长的参数
openGauss使用参数max_redo_log_size强制限制恢复点和当前日志位置之前的日志量大小,这样让数据库在异常停机之后,再启动时,数据库的恢复时间不会太常:
postgres=# show max_redo_log_size;
max_redo_log_size
-------------------
1GB
(1 row)
3.9 并行回放WAL功能
openGauss可以并行回放WAL,并行回放有一下参数:
- recovery_max_workers: 控制并行回放的最大并行度
- recovery_redo_workers: 控制并行回放的并行度
- recovery_parse_workers: 控制解析WAL的并行度, 但这个参数仅在开启极致RTO情况下可以设置大于1。此参数需要配合recovery_redo_workers使用。若同时开启recovery_parse_workers和recovery_max_workers,以开启极致RTO的recovery_parse_workers为准,并行回放特性失效。因极致RTO不支持hot standby模式和主备从模式,仅在参数hot_standby设置成off,replication_type设置成1时可以设置recovery_parse_workers为>1。另外,极致RTO也不支持列存,在已经使用列存表或者即将使用列存表的系统中,请关闭极致RTO.
- recovery_parallelism:只读,仅用于查询实际的并行度。
postgres=# show recovery_max_workers;
recovery_max_workers
----------------------
1
(1 row)
postgres=# show recovery_parse_workers;
recovery_parse_workers
------------------------
1
(1 row)
3.10 数据页lsn检查开关
参数名:enable_page_lsn_check
参数说明:数据页lsn检查开关。回放时,检查数据页当前的lsn是否是期望的lsn。
openGauss支持延迟备库:
recovery_min_apply_delay
参数说明:设置延迟备份库时间。
openGauss也应该支持备库归档:
archive_mode可以设置为:always on off
openGauss 增加了参数archive_dest,当设置archive_dest参数时,archive_command不起作用。
3.11 enable_mix_replication
参数说明:控制主备、主从之间WAL日志及数据复制的方式。
该参数属于INTERNAL类型参数,默认值为off,不允许外部修改。
须知: 此参数目前不允许正常业务场景下改变其值,即关闭WAL日志、数据页混合复制模式。
取值范围:布尔型
- on表示打开WAL日志、数据页混合复制模式。
- off表示关闭WAL日志、数据页混合复制模式。
- 默认值:off
3.12 enable_incremental_catchup
参数说明:控制主备之间数据追赶(catchup)的方式。
该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
取值范围:布尔型
- on表示备机catchup时用增量catchup方式,即从从备本地数据文件扫描获得主备差异数据文件列表,进行主备之间的catchup。
- off表示备机catchup时用全量catchup方式,即从主机本地所有数据文件扫描获得主备差异数据文件列表,进行主备之间的catchup。
- 默认值:on
3.13 bgwriter_thread_num 参数
openGauss可以有多个bgwriter写线程:
postgres=# show bgwriter_thread_num;
bgwriter_thread_num
---------------------
2
(1 row)
4. 快速安装体验
可以安装中启高斯数据库(zqgauss)来快速体验openGauss数据库。中启高斯数据库是openGauss的一个发行版本,完全兼容openGauss,是由中启乘数科技发行。
4.1 环境需要
操作系统:CentOS7.6
内存:4GB
磁盘空间:10GB空闲空间。
可以用一台虚拟机来体验
4.2 下载安装包
到https://gitee.com/csudata/openGauss-server/releases/v2.0.1
下载:
把下载下来的zqgauss2.0.1.1_centos7.6.tar.xz.1.dat和zqgauss2.0.1.1_centos7.6.tar.xz.2.dat放到/opt目录下, 安装:
cd /opt
cat zqgauss2.0.1.1_centos7.6.tar.xz.*.dat |tar Jxvf -
这时在/opt目录下产生了一个子目录zqgauss2.0.1.1
和一个链接zqgauss
:
[root@tc-zqgauss01 opt]# ls -l
total 151592
lrwxrwxrwx. 1 root root 14 Jul 13 19:13 zqgauss -> zqgauss2.0.1.1
drwxr-xr-x. 8 root root 78 Jul 13 18:48 zqgauss2.0.1.1
-rw-r--r--. 1 root root 83886080 Jul 13 21:15 zqgauss2.0.1.1_centos7.6.tar.xz.1.dat
-rw-r--r--. 1 root root 71340900 Jul 13 20:29 zqgauss2.0.1.1_centos7.6.tar.xz.2.dat
这样就完成了软件的安装。
4.3 配置环境
关闭selinux,修改文件/etc/selinux/config,修改配置项:
SELINUX=disabled
上面的修改需要重启机器后才生效。执行下面的命令,临时关闭selinux:
setenforce 0
关闭防火墙:
systemctl stop firewalld.service
systemctl disable firewalld.service
建用户:
groupadd -g 750 zqgauss
useradd -g 750 -u 750 -m zqgauss
在用户zqgauss的.bashrc中配置:
export GAUSSHOME=/opt/zqgauss
export PATH=$GAUSSHOME/bin:$PATH
export LD_LIBRARY_PATH=$GAUSSHOME/lib:$LD_LIBRARY_PATH
export GS_CLUSTER_NAME=dbCluster
export PGDATA=/home/zqgauss/pgdata
export PGDATABASE=postgres
4.4 建数据库
进到操作系统用户zqgauss下,建数据目录:
su - zqgauss
mkdir pgdata
chmod 700 pgdata
初始化数据库:
/opt/zqgauss/bin/gs_initdb --nodename=zqgauss01
启动数据库:
gs_ctl start
用gsql登录数据库:
[zqgauss@mkopengauss ~]$ gsql -r postgres
gsql ((GaussDB Kernel V500R001C20 build ab25cf94) compiled at 2021-07-08 15:39:11 commit 0 last mr debug)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
postgres=# \du
ERROR: Please use "ALTER ROLE user_name PASSWORD 'password';" to set the password of user zqgauss before other operation!
第一次登录数据库时需要修改密码,如果不修改,任何SQL都执行不了。我们修改密码:
postgres=# alter user zqgauss password 'zQ9gussdb';
ALTER ROLE
修改之后就可以执行命令了,我们建一张测试表试试:
postgres=# create table test01(id int primary key, t text);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "test01_pkey" for table "test01"
CREATE TABLE
postgres=# insert into test01 values(1, '111'),(2,'222');
INSERT 0 2
postgres=# select * from test01;
id | t
----+-----
1 | 111
2 | 222
(2 rows)
与PostgreSQL数据库的使用方法上没有区别。