暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

vertica9.3版本学习笔记

原创 福娃筱欢 恩墨学院 2023-08-04
2372

Vertica之简介

官网地址:https://www.vertica.com/
官方文档:https://www.vertica.com/documentation/vertica/12-0-x-documentation/
驱动下载:https://www.vertica.com/download/vertica/client-drivers/

Vertica是一款真正列存储的MPP架构的数据库,他支持PB级别的数据处理

一、Vertica数据库的由来

Vertica数据库是由关系数据库大师Michael Stonebraker(2014 年图灵奖获得者)所创建。
2005年,发表《C-Store: A Column-oriented DBMS》论文,Vertica系统公司成立。
2011年,被惠普收购并成为其核心大数据平台软件。
2017年,惠普企业(HPE)将旗下软件部门出售给了英国软件供应商Micro Focus公司,以全面摊薄的方式拥有Micro Focus 50.1%股份。

二、Vertica数据库的特点

1、关系型数据库
2、列式存储(降低IO);
3、MPP大规模并行处理
4、share nothing,纵向扩展
5、Vertica 集群中的所有节点100%对等(各节点都可读写、加载数据)
6、支持多种数据压缩(节省空间);
7、支持存放多至PB(Petabyte)级别的结构化数据
8、采用资源池、WOS、ROS、Projection、segmented、unsegmented、k-safe等技术;
9、适用于OLAP(数仓分析)
10、支持hadoop、kafka、SQL等。

三、缺点

1、整体集群宕掉时,会丢失部分数据
2、对于large cluster,如果control node服务器宕掉,会引发fault group的所有服务宕掉,但不影响集群可用性。

四、概况

一款无 Primary MPP数据库

Vertica数据库属于无Primary的MPP架构,所有节点均可访问使用,当然其也提供了负载均衡,以保障节点的合理使用。

一句话解释: 就是说Vertica的所有节点都可以作为连接访问节点,同时也作为计算存储节点,这样就不会存在还要去考虑Primary节点的高可用。比如,现在业内的GreenPlum属于有Primary节点的数据库。

在国内 vertica和部分厂商进行合作,进行云解决方案的实施;

下图架构对比:

image-20230728193122810

image-20230727102002022

image-20230727102014611

下图MPP并行计算对比:

image-20230728193301084

列式存储数据库

Vertica是一款列式存储数据库,列式存储的好处在哪呢?

比如我们查询一个表table1,table1有100列,写一个SQL语句查询出col1,col2,col3,col4四列数据:

select col1,col2,col3,col4 from table1 ;

如果是行式关系型数据库,比如Oracle,那么他会扫描每一行所有列数据,然后取出col1,col2,col3,col4。那么对于列存储的Vertica,只需要扫描col1,col2,col3,col4这四列的每一行即可,减少了和剩余96列的数据进行IO操作,能不快吗?

image-20230727102124999

而且列存储还有一个好处就是可以根据不同列数据类型不同,采取[不同的压缩方式](https://www.vertica.com/docs/11.0.x/HTML/Content/Authoring/SQLReferenceManual/Statements/encoding-type.htm?tocpath=SQL Reference Manual|SQL Statements|CREATE Statements|CREATE PROJECTION|_____1),减少存储的同时,提升IO性能,能不快吗?

自然列式存储成为了现在数仓的首选。

在Vertica日常使用中,内存的爆满溢出倒是成为了首当其冲的问题

高可用性

Vertica 使用类似RAID 的功能为数据库提供高可用性。在Vertica的术语中叫KSAFE安全性,其实现确如RAID

image-20230728193551267

KSAFE 1≈RAID 1,即一份数据落实到数据库会按照两副本的形式存放,在最简单的场景中节点1与节点2映射,节点2与节点3映射,依次类推呈现环装

image-20230728193810518

节点1故障,仍能满足数据库对于数据完整性的需求,故数据库仍能有效运转(ksafe 0相关操作无法实施)

image-20230728193849671

在如此映射关系中,只要保证相邻节点不同时出现故障,数据库仍能有效运转(ksafe 0相关操作无法实施)

image-20230728193928236

如果出现映射节点同时故障,那数据库便无法有效运转,停止提供访问了

image-20230728193949465

当然,在实际环境中,我们会根据物理机架的规则,构建fault group,构建更为复杂的节点映射关系,防止因机架断电导致数据库无法使用的情况,尽可能提高数据库集群的高可用。

可扩展性

这里没用高可扩展性的说法,是因Vertica Enterprise Mode架构的扩展效率局限性较大,扩展的过程实施较为方便,但Rebalance操作却较为费时费力,Vertica Enterprise Mode架构下只有扩充现有节点的倍数才能提升扩展效率,反之数据Rebalance将十分耗时,对于数仓环境(数据量较大)确实不太友好。

按2倍扩展,性能最佳

只扩充1个节点最不合算

image-20230728194413082

在Vertica Eon Mode中就不存在这个顾虑了,因为数据存放在共享存储中,数据Rebalance靠共享存储实现,与Vertica无关

自动数据库设计

Vertica在这一块做的确实很好,数据库环境部署完成后,近乎不需要再调整任何数据库参数(只有负载均衡、连接上限等需要根据实际环境定义)便可充分利用服务器的资源

较完善的应用集成

Vertica集成了DBD分析引擎(实际场景这块用的不多)

Vertica MC控制管理平台

image-20230728194554904

Vertica资源池配置WLM

image-20230728194640574

Vertica scheduler调度microbatch消费kafka

image-20230728194700854

Vertica特别组件

image-20230728194734982

Vertica数据导入

AUTO : Initially loads data into WOS, suitable for smaller bulk loads.最初将数据加载到WOS中,适用于较小的批量加载

DIRECT: Loads data directly into ROS containers, suitable for large (>100 MB) bulk loads.

将数据直接加载到ROS容器中,适用于大型(>100 MB)批量加载。

TRICKLE: Loads data only into WOS, suitable for frequent incremental loads.**涓流:**只将数据加载到WOS中,适合频繁增量加载

image-20230728195105193

Vertica projection

Vertica数据库与其他RDBMS不一样,数据库的物理层对象为projection投影(其他RDBMS为table),且Vertica projection均是有序存放(规范建表必须显示指明order by否则默认取前30列升序入库)

image-20230728195208696

image-20230728195233623

Hash Joins Versus Merge Joins哈希连接与合并连接

Merge join is used when projections of the joined tables are sorted on the join columns. Merge joins are faster and uses less memory than hash joins.

翻译:当在连接列上对连接表的投影进行排序时使用。合并连接比散列连接更快,使用的内存更少。

Hash join is used when projections of the joined tables are not already sorted on the join columns. In this case, the optimizer builds an in-memory hash table on the inner table’s join column. The optimizer then scans the outer table for matches to the hash table, and joins data from the two tables accordingly. The cost of performing a hash join is low if the entire hash table can fit in memory. Cost rises significantly if the hash table must be written to disk.

翻译:哈希连接用于连接表的投影尚未在连接列上排序时。在这种情况下,优化器在内部表的连接列上构建内存中的哈希表。然后,优化器扫描外部表以查找与散列表的匹配,并相应地连接两个表中的数据。如果整个哈希表可以放入内存中,那么执行哈希连接的成本就很低。如果必须将哈希表写入磁盘,则成本将显著增加。

Vertica的数据有序存放,故而在大多数情况下我们希望执行计划能走MERGE JOIN,减少对内存的消耗,特别在数仓环境大量表项数据量较大,在HASH JOIN中HASH MAP消耗大量内存资源,影响可想而知

五、Vertica能干什么?

从上面我们讲的Vertica数据库的特点可以看出,Vertica非常适合于OLAP场景,特别是对于我们常说的“大宽表”,查询性能异常强悍!

image-20230727102239929

  • 所以,可以将Vertica替换为你现在的Hive作为数据仓库的计算引擎,效率可以提升百倍以上。

image-20230727102312478

参考链接

Vertica的那些事 - 墨天轮 (modb.pro)

Vertica原理

Vertica单点部署

此篇文章主要是为了搭建Vertica环境用于学习用。

一、安装前准备

1.1.关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

1.2.关闭selinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0

1.3.配置yum源

mount /dev/sr0 /mnt
mkdir -p /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak 
cat <<-EOF >/etc/yum.repos.d/local.repo
[server]
name=server
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF

1.4.安装依赖包

yum -y install gdb mcelog sysstat chrony ntp ntpdate dialog rsync java python  tree
[root@localhost ~]# rpm -qa | grep gdb  #查看是否已经安装,已经有的就不需要安装了
......
[root@localhost ~]# ls /dev | grep pts
pts
[root@localhost ~]# python -V
Python 2.7.5
[root@localhost ~]# java -version
openjdk version "1.8.0_272"
OpenJDK Runtime Environment (build 1.8.0_272-b10)
OpenJDK 64-Bit Server VM (build 25.272-b10, mixed mode)

1.5.调整参数

echo "vm.swappiness = 1" >> /etc/sysctl.conf  #1:尽可能不用swap分区  0:尽可能不用swap分区
echo "fs.file-max = 65536" >> /etc/sysctl.conf 
echo "vm.min_free_kbytes=4096" >> /etc/sysctl.conf 
sysctl -p
echo 1 > /proc/sys/vm/swappiness
加上下面三行,sda切换为实际的,可以df -hT看下挂载的硬盘
echo deadline > /sys/block/sda/queue/scheduler 
echo deadline > /dev/sda
/sbin/blockdev --setra 8192 /dev/sda
sed -i '/^#LoginGraceTime/c LoginGraceTime 0'  /etc/ssh/sshd_config
cat >> /etc/security/limits.conf << "EOF"
#add by vertica
dbadmin    soft    nproc    65536
dbadmin    hard    nproc    65536
dbadmin    soft    nofile    65536
dbadmin    hard    nofile    65536
dbadmin    soft    stack    65536
dbadmin    hard    stack    65536
EOF

1.6.开启NTP服务

systemctl start ntpd
systemctl start chronyd
chkconfig --level 35 ntpd on
chkconfig --level 35 chronyd on

二、安装Vertica

2.1.获取rpm包

登录:http://www.verticachina.com/

下载地址:社区版本下载 - Vertica中国 (verticachina.com)

9.3.x下载地址:http://www.verticachina.com/wenjian/vertica9.3.zip

解压vertica9.3.zip 将其中的rpm上传到Linux

2.2.安装Vertica

--安装Vertica的rpm包
rpm -ivh vertica-9.3.1-4.x86_64.RHEL6.rpm #初步安装vertica到本机,还装了一些别的东西脚本啊,工具啊什么的
--安装Vertica
/opt/vertica/sbin/install_vertica --host 192.168.253.123 --rpm vertica-9.3.1-4.x86_64.RHEL6.rpm --failure-threshold FAIL --dba-user dbadmin   #会创建dbadmin操作系统用户和数据库用户
#设置dbadmin用户密码
echo 'dbadmin'|passwd --stdin dbadmin

详细过程如下:

[root@localhost ~]# rpm -ivh vertica-9.3.1-4.x86_64.RHEL6.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:vertica-9.3.1-4                  ################################# [100%]

Vertica Analytic Database v9.3.1-4 successfully installed on host localhost.localdomain

To complete your NEW installation and configure the cluster, run: 
 /opt/vertica/sbin/install_vertica

To complete your Vertica UPGRADE, run:
 /opt/vertica/sbin/update_vertica

---------------------------------------------------------------------------------- 
Important
---------------------------------------------------------------------------------- 
Before upgrading Vertica, you must backup your database.  After you restart your   
database after upgrading, you cannot revert to a previous Vertica software version.
---------------------------------------------------------------------------------- 

View the latest Vertica documentation at https://www.vertica.com/documentation/vertica/

出现以上信息后执行如下代码:

其中host改为你自己的IP,rpm改为自己上一步安装的
[root@localhost ~]# /opt/vertica/sbin/install_vertica --host 192.168.253.123 --rpm vertica-9.2.1-7.x86_64.RHEL6.rpm --failure-threshold FAIL --dba-user dbadmin
要你给dbadmin输入密码,直接回车,稍后登录root用户用passwd dbadmin更改密码即可

echo 'dbadmin'|passwd --stdin dbadmin

出现以下信息后表示数据库安装成功:

Please evaluate your hardware using Vertica's validation tools:
    https://www.vertica.com/docs/9.3.x/HTML/index.htm#cshid=VALSCRIPT

To create a database:
  1. Logout and login as dbadmin. (see note below)
  2. Run /opt/vertica/bin/adminTools as dbadmin
  3. Select Create Database from the Configuration Menu

  Note: Installation may have made configuration changes to dbadmin
  that do not take effect until the next session (logout and login).

To add or remove hosts, select Cluster Management from the Advanced Menu.

2.3.问题解决

HINT的错误可以忽略,FAIL的错误必须处理。

执行上一步后若出现如下错误(提示有错误的话一定要把FAIL的地方解决):

Prerequisites not fully met during local (OS) configuration for
verify-192.168.183.107.xml:
    HINT (S0305): https://www.vertica.com/docs/9.3.x/HTML/index.htm#cshid=S0305
        HINT(eS0305): TZ is unset for dbadmin. Consider updating .profile or
        .bashrc
    FAIL (S0030): https://www.vertica.com/docs/9.3.x/HTML/index.htm#cshid=S0030
        FAIL(eS0030): ntp daemon process is not running: ['ntpd', 'ntp',
        'chronyd']

System prerequisites failed.  Threshold = FAIL
	Hint: Fix above failures or use --failure-threshold

Installation FAILED with errors.

这是因为NTP服务没有开启,解决办法:

systemctl start ntpd
systemctl start chronyd
chkconfig --level 35 ntpd on
chkconfig --level 35 chronyd on

2.4.初始化数据库

如果不使用默认路径,则创建自定义路径

su - root
[root@top130 ~]# mkdir -p /data
[root@top130 ~]# chown -R testdb:verticadba /data/
[root@top130 ~]# chmod -R 750 /data/
创建数据库后会在/data下生成1个数据库名字的目录,示例:
[root@top130 data]# ls -l /data/testdb/
total 24
-rw-r--r--.  1 testdb verticadba 7842 Jul 29 18:43 dbLog
-rw-r--r--.  1 testdb verticadba    5 Jul 29 18:42 port.dat
drwx------.  2 testdb verticadba 4096 Jul 29 18:42 procedures
drwx------.  9 testdb verticadba 4096 Jul 29 18:42 v_testdb_node0001_catalog
drwx------. 18 testdb verticadba 4096 Jul 29 18:42 v_testdb_node0001_data
su - dbadmin
/opt/vertica/bin/adminTools

(1)提示输入License File Path时,因为社区版是免费的,按Tab键选中“OK”,回车

image-20230727114500491

(2)Accept EULA,按空格键选中Accept,回车

image-20230727114542562

(3)按上下键选择Configuration Menu,回车
(4)选择Create Database,回车
(5)输入Database Name
(6)输入密码和确认密码
(7)选择主机IP,因为是单节点安装,直接选择默认的那个IP
(8)确认数据实例安装目录,根据自己喜好,或者直接用默认的/home/dbadmin

2.5.数据库信息

user = dbadmin, group = verticadba, home = /home/dbadmin  dbadmin:dbadmin
软件路径:/opt/vertica/sbin/
数据目录:/home/dbadmin
日志位置:/opt/vertica/log
数据库名称:vertica
数据库用户:dbadmin
密码:vertica
默认端口:5444
数据库日志:
[dbadmin@localhost test]$ ls -l /home/dbadmin/test/dbLog 
-rw-r--r--. 1 dbadmin verticadba 22167 Jul 30 18:00 /home/dbadmin/test/dbLog
启动日志:
[root@localhost data]# tail -200f /data/tuopu/v_tuopu_node0001_catalog/startup.log
数据库catalog日志:
[dbadmin@localhost test]$ ls -l /home/dbadmin/test/v_test_node0001_catalog/vertica.log 
-rw-r--r--. 1 dbadmin verticadba 3005952 Jul 30 18:06 /home/dbadmin/test/v_test_node0001_catalog/vertica.log
--端口
[dbadmin@localhost vertica]$ ss -tla | grep 5444

三、连接Vertica

用vsql连接,图形化管理工具有DBVisualizer,其他主机想要vsql连接远程数据库可以点这里下载,直接解压即可用

[dbadmin@localhost ~]$ vsql vertica dbadmin  #顺序是数据库,用户名,不能颠倒
Password: 
Welcome to vsql, the Vertica Analytic Database interactive terminal.

Type:  \h or \? for help with vsql commands
       \g or terminate with semicolon to execute query
       \q to quit

vertica=> 

为了不需要手动输入密码,可以用~/.pgpass文件

echo '#hostname:port:database:username:password' >> ~/.pgpass
echo '*:5444:vertica:dbadmin:vertica' >> ~/.pgpass
chmod 600 ~/.pgpass
[dbadmin@localhost ~]$ vsql vertica dbadmin 
Welcome to vsql, the Vertica Analytic Database interactive terminal.

Type:  \h or \? for help with vsql commands
       \g or terminate with semicolon to execute query
       \q to quit

vertica=> 

四、开机自启

[dbadmin@localhost ~]$ /opt/vertica/bin/adminTools

Configuration Menu–>Set Restart Policy,按空格键选中创建的数据库,选中always,OK

五、预安装脚本

cat vertica_install.sh
#!/bin/bash
#上传iso至/opt ,若已挂载可忽略
#1.停止防火墙
systemctl stop firewalld
systemctl disable firewalld
#2.关闭SELINUX
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
#3.配置yum源
mount /dev/sr0 /mnt
mkdir -p /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak 
cat <<-EOF >/etc/yum.repos.d/local.repo
[server]
name=server
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF
#4.安装vertica的rpm包
yum -y install gdb mcelog sysstat chrony ntp ntpdate dialog rsync java python tree
#5.调整参数
echo "vm.swappiness = 1" >> /etc/sysctl.conf  #1:尽可能不用swap分区  0:尽可能不用swap分区
echo "fs.file-max = 65536" >> /etc/sysctl.conf 
echo "vm.min_free_kbytes=4096" >> /etc/sysctl.conf 
sysctl -p
echo 1 > /proc/sys/vm/swappiness
加上下面三行,sda切换为实际的,可以df -hT看下挂载的硬盘
echo deadline > /sys/block/sda/queue/scheduler 
echo deadline > /dev/sda
/sbin/blockdev --setra 8192 /dev/sda
sed -i '/^#LoginGraceTime/c LoginGraceTime 0'  /etc/ssh/sshd_config
cat >> /etc/security/limits.conf << "EOF"
#add by vertica
dbadmin    soft    nproc    65536
dbadmin    hard    nproc    65536
dbadmin    soft    nofile    65536
dbadmin    hard    nofile    65536
dbadmin    soft    stack    65536
dbadmin    hard    stack    65536
EOF
#6.开启NTP服务
systemctl start ntpd
systemctl start chronyd
chkconfig --level 35 ntpd on
chkconfig --level 35 chronyd on
#7.安装Vertica依赖包
rpm -ivh vertica-9.3.1-4.x86_64.RHEL6.rpm
#8.安装Vertica
/opt/vertica/sbin/install_vertica --host 192.168.253.123 --rpm vertica-9.3.1-4.x86_64.RHEL6.rpm --failure-threshold FAIL --dba-user dbadmin
#9.设置dbadmin用户密码
echo 'dbadmin'|passwd --stdin dbadmin
#10.初始化数据库
su - dbadmin -c '/opt/vertica/bin/adminTools'
#图形化操作
#11.连接数据库
#vsql vertica dbadmin
#12.开机自启
#/opt/vertica/bin/adminTools
#图形化操作

六、启停

/opt/vertica/bin/admintools -t start_db -d topszdp -p top@123  -d 数据库名字
/opt/vertica/bin/admintools -t stop_db -d topszdp -p top@123
/opt/vertica/bin/admintools -t restart_node -d topszdp   -p top@123

[dbadmin@localhost ~]$ /opt/vertica/bin/admintools -t stop_db -d topszdp -p top@123 -F  #-F强制停止,端口连接

--语法
/opt/vertica/bin/admintools -t stop_db -d db-name
[-p password] [-F]


七、端口说明

–端口说明
agent port:5444

console port:5433

八、查看数据库状态

[dbadmin@localhost bin]$ admintools -t view_cluster
 DB  | Host | State 
-----+------+-------
 dhh | ALL  | UP

参考链接

(189条消息) CentOS7单节点安装Vertica详细图文教程_Hi若如初见的博客-CSDN博客

Vertica集群部署

3个节点组成集群

数据库架构 服务器基本信息 数据库基本信息
集群 ip:192.168.3.130 公司服务器<br /
ip:192.168.3.131 公司服务器ssh
ip:192.168.3.132 公司服务器ssh
port:22
root:top@123
CentOS 7.9.2009

一、安装前准备

1.1.关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

1.2.关闭selinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0

1.3.配置yum源

mount /dev/sr0 /mnt
mkdir -p /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak 
cat <<-EOF >/etc/yum.repos.d/local.repo
[server]
name=server
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF

1.4.安装依赖包

yum -y install gdb mcelog sysstat chrony ntp ntpdate dialog rsync java python tree
[root@localhost ~]# rpm -qa | grep gdb  #查看是否已经安装,已经有的就不需要安装了
......
[root@localhost ~]# ls /dev | grep pts
pts
[root@localhost ~]# python -V
Python 2.7.5
[root@localhost ~]# java -version
openjdk version "1.8.0_272"
OpenJDK Runtime Environment (build 1.8.0_272-b10)
OpenJDK 64-Bit Server VM (build 25.272-b10, mixed mode)

1.5.调整参数

echo "vm.swappiness = 1" >> /etc/sysctl.conf  #1:尽可能不用swap分区  0:尽可能不用swap分区
echo "fs.file-max = 65536" >> /etc/sysctl.conf 
echo "vm.min_free_kbytes=4096" >> /etc/sysctl.conf 
sysctl -p
echo 1 > /proc/sys/vm/swappiness
加上下面三行,sda切换为实际的,可以df -hT看下挂载的硬盘
echo deadline > /sys/block/sda/queue/scheduler  #检查 IO Scheduler 设置
echo deadline > /dev/sda
/sbin/blockdev --setra 8192 /dev/sda  #检查磁盘的预读取设置
echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled #检查 hugepage 设置
sed -i '/^#LoginGraceTime/c LoginGraceTime 0'  /etc/ssh/sshd_config
cat >> /etc/security/limits.conf << "EOF"
#add by vertica
dbadmin    soft    nproc    65536
dbadmin    hard    nproc    65536
dbadmin    soft    nofile    65536
dbadmin    hard    nofile    65536
dbadmin    soft    stack    65536
dbadmin    hard    stack    65536
EOF

1.6.开启NTP服务并配置ntp

systemctl start ntpd
systemctl start chronyd
chkconfig --level 35 ntpd on
chkconfig --level 35 chronyd on

1.7.新建用户

groupadd -g 601 verticadba
useradd -u 601 -g 601 dbadmin

1.8.创建软件安装目录

mkdir -p /home/dbadmin/data
mkdir -p /home/dbadmin/catalog

1.9.用户环境变量

su - dbadmin
echo 'export TZ=Asia/Shanghai' >> /home/dbadmin/.bashrc
echo 'LANG=en_US.UTF-8' >> /home/dbadmin/.bashrc
source /home/dbadmin/.bashrc

二、安装Vertica

2.1.获取rpm包

登录:http://www.verticachina.com/

下载地址:社区版本下载 - Vertica中国 (verticachina.com)

9.3.x下载地址:http://www.verticachina.com/wenjian/vertica9.3.zip

解压vertica9.3.zip 将其中的rpm上传到Linux

2.2.安装Vertica集群

--安装vertica的rpm包
rpm -ivh vertica-9.3.1-4.x86_64.RHEL6.rpm #初步安装vertica到本机,还装了一些别的东西脚本啊,工具啊什么的
#设置dbadmin用户密码
echo 'dbadmin'|passwd --stdin dbadmin
--安装vertica集群
/opt/vertica/sbin/install_vertica --hosts 192.168.40.152,192.168.40.153,192.168.40.154  \
--rpm vertica-9.3.1-4.x86_64.RHEL6.rpm --failure-threshold FAIL \
--dba-user dbadmin  #将vertica安装到指定的机器之上,这里才是真正的安装,并对要安装的主机进行检查,看是否符合安装条件等
安装详细过程:
[root@localhost ~]# /opt/vertica/sbin/install_vertica --hosts 192.168.40.152,192.168.40.153,192.168.40.154  \
> --rpm vertica-9.3.1-4.x86_64.RHEL6.rpm --failure-threshold FAIL \
> --dba-user dbadmin
Vertica Analytic Database 9.3.1-4 Installation Tool
>> Validating options...
Mapping hostnames in --hosts (-s) to addresses...
>> Starting installation tasks.
>> Getting system information for cluster (this may take a while)...
Enter password for root@192.168.40.154 (3 attempts left):
Default shell on nodes:
192.168.40.152 /bin/bash
192.168.40.154 /bin/bash
192.168.40.153 /bin/bash
>> Validating software versions (rpm or deb)...
>> Beginning new cluster creation...
successfully backed up admintools.conf on 192.168.40.152 
>> Creating or validating DB Admin user/group...
Successful on hosts (3): 192.168.40.152 192.168.40.154 192.168.40.153
    Provided DB Admin account details: user = dbadmin, group = verticadba, home = /home/dbadmin
    Creating group... Group already exists
    Validating group... Okay
    Creating user... User already exists
    Validating user... Okay
>> Validating node and cluster prerequisites...
System prerequisites passed.  Threshold = FAIL
>> Establishing DB Admin SSH connectivity...
Installing/Repairing SSH keys for dbadmin
>> Setting up each node and modifying cluster...
Creating Vertica Data Directory...
Updating agent...
Creating node node0001 definition for host 192.168.40.152
... Done
Creating node node0002 definition for host 192.168.40.153
... Done
Creating node node0003 definition for host 192.168.40.154
... Done
>> Sending new cluster configuration to all nodes...
Starting or restarting agent...
>> Completing installation...
Running upgrade logic
Installation complete.
Please evaluate your hardware using Vertica's validation tools:
    https://www.vertica.com/docs/9.3.x/HTML/index.htm#cshid=VALSCRIPT
To create a database:
  1. Logout and login as dbadmin. (see note below)
  2. Run /opt/vertica/bin/adminTools as dbadmin
  3. Select Create Database from the Configuration Menu
  Note: Installation may have made configuration changes to dbadmin
  that do not take effect until the next session (logout and login).
To add or remove hosts, select Cluster Management from the Advanced Menu.

将Vertica包复制到计划集群中的所有其他主机(由–hosts参数标识)

安装脚本在所有主机上为管理员用户设置无密码ssh。如果已经设置了无密码ssh,安装脚本将验证它是否正常工作。

详细过程如下:

[root@localhost ~]# rpm -ivh vertica-9.3.1-4.x86_64.RHEL6.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:vertica-9.3.1-4                  ################################# [100%]

Vertica Analytic Database v9.3.1-4 successfully installed on host localhost.localdomain

To complete your NEW installation and configure the cluster, run: 
 /opt/vertica/sbin/install_vertica

To complete your Vertica UPGRADE, run:
 /opt/vertica/sbin/update_vertica

---------------------------------------------------------------------------------- 
Important
---------------------------------------------------------------------------------- 
Before upgrading Vertica, you must backup your database.  After you restart your   
database after upgrading, you cannot revert to a previous Vertica software version.
---------------------------------------------------------------------------------- 

View the latest Vertica documentation at https://www.vertica.com/documentation/vertica/

出现以上信息后执行如下代码:

其中host改为你自己的IP,rpm改为自己上一步安装的
[root@localhost ~]# /opt/vertica/sbin/install_vertica --host 192.168.253.123 --rpm vertica-9.2.1-7.x86_64.RHEL6.rpm --failure-threshold FAIL --dba-user dbadmin
要你给dbadmin输入密码,直接回车,稍后登录root用户用passwd dbadmin更改密码即可

echo 'dbadmin'|passwd --stdin dbadmin

出现以下信息后表示数据库安装成功:

Please evaluate your hardware using Vertica's validation tools:
    https://www.vertica.com/docs/9.3.x/HTML/index.htm#cshid=VALSCRIPT

To create a database:
  1. Logout and login as dbadmin. (see note below)
  2. Run /opt/vertica/bin/adminTools as dbadmin
  3. Select Create Database from the Configuration Menu

  Note: Installation may have made configuration changes to dbadmin
  that do not take effect until the next session (logout and login).

To add or remove hosts, select Cluster Management from the Advanced Menu.

2.3.初始化数据库

如果不使用默认路径,则创建自定义路径

su - root
[root@top130 ~]# mkdir -p /data
[root@top130 ~]# chown -R testdb:verticadba /data/
[root@top130 ~]# chmod -R 750 /data/
创建数据库后会在/data下生成1个数据库名字的目录,示例:
[root@top130 data]# ls -l /data/testdb/
total 24
-rw-r--r--.  1 testdb verticadba 7842 Jul 29 18:43 dbLog
-rw-r--r--.  1 testdb verticadba    5 Jul 29 18:42 port.dat
drwx------.  2 testdb verticadba 4096 Jul 29 18:42 procedures
drwx------.  9 testdb verticadba 4096 Jul 29 18:42 v_testdb_node0001_catalog
drwx------. 18 testdb verticadba 4096 Jul 29 18:42 v_testdb_node0001_data
su - dbadmin
/opt/vertica/bin/adminTools

(1)提示输入License File Path时,因为社区版是免费的,按Tab键选中“OK”,回车

image-20230727114500491

(2)Accept EULA,按空格键选中Accept,回车

image-20230727114542562

(3)按上下键选择Configuration Menu,回车
(4)选择Create Database,回车
(5)输入Database Name
(6)输入密码和确认密码
(7)选择主机IP,选择要建数据库的服务器 ,将会把vertica装到每一个节点
(8)确认数据实例安装目录,根据自己喜好,或者直接用默认的/home/dbadmin

2.4.数据库信息

user = dbadmin, group = verticadba, home = /home/dbadmin dbadmin:dbadmin

软件路径:/opt/vertica/sbin/

数据目录:/home/dbadmin

日志位置:/opt/vertica/log

数据库名称:dhh

数据库用户:dbadmin

密码:vertica

默认端口:5444

[dbadmin@localhost vertica]$ ss -tla | grep 5444

2.5.问题解决

HINT的错误可以忽略,FAIL的错误必须处理。

执行上一步后若出现如下错误(提示有错误的话一定要把FAIL的地方解决):

Prerequisites not fully met during local (OS) configuration for
verify-192.168.183.107.xml:
    HINT (S0305): https://www.vertica.com/docs/9.3.x/HTML/index.htm#cshid=S0305
        HINT(eS0305): TZ is unset for dbadmin. Consider updating .profile or
        .bashrc
    FAIL (S0030): https://www.vertica.com/docs/9.3.x/HTML/index.htm#cshid=S0030
        FAIL(eS0030): ntp daemon process is not running: ['ntpd', 'ntp',
        'chronyd']

System prerequisites failed.  Threshold = FAIL
	Hint: Fix above failures or use --failure-threshold

Installation FAILED with errors.

这是因为NTP服务没有开启,解决办法:

systemctl start ntpd
systemctl start chronyd
chkconfig --level 35 ntpd on
chkconfig --level 35 chronyd on

集群预安装脚本

cat vertica_install.sh
#!/bin/bash
#上传iso至/opt ,若已挂载可忽略
#1.停止防火墙
systemctl stop firewalld
systemctl disable firewalld
#2.关闭SELINUX
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
#3.配置yum源
mount /dev/sr0 /mnt
mkdir -p /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak 
cat <<-EOF >/etc/yum.repos.d/local.repo
[server]
name=server
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF
#4.安装vertica的rpm包
yum -y install gdb mcelog sysstat chrony ntp ntpdate dialog rsync java python  tree
#5.调整参数
echo "vm.swappiness = 1" >> /etc/sysctl.conf  #1:尽可能不用swap分区  0:尽可能不用swap分区
echo "fs.file-max = 65536" >> /etc/sysctl.conf 
echo "vm.min_free_kbytes=4096" >> /etc/sysctl.conf 
sysctl -p
echo 1 > /proc/sys/vm/swappiness
加上下面三行,sda切换为实际的,可以df -hT看下挂载的硬盘
echo deadline > /sys/block/sda/queue/scheduler 
echo deadline > /dev/sda
/sbin/blockdev --setra 8192 /dev/sda
sed -i '/^#LoginGraceTime/c LoginGraceTime 0'  /etc/ssh/sshd_config
cat >> /etc/security/limits.conf << "EOF"
#add by vertica
dbadmin    soft    nproc    65536
dbadmin    hard    nproc    65536
dbadmin    soft    nofile    65536
dbadmin    hard    nofile    65536
dbadmin    soft    stack    65536
dbadmin    hard    stack    65536
EOF
#6.开启NTP服务
systemctl start ntpd
systemctl start chronyd
chkconfig --level 35 ntpd on
chkconfig --level 35 chronyd on
#新建用户
groupadd -g 601 verticadba
useradd -u 601 -g 601 dbadmin
#创建软件安装目录
groupadd -g 601 verticadba
useradd -u 601 -g 601 dbadmin
echo 'export TZ=Asia/Shanghai' >> /home/dbadmin/.bashrc
echo 'LANG=en_US.UTF-8' >> /home/dbadmin/.bashrc
su - dbadmin -c 'source /home/dbadmin/.bashrc'
#7.安装Vertica依赖包
rpm -ivh vertica-9.3.1-4.x86_64.RHEL6.rpm
#8.安装Vertica
#/opt/vertica/sbin/install_vertica --host 192.168.253.123 --rpm vertica-9.3.1-4.x86_64.RHEL6.rpm --failure-threshold FAIL --dba-user dbadmin
#9.设置dbadmin用户密码
echo 'dbadmin'|passwd --stdin dbadmin
#10.初始化数据库
#su - dbadmin -c '/opt/vertica/bin/adminTools'
#图形化操作
#11.连接数据库
#vsql vertica dbadmin
#12.开机自启
#/opt/vertica/bin/adminTools
#图形化操作

参考链接:

集群安装参考https://www.cnblogs.com/angelasp/p/6622540.html

(189条消息) Vertica—操作汇总_vertica中文文档_蓝魔Y的博客-CSDN博客

Vertica物理备份恢复

Vertica提供了一个功能全面的使用程序–vbr, 他是一个Python脚本。使用vbr脚本可以备份和还原完整备份以及为特定架构或表创建备份。vbr实用程序会在首次执行期间创建备份目录并在后续再次执行时候创建子目录。

服务器基本信息 数据库架构 数据库基本信息
源库信息 ip:192.168.16.55 映射后
ssh port:17122 映射后
root:1
CentOS 7.9.2009
单点 9.3
dbname:test
端口:5433
dbadmin:test
虚拟机实际
ip:192.168.16.100
ssh:22
目标库信息 详见文档
ip:192.168.16.100
ssh port:22
root:dhh
CentOS 7.9.2009
单点 9.3
dbname:topszdp
端口:5433
dbadmin:top@123
虚拟机

整库备份

备份数据库场景

除了指定的备份策略外,在以下情况下建议备份数据库:

  • 在Vertiva升级到另一个版本前
  • 删除分区前
  • 加载大量数据后
  • 最新备份的时期早于当前的Ancient History Mark (AHM)
  • 在添加、删除、或者替换集群中的节点之前和之后。
  • 在恢复奔溃集群之后

注意:还原数据库备份时,必须要还原到与创建备份时的集群完全相同的群集。出于此原因,请始终在添加、删除或替换节点后创建新备份。

理想情况下,最好定期备份整个数据库。可以用linux的定时任corn或者其他任务调度程序运行Vertica Vbr实用程序。

备份数据库位置

使用vbr可将数据保存到以下位置:

  • 集群中节点上的本地目录
  • 集群外的一个或多个主机
  • 其他Vertica集群(高效克隆数据库)

注意:在另一个群集上创建数据库备份并不会提供灾难恢复能力。您使用vbr创建的克隆数据库与原始数据库完全独立,并不会与该原始数据库保持同步。

创建完整、增量备份

创建数据库备份前,请确认一下情况:

  • 数据库正在运行
  • 所有备份主机正常运行,且可供使用
  • 备份主机具有充足磁盘空间,可以存储备份
  • 启动使用程序的用户对主机备份位置的目录具有写入权限
  • 确保有效的备份策略,包括完整备份和增量备份定期进行。
  • 验证备份文件的完整性,以确保可以恢复数据。
  • 将备份文件以安全的方式存储在可靠的介质上,以防止数据丢失或损坏。

使用数据库集群启动程序的节点中的数据库管理员账户从终端运行vbr脚本。无法用root身份运行该使用程序。

首次运行vbr实用程序时,它会执行完整备份。后续再使用同样的配置文件运行时,它会创建增量备份。创建增量备份时,该实用程序会复制新的存储容器,其中可以包含上次备份数据库时就存在的数据以及自那以后新增和变更的数据。默认情况下,vbr会保存一个存档备份,除非您将配置文件中的restorePointLimit参数值设为大于1的值。

--第一次执行是完整备份
/opt/vertica/bin/vbr.py --task backup --config-file full_backup20230728.ini  
[dbadmin@localhost backup]$ ls -l
total 20
-rw-r--r--.   1 dbadmin verticadba 10660 Jul 28 13:15 backup_manifest
drwxr-xr-x. 139 dbadmin verticadba  4096 Jul 28 13:16 Objects
drwxr-xr-x.   3 dbadmin verticadba    49 Jul 28 13:16 Snapshots
--第二次执行是增量备份
先变动表
su - dbadmin
[dbadmin@test171 ~]$ vsql -U dbadmin -W test
test=> insert into dim_bhjb values (0,'二级','DD',04);
 OUTPUT 
--------
      1
(1 row)
test=> commit;
COMMIT
test=> \q
重新执行备份语句,执行后查看backup文件下的内容
[dbadmin@test171 ~]$ /opt/vertica/bin/vbr.py --task backup --config-file full_backup20230728.ini  
Starting backup of database test.
Participating nodes: v_test_node0001.
Snapshotting database.
Snapshot complete.
Approximate bytes to copy: 164 of 601175315 total.
[==================================================] 100%
Copying backup metadata.
Finalizing backup.
Backup complete!
[dbadmin@test171 ~]$ ls -l backup/
total 20
-rw-r--r--   1 dbadmin verticadba 10782 Jul 28 13:51 backup_manifest
drwxr-xr-x 140 dbadmin verticadba  4096 Jul 28 13:51 Objects  #看文件时间,即是增量备份
drwxr-xr-x   4 dbadmin verticadba    92 Jul 28 13:51 Snapshots

备份数据库步骤

  1. 确保Vertica集群正常运行,要备份的数据库没有进行任何活动操作。

  2. 登录到Vertica集群的主控节点(也可以称为管理节点)。

  3. 检查每个节点的数据流(数据量)

    su - dbadmin
    [dbadmin@test171 ~]$ vsql -U dbadmin -W test  #-U:用户名   -W:密码  test:数据库名字可自定义
    Password: 
    Welcome to vsql, the Vertica Analytic Database interactive terminal.
    
    Type:  \h or \? for help with vsql commands
           \g or terminate with semicolon to execute query
           \q to quit
    
    test=> select node_name,sum(used_bytes) as size_in_bytes from v_monitor.storage_containers group by node_name;
        node_name    | size_in_bytes 
    -----------------+---------------
     v_test_node0001 |         95756
    (1 row)
    
    
  4. 创建全备参数文件

    cat >> /home/dbadmin/full_backup20230728.ini << "EOF"
    [Misc]
    snapshotName = full_backup20230728  #更改
    restorePointLimit = 1 
    objectRestoreMode = createOrReplace   
    tempDir = /tmp/vbr
    retryCount = 2 
    retryDelay = 1
    passwordFile = password
    
    [Database]
    dbName = test    #更改
    dbUser = dbadmin  #更改
    
    [Transmission]
    encrypt = False
    checksum = False
    port_rsync = 50000
    serviceAccessUser = None
    total_bwlimit_backup = 0
    concurrency_backup = 1
    total_bwlimit_restore = 0
    concurrency_restore = 1
    
    [Mapping]
    v_test_node0001 = 192.168.120.171:/home/dbadmin/backup  #更改test ip 备份位置
    #v_test_node0002 = 192.168.120.171:/home/dbadmin/backup  #更改test ip 备份位置
    #v_test_node0003 = 192.168.120.171:/home/dbadmin/backup  #更改test ip 备份位置
    EOF
    
  5. 创建密码文件

    cat >> /home/dbadmin/password  << "EOF"
    [Passwords]
    dbPassword = test  #更改密码
    EOF
    chmod 400 /home/dbadmin/password  #必须只读,不然报以下错误:
    [dbadmin@localhost ~]$ /opt/vertica/bin/vbr.py -t init --config-file full_backup20230728.ini
    Error: Error in VBR config: Password file [password] is not read/write protected. It should be only readable/writable by admin user/group.
    Init FAILED.
    
    
  6. 初始化路径

    [dbadmin@localhost ~]$ /opt/vertica/bin/vbr.py -t init --config-file full_backup20230728.ini
    Initializing backup locations.
    Backup locations initialized.
    #初始化成功后,多了backup目录
    [dbadmin@localhost ~]$ ls -l
    total 8
    drwxr-xr-x. 2 dbadmin verticadba  29 Jul 28 11:09 backup  #初始化自动创建目录
    -rw-r--r--. 1 dbadmin verticadba 478 Jul 28 11:09 full_backup20230728.ini
    -r--------. 1 dbadmin verticadba  33 Jul 28 11:05 password
    drwxr-xr-x. 5 dbadmin verticadba 118 Jul 27 18:30 topszdp
    #不初始化会报一下错误:
    [dbadmin@localhost ~]$ /opt/vertica/bin/vbr.py --task backup --config-file full_backup20230728.ini
    Error: Manifest not found at rsync://[192.168.16.100]:50000/home/dbadmin/backups -- is the backup location initialized? Hint: Execute '--task init' first.
    **Backup FAILED.**
    
  7. 执行备份

    
    [dbadmin@localhost ~]$ /opt/vertica/bin/vbr.py --task backup --config-file full_backup20230728.ini
    Starting backup of database topszdp.
    Participating nodes: v_topszdp_node0001.
    Snapshotting database.
    Snapshot complete.
    Approximate bytes to copy: 600967267 of 600967267 total.
    [==================================================] 100%   #进度条显示100%备份成功
    Copying backup metadata.
    Finalizing backup.
    Backup complete!
    --查看备份目录里内容
    [dbadmin@localhost ~]$ cd /home/dbadmin/backup/
    [dbadmin@localhost backup]$ ls -l
    total 8
    -rw-r--r--. 1 dbadmin verticadba 1335 Jul 28 11:12 backup_manifest
    drwxr-xr-x. 8 dbadmin verticadba 4096 Jul 28 11:12 Objects  #vertica的数据库文件
    drwxr-xr-x. 3 dbadmin verticadba   49 Jul 28 11:12 Snapshots
    [dbadmin@localhost v_topszdp_node0001]$ cd /home/dbadmin/backup/Snapshots/full_backup20230728_20230728_031224
    [dbadmin@localhost full_backup20230728_20230728_031224]$ ls -l
    total 0
    drwxr-xr-x. 2 dbadmin verticadba 169 Jul 28 11:20 v_topszdp_node0001 #备份的原vertica数据库的一下信息
    [dbadmin@localhost v_topszdp_node0001]$ ls -l
    total 18448
    -rw-------. 1 dbadmin verticadba 18877251 Jul 28 11:12 full_backup20230728.ctlg
    -rw-r--r--. 1 dbadmin verticadba      109 Jul 28 11:12 full_backup20230728.info
    -rw-------. 1 dbadmin verticadba     1447 Jul 28 11:12 full_backup20230728.manifest
    -rw-------. 1 dbadmin verticadba     3764 Jul 28 11:12 full_backup20230728.txt
    -rw-------. 1 dbadmin verticadba        0 Jul 28 11:12 full_backup20230728.udfs
    

    备份过程可能需要一些时间,具体时间取决于数据库的大小和复杂性

    8.查看备份的内容

    --命令哈查看备份的内容
    [dbadmin@test171 ~]$ /opt/vertica/bin/vbr.py --task listbackup --config-file full_backup20230728.ini
    backup                                backup_type   epoch   objects   include_patterns   exclude_patterns   nodes(hosts)                       version     file_system_type  
    full_backup20230728_20230728_035315   full          159                                                     v_test_node0001(192.168.120.171)   v9.3.1-20   [Linux]  
    
    --数据库里查看备份内容
    test=> select * from database_backups;
           backup_timestamp        |    node_name    |    snapshot_name    | backup_epoch | node_count | file_system_type | objects 
    -------------------------------+-----------------+---------------------+--------------+------------+------------------+---------
     2023-07-28 11:53:36.541555+08 | v_test_node0001 | full_backup20230728 |          159 |          1 | [Linux]          | 
    (1 row)
    
    

    9.查看备份帮助信息


[dbadmin@localhost bin]$ /opt/vertica/bin/vbr --h 
option --setupconfig not recognized
vertica backup and restore script help
-h --help                                                print help message
-t --task { backup | restore | copycluster |
            replicate | listbackup | init |
            quick-check | full-check | quick-repair |
            collect-garbage | remove }                   specify task
-c --config-file mybackup.conf                           specify config file
--debug { 0 | 1 | 2 | 3 }                                change output message level
--nodes v_mydb_node0001[,...]                            only operate on nodes inside the comma separated list
--showconfig                                             displays parameters in the config file
--archive < yymmdd_hhmmss >                              only valid with --task restore, specify which archive to restore from, and --task remove, specify which archive(s) to remove
--dry-run                                                only valid with --task backup/restore/copycluster/replicate, check what the vbr task is going to do, before actually doing
--json                                                   only valid with --task listbackup, output json format on screen
--list-all                                               only valid with --task listbackup, let listbackup list all snapshots on backup hosts
--list-output-file                                       only valid with --task listbackup, specify the file to output
--report-file                                            only valid with --task full-check, specify the file to output, output content is lists of files
--restore-objects obj[,...]                              only valid with --task restore, specify which objects to restore
--include-objects pattern[,...]                          only valid with --task restore, specify object wildcards to include objects for restore
--exclude-objects pattern[,...]                          only valid with --task restore, specify object wildcards to exclude objects from restore
--s3-force-init                                          only valid with --task init, force to reinitialize S3 backup locations

10.样例文件位置:

[dbadmin@localhost ~]$ cd /opt/vertica/share/vbr/example_configs/
[dbadmin@localhost example_configs]$ ls -l
total 64
-rw-rw-r--. 1 root root 4601 Mar 11  2020 backup_restore_full_external.ini
-rw-rw-r--. 1 root root 3741 Mar 11  2020 backup_restore_full_hardlink.ini
-rw-rw-r--. 1 root root 4239 Mar 11  2020 backup_restore_full_local.ini
-rw-rw-r--. 1 root root 5128 Mar 11  2020 backup_restore_object_local.ini
-rw-rw-r--. 1 root root 3308 Mar 11  2020 backup_restore_s3.ini
-rw-rw-r--. 1 root root 3570 Mar 11  2020 copycluster.ini
-rw-rw-r--. 1 root root 3580 Mar 11  2020 eon_backup_restore.ini
-rw-rw-r--. 1 root root 4406 Mar 11  2020 object_restore_to_other_cluster.ini
-rw-rw-r--. 1 root root  593 Mar 11  2020 password.ini
-rw-rw-r--. 1 root root 3667 Mar 11  2020 README
-rw-rw-r--. 1 root root 4308 Mar 11  2020 replicate.ini

11.全备参数文件参数解读

cat >> /home/dbadmin/full_backup20230728.ini << "EOF"
[Misc]
snapshotName = full_backup20230728   #备份的基本名称。此名称用于vbr为每个节点创建的目录树结构
restorePointLimit = 1   #指定除了最近的备份之外还要保留的历史备份数
objectRestoreMode = createOrReplace    #指定在还原架构或表备份时vbr如何处理同名对象。
tempDir = /tmp/vbr  #指定群集节点上临时存储区域的绝对路径。集群中所有节点上的tmp路径必须相同。vbr在将文件从源集群节点复                         制到目标备份位置时,将此目录用作日志文件、锁定文件和其他记账信息的临时位置。vbr还会将备份日志写入该位置。
retryCount = 2   #指定要进行的备份尝试次数。如果备份在超过重试次数后失败,vbr将报告错误并停止处理
retryDelay = 1  #指定如果发生故障,备份重试尝试之间等待的秒数
passwordFile = password 
Objects #Objects和includeObjects  不能同时存在
includeObjects = a,b    #Objects和includeObjects  不能同时存在
excludeObjects = d,e

[Database]
dbName = test
dbUser = dbadmin

[Transmission]
encrypt = False 
checksum = False
port_rsync = 50000 #更改rsync协议的默认端口号。如果集群中正在使用默认的rsync端口,或者需要rsync使用另一个端口以避免防火墙限                     制,请更改此值。
serviceAccessUser = None  #用于rsync连接的简单身份验证的用户名。此用户既不是Linux用户名,也不是Vertica用户名。它只是                               rsync协议使用的任意标识符。如果不提供用户名,vbr将使rsync在没有身份验证的情况下运行,从而产生潜                           在的安全风险。如果选择保存密码,请将其存储在密码配置文件中。
total_bwlimit_backup = 0  #还原连接的总带宽限制(KBps)。vbr在concurrenty_restore中设置的连接数之间均匀地分配该带宽。                             默认值0允许无限带宽
concurrency_backup = 1   #每个节点的最大备份TCP rsync连接数
total_bwlimit_restore = 0  #还原连接的总带宽限制(KBps)。vbr在concurrenty_restore中设置的连接数之间均匀地分配该带宽。                             默认值0允许无限带宽
concurrency_restore = 1  #每个节点的最大还原TCP rsync连接数

[Mapping]
v_test_node0001 = 192.168.120.171:/home/dbadmin/backup   #test:数据库名称  ip:服务器ip                                                                        /home/dbadmin/backup:备份目录,若不存在,init初始化时会自动创建

整库恢复

使用vbr可将数据保存到以下位置:

  • 集群中节点上的本地目录
  • 集群外的一个或多个主机
  • 其他Vertica集群(高效克隆数据库)

注意:在另一个群集上创建数据库备份并不会提供灾难恢复能力。您使用vbr创建的克隆数据库与原始数据库完全独立,并不会与该原始数据库保持同步。

恢复前提

The destination database must:
Be DOWN.
Share the same name as the source database.
Have the same number of nodes as the source database.
Have the same names as the source nodes.
Use the same catalog directory location as the source database.
Use the same port numbers as the source database
Contain the same standby nodes as the backup.

恢复数据库步骤

数据库名称需和源一致,不然报错

1.创建目录库

数据库名称需和源名称保持一致,创建数据库后不要启动

[dbadmin@localhost ~]$ /opt/vertica/bin/adminTools  

(3)按上下键选择Configuration Menu,回车
(4)选择Create Database,回车
(5)输入Database Name
(6)输入密码和确认密码
(7)选择主机IP,因为是单节点安装,直接选择默认的那个IP
(8)确认数据实例安装目录,根据自己喜好,或者直接用默认的/home/dbadmin

2.拷贝备份文件至目录服务器

su - root
chown -R dbadmin:verticadba /home/dbadmin/
chmod 400 /home/dbadmin/password
[dbadmin@localhost ~]$ ls -lht /home/dbadmin/
total 8.0K
drwxr-xr-x. 4 dbadmin verticadba  88 Jul 28 13:21 backup   #
-rw-r--r--. 1 dbadmin verticadba 472 Jul 28 13:20 full_backup20230728.ini  #
drwxr-xr-x. 5 dbadmin verticadba 112 Jul 28 13:16 test
-r--------. 1 dbadmin verticadba  30 Jul 28 13:15 password  #
drwxr-xr-x. 5 dbadmin verticadba 118 Jul 27 18:30 topszdp

3.更改步骤3中的full_backup20230728.ini

[dbadmin@localhost ~]$ vi /home/dbadmin/full_backup20230728.ini 
...
[Mapping]
v_test_node0001 = 192.168.16.100:/home/dbadmin/backup  #ip更改为新IP
...

4.执行恢复

确定数据库停止,不然恢复报错

[dbadmin@localhost ~]$ /opt/vertica/bin/vbr.py --task restore --config-file full_backup20230728.ini
Starting full restore of database test.
Participating nodes: v_test_node0001.
Restoring from restore point: full_backup20230728_20230728_035315
Determining what data to restore from backup.
[==================================================] 100%
Approximate bytes to copy: 601174758 of 601175151 total.
Syncing data from backup to cluster nodes.
[==================================================] 100%
Restoring catalog.

5.启动数据库

[dbadmin@localhost ~]$ /opt/vertica/bin/admintools -t start_db -d test -p test

对象级备份

对象级备份和全量备份差不多,知识在生成备份配置文件时有所不同(注意不同之处)

1、 对象级备份如果同一个备份集中有多个对象,恢复时会一并恢复
2、 对于有多个对象的系统,对象级备份可以在并发在多个备份机进行

备份对象步骤**

  1. 确保Vertica集群正常运行,要备份的数据库没有进行任何活动操作。

  2. 登录到Vertica集群的主控节点(也可以称为管理节点)。

  3. 检查每个节点的数据流

    su - dbadmin
    [dbadmin@test171 ~]$ vsql -U dbadmin -W test  #-U:用户名   -W:密码  test:数据库名字可自定义
    Password: 
    Welcome to vsql, the Vertica Analytic Database interactive terminal.
    
    Type:  \h or \? for help with vsql commands
           \g or terminate with semicolon to execute query
           \q to quit
    
    test=> select node_name,sum(used_bytes) as size_in_bytes from v_monitor.storage_containers group by node_name;
        node_name    | size_in_bytes 
    -----------------+---------------
     v_test_node0001 |         95756
    (1 row)
    
    
  4. 创建对象级备份参数文件

    cat >> /home/dbadmin/object_backup20230730.ini << "EOF"
    [Misc]
    snapshotName = object_backup20230730  #更改
    restorePointLimit = 1 
    objectRestoreMode = createOrReplace   
    tempDir = /tmp/vbr
    retryCount = 2 
    retryDelay = 1
    objects = DIM_BHJB,DIM_BHJBDW
    
    [Database]
    dbName = test    #更改
    dbUser = dbadmin  #更改
    dbPassword = test   #更改
    
    [Transmission]
    encrypt = False
    checksum = False
    port_rsync = 50000
    serviceAccessUser = None
    total_bwlimit_backup = 0
    concurrency_backup = 1
    total_bwlimit_restore = 0
    concurrency_restore = 1
    
    [Mapping]
    v_test_node0001 = 192.168.120.171:/home/dbadmin/backup  #更改test ip 备份位置
    EOF
    
  5. 初始化路径

    [dbadmin@localhost ~]$ /opt/vertica/bin/vbr.py -t init --config-file object_backup20230730.ini
    Initializing backup locations.
    Backup locations initialized.
    #初始化成功后,多了backup目录
    [dbadmin@localhost ~]$ ls -l
    total 8
    drwxr-xr-x. 2 dbadmin verticadba 29 Jul 28 11:09 backup #初始化自动创建目录 ,backup中会有backup_manifest文件
    -rw-r--r--. 1 dbadmin verticadba 478 Jul 28 11:09 object_backup20230730.ini
    drwxr-xr-x. 5 dbadmin verticadba 118 Jul 27 18:30 test
    #不初始化会报一下错误:
    [dbadmin@localhost ~]$ /opt/vertica/bin/vbr.py --task backup --config-file object_backup20230730.ini
    Error: Manifest not found at rsync://[192.168.16.100]:50000/home/dbadmin/backups -- is the backup location initialized? Hint: Execute '--task init' first.
    **Backup FAILED.**
    
  6. 执行备份

    [dbadmin@localhost ~]$ /opt/vertica/bin/vbr.py --task backup --config-file object_backup20230730.ini
    Starting backup of database test.
    Participating nodes: v_test_node0001.
    Objects: ['DIM_BHJB', 'DIM_BHJBDW']
    Snapshotting database.
    Snapshot complete.
    Approximate bytes to copy: 1721 of 1721 total.
    [==================================================] 100%
    Copying backup metadata.
    Finalizing backup.
    Backup complete!
    --查看备份目录里内容
    [dbadmin@localhost ~]$ cd /home/dbadmin/backup/
    [dbadmin@localhost backup]$ ls -l
    total 8
    -rw-r--r--. 1 dbadmin verticadba 1335 Jul 28 11:12 backup_manifest  #备份类型
    drwxr-xr-x. 8 dbadmin verticadba 4096 Jul 28 11:12 Objects  #vertica的数据库文件
    drwxr-xr-x. 3 dbadmin verticadba   49 Jul 28 11:12 Snapshots
    [dbadmin@localhost v_topszdp_node0001]$ cd /home/dbadmin/backup/Snapshots/full_backup20230728_20230728_031224
    [dbadmin@localhost full_backup20230728_20230728_031224]$ ls -l
    total 0
    drwxr-xr-x. 2 dbadmin verticadba 169 Jul 28 11:20 v_topszdp_node0001 #备份的原vertica数据库的一下信息
    [dbadmin@localhost backup]$ cd Snapshots/object_backup20230730_20230730_090108/v_test_node0001/
    [dbadmin@localhost v_test_node0001]$ ls -l
    total 96
    -rw-r--r--. 1 dbadmin verticadba    97 Jul 30 17:01 object_backup20230730.info
    -rw-------. 1 dbadmin verticadba   762 Jul 30 17:01 object_backup20230730.manifest
    -rw-------. 1 dbadmin verticadba 85515 Jul 30 17:01 object_backup20230730.rst
    -rw-------. 1 dbadmin verticadba  3991 Jul 30 17:01 object_backup20230730.txt
    -rw-------. 1 dbadmin verticadba     0 Jul 30 17:01 object_backup20230730.udfs
    

    备份过程可能需要一些时间,具体时间取决于数据库的大小和复杂性

    8.查看备份的内容

    --命令哈查看备份的内容
    [dbadmin@localhost ~]$ /opt/vertica/bin/vbr.py --task listbackup --config-file object_backup20230730.ini
    backup                                  backup_type   epoch   objects                             include_patterns   exclude_patterns   nodes(hosts)                      version    file_system_type  
    object_backup20230730_20230730_090108   object        175     public.DIM_BHJB,public.DIM_BHJBDW                                         v_test_node0001(192.168.16.100)   v9.3.1-4   [Linux] 
    
    --数据库里查看备份内容
    vsql -Udbadmin -W test -p 5433
    test=> select * from database_backups;
    test=> select * from database_backups;
           backup_timestamp        |    node_name    |     snapshot_name     | backup_epoch | node_count | file_system_type |       objects       
    -------------------------------+-----------------+-----------------------+--------------+------------+------------------+---------------------
     2023-07-30 17:01:25.619546+08 | v_test_node0001 | object_backup20230730 |          175 |          1 | [Linux]          | DIM_BHJB,DIM_BHJBDW
     2023-07-30 16:58:48.268023+08 | v_test_node0001 | object_backup20230730 |          175 |          1 | [Linux]          | DIM_BHJB,DIM_BHJBDW
    (3 rows)
    
    

对象级恢复

恢复对象步骤**

1.拷贝备份文件至目录服务器

su - root
chown -R dbadmin:verticadba /home/dbadmin/
chmod 400 /home/dbadmin/password
[dbadmin@localhost ~]$ ls -lht /home/dbadmin/
-rw-r--r--.  1 dbadmin verticadba 623 Jul 30 17:01 backup_manifest
drwxr-xr-x. 10 dbadmin verticadba  94 Jul 30 17:01 Objects
drwxr-xr-x.  3 dbadmin verticadba  51 Jul 30 17:01 Snapshots

2.模拟删除对象

test=> \dt public.*
test=> drop table DIM_BHJB;
test=> drop table DIM_BHJBDW ;

3.更改object_backup20230730.ini

[dbadmin@localhost ~]$ vi /home/dbadmin/object_backup20230730.ini 
...
[Mapping]
v_test_node0001 = 192.168.16.100:/home/dbadmin/backup  #ip更改为新IP
...

4.执行恢复

[dbadmin@localhost ~]$ /opt/vertica/bin/vbr.py --task restore --config-file object_backup20230730.ini
Starting object restore of database test.
Restoring from restore point: object_backup20230730_20230730_090108
Participating nodes: v_test_node0001.
Loading snapshot catalog from backup.
Restoring objects: public.DIM_BHJB,public.DIM_BHJBDW
Approximate bytes to copy: 1115.
Syncing data from backup to cluster nodes.
[==================================================] 100%
Finalizing restore.
Restore complete!

5.查看删除的表

[dbadmin@localhost ~]$ vsql -Udbadmin -W test -p 5433
test=> \dt public.DIM_BHJB;
test=> \dt public.DIM_BHJBDW;

参考链接

Vertica的这些事(十二)——-vertica备份与恢复 - WindyQin - 博客园 (cnblogs.com)

Vertica逻辑备份恢复

导入

cat vertica_recover.sh
#!/bin/bash
# 设置参数
dbname=topicis
username=dbadmin
password=topicis
port=5433
bakpath=`pwd`

# 导入表结构
echo "开始导入表结构:"
vsql -p $port -d $dbname -U $username -Atq -w $password -f init/sql_init.sql

echo "开始导入表数据:"

# 导出表数据
cd tmp
tables=`cat tables.txt`
for table in $tables; do
    echo "导入:$table"
    vsql -p $port -d $dbname -U $username -Atq -w $password -c "COPY ${table} FROM '${bakpath}/data/${table}.csv' DELIMITER '|';"
done

导出

cat vertica_bak.sh
#!/bin/bash
#创建tmp目录并进入tmp目录创建以下目录
#mkdir -p tmp
#cd tmp && mkdir -p {init,tmp,data}
# 设置参数
dbname=vertica
username=dbadmin
password=topicis
port=5433
bakpath=`pwd`


# 导出表结构
#SELECT EXPORT_TABLES( '/opt/dbadmin/sql_tables_empty.sql', '');
#vsql  -p $port -d $dbname -U $username -Atq -w $password -c "SELECT EXPORT_TABLES( '$bakpath/sql_tables_empty.sql', '');"
# 导出所有对象结构
#SELECT export_catalog( '/opt/dbadmin/sql_tables_empty.sql', '')
vsql  -p $port -d $dbname -U $username -Atq -w $password -c "SELECT EXPORT_CATALOG( '$bakpath/init/sql_init.sql', 'design_all');"
echo -e "导出数据库结构信息完成。\n"

# 导出所有表名
# vsql -p $port -d 数据库名 -U 用户名 -Atq -w 密码 -c "select * from 表名">路径/文件名.csv
vsql  -p $port -d $dbname -U $username -Atq -w $password -c "\d" > $bakpath/tmp/tables.csv
# 清洗数据,只列出表名
cat tmp/tables.csv |awk -F"|" '{print $2}' > tmp/tables.txt

# 导出表数据
tables=`cat tmp/tables.txt`

for table in $tables; do
    echo "导出:$table"
    vsql  -p $port -d $dbname -U $username -Atq -w $password -c "select * from $table;" > $bakpath/data/$table.csv
done

补充:

Vertica提供了多个EXPORT_函数,允许在目标数据库中重新创建数据库或特定架构和表。

  • export_catalog(path, scope)
    说明:EXPORT_CATALOG创建最全面的 SQL 脚本,而EXPORT_TABLES和EXPORT_OBJECTS是该函数的子集,以缩小导出范围。
    scope的可以选择 TABLES、DESIGN、DIRECTED_QUERIES;

  • export_objects(path, scope, mark-ksafe)
    说明:导出的sql脚本仅包括用户有权访问的对象。

  • export_tables(path, scope)
    说明:export_tables 不会导出视图,即使指定视图也会被忽略;导出的sql脚本仅包括用户有权访问的对象。

Vertica更改端口

1.更改配置文件的默认端口

2.再创建数据库

3.配置文件改回默认端口

4.登录数据库

--更改配置文件的默认端口
[dbadmin@localhost ~]$ vi /opt/vertica/config/admintools.conf
...
last_port = 5555
...
--创建数据库
[dbadmin@localhost ~]$ /opt/vertica/config/admintools
--更改配置文件,改回默认端口
[dbadmin@localhost ~]$ vi /opt/vertica/config/admintools.conf
...
last_port = 5555
...
--登录数据库
[dbadmin@localhost ~]$ vsql -Udbadmin -W -d tuopu -p 5555

Vertica多数据库实例端口如何配置-数据库端口 (51cto.com)

报错

--test库
--查看数据库日志
tail -200f /home/dbadmin/test/dbLog
Conf_load_conf_file: using file: /home/dbadmin/test/v_test_node0001_catalog/spread.conf
Conf_load_conf_file: vertica version is 1115
Setting active IP version to 2
Configured daemon 'N192168016100' with IP '192.168.16.100'
Auto-generated virtual ID = '1678813376' for daemon 'N192168016100'
Daemon 'N192168016100' will have virtual ID = '1678813376'
Successfully configured Segment 0 [192.168.16.255]:4803 with 1 procs:
	       N192168016100: 192.168.16.100
Connecting to spread at 4803
Connected to spread on local domain socket /opt/vertica/spread/tmp/4803
FATAL: Unable to bind server on port 5433
07/30/23 18:49:22 SP_connect: connection invalid with code -6 while reading auth_list_len
07/30/23 18:49:22 SP_connect: DEBUG: Auth list is: 'NULL '
07/30/23 18:49:22 SP_connect: connected with private group(0 bytes): #r8420-10#N192168016100; mbox=6, pid=35434
07/30/23 18:49:33 SP_disconnect: mbox=6, pid=35434, send_group=#r8420-10#N192168016100

--查看启动日志
tail -200f  /home/dbadmin/test/v_test_node0001_catalog/startup.log
tail -200f startup.log
{
  "node" : "v_test_node0001",
  "stage" : "Database Halted",
  "text" : "Unable to bind server on port 5433",
  "timestamp" : "2023-07-30 18:42:48.521"
  

Vertica使用操作

标识符:长度为1~128个字节,标识符不区分大小写;

delete禁止加别名

delete from $schema_name.target_object t
where 1=1 and ${condition};

进入vsql环境

[dbadmin@localhost ~]$ vsql -U dbadmin -W test -p 5433
Password: 
Welcome to vsql, the Vertica Analytic Database interactive terminal.

Type:  \h or \? for help with vsql commands
       \g or terminate with semicolon to execute query
       \q to quit

查看帮助

dbadmin=> \h

切换vertica用户,用于创建database

# 切换用户
su - dbadmin

# 进入vertica管理工具
/opt/vertica/bin/admintools

用户和schema

查询用户

select * from v_catalog.users;

查询schema

select * from schemata; 或 \dn

某个schema必须附属于某个用户 (user)查询用户和schema信息

SELECT u.user_name, s.schema_name FROM users u LEFT OUTER JOIN schemata s ON u.user_name = s.schema_owner;

创建用户和schema

--创建一个用户 # username:dev_test password:test create user dev_test identified by 'test'; --基于某个用户创建schema create schema if not exists dev_test authorization dev_test; --重命名schema(备份) alter schema dev_test rename to dev_testdh; --查看schema模式 \dn --删除模式 drop schema dev_test cascade;

赋权

一个schema上的权限赋给另一个用户

GRANT USAGE ON SCHEMA dbname_dw TO dev_test;

把对某个表的操作的权限赋给另一个用户

GRANT ALL ON TABLE tw_re_pm_cell_all_cell_h to dev_test;

从某个用户收回对某个schema的使用权限

revoke all on SCHEMA dbname_dw from dev_test;

从某个用户收回对某个表的使用权限

revoke all on table fct_flux_se_flux_flow_whole_ana_d from dev_test;

序列

查询系统中的序列

select * from sequences;

创建序列

# 简单语法: CREATE SEQUENCE my_seq MAXVALUE 5000 START 1; # 标准语法: CREATE SEQUENCE [[db-name.]schema.]sequence_name ... [ INCREMENT [ BY ] positive_or_negative ] ... [ MINVALUE minvalue | NO MINVALUE ] ... [ MAXVALUE maxvalue | NO MAXVALUE ] ... [ START [ WITH ] start ] ... [ CACHE cache ] ... [ CYCLE | NO CYCLE ]

使用序列

# 一个新创建还没有使用过的序列,必须首先执行NEXTVAL,然后才能执行CURRVAL。 SELECT NEXTVAL('my_seq'); SELECT CURRVAL('my_seq');
  • 在INSERT语句里使用序列

    INSERT INTO customer VALUES (‘Hawkins’ ,‘John’, 072753, NEXTVAL(‘my_seq’));

  • 在INSERT语句里把序列作为默认值:

    CREATE TABLE customer2(ID INTEGER DEFAULT NEXTVAL('my_seq'), lname VARCHAR(25), fname VARCHAR(25), membership_card INTEGER ); => INSERT INTO customer2 VALUES (default,'Carr', 'Mary', 87432);
  • 删除序列

    DROP SEQUENCE seq_name;

Vertica 基本操作语句 | 阿牛的博客 (iogogogo.github.io)

版本查询

vertica=> select version();
              version               
------------------------------------
 Vertica Analytic Database v9.3.1-4
(1 row)

建数据库

命名规范:
数据库名称必须介于 1-30 个字符之间,以字母开头,后面跟着字母(大写和小写)、数字和/或下划线的任意组合。

说明: 数据库名称区分大小写,所以不建议创建只是名称大小写差异的库;

密码策略

数据库超级用户可以使用ALTER 配置文件更改 Vertica 用户的最大密码长度、重用时间、最小位数或所需位数以及其他详细信息。

  • 策略更改

    ALTER PROFILE name LIMIT [ 
        PASSWORD_LIFE_TIME setting
        PASSWORD_MIN_LIFE_TIME setting
        PASSWORD_GRACE_TIME setting
        FAILED_LOGIN_ATTEMPTS setting
        PASSWORD_LOCK_TIME setting
        PASSWORD_REUSE_MAX setting
        PASSWORD_REUSE_TIME setting
        PASSWORD_MAX_LENGTH setting
        PASSWORD_MIN_LENGTH setting
        PASSWORD_MIN_LETTERS setting
        PASSWORD_MIN_UPPERCASE_LETTERS setting
        PASSWORD_MIN_LOWERCASE_LETTERS setting
        PASSWORD_MIN_DIGITS setting
        PASSWORD_MIN_SYMBOLS setting
        PASSWORD_MIN_CHAR_CHANGE setting ]
    
  • 单条密码策略更新

    ALTER PROFILE DEFAULT LIMIT PASSWORD_MIN_SYMBOLS 1;
    

权限管理

角色权限

配置参数指定是否在登录时为所有数据库用户启用所有角色。默认情况下,此参数设置为 0。如果设置为 1,则 Vertica将启用所有用户登录到数据库时的角色。EnableAllRolesOnLogin

vertica预定义的角色有6类,分别如下:

image-20230727131433941

GRANT DBADMIN TO ${user_1}<,${user_2}>WITH ADMIN OPTION;

说明:此处加了 with admin option 可以对将该角色赋予其他用户;

角色删除

drop role ${role_name} <cascade>;

说明:当角色被赋予其他用户时,需要加cascade强制删除;

权限撤回

revoke <admin option for > ${rolename}<,role_2,role_3,..> from ${grantee}  <cascade>;

说明:
1)加 admin option for 时,撤回被授予者给其他用户或角色赋权该角色的权限;
2)此处被撤回权限的角色可以写多个;

启用/禁用角色

---启用该用户单个角色
set role ${rolename};
---启用该用户所有角色
set role all;
---禁用该用户所有角色
set role none;

默认角色

alter user ${username} default ${rolename};
---清楚用户默认会话
alter user ${username} default none;

说明:默认角色在会话开始时默认启用;

用户权限

创建和修改schema

--创建scehma
create schema if not exists ${schemaName} authorization ${userName};
--修改scehma
alter schema ${schemaName} rename to ${schemaNameNew};

对象赋权

--赋权语法
grant  { select| update | all [ privileges ] }
on {schema.object | all tables in schema}
to {username | role | public } [ with grant option];

对象操作

表操作

vertica建表可以不指定segment表达式,默认会按照表的所有列来进行数据分布;这样会出现一个问题,当需要对该表进行DDL操作时,会报错不允许对 segment表达式用到的列进行操作;
解决办法:建表时指定 segment用到的列,可以设置主键为segment,这样其他列就可以正常进行DDL 操作;

--ddl语法 创建表
create table schema_name.object_name
(
  column_1 data_type,
  column_2 data_type,
  ...
  column_n data_type
)
ORDER BY column_x
SEGMENTED BY HASH(column_1,column_2) <ALL NODES|Offset offset| Nodes node1,node2,...noden> KSAFE 1;

--删除表
drop table schemaName.tableName;
--修改属主
alter table schemaName.tableName owner to ${newUser};
--修改表名
alter table schemaName.tableName rename to tableName2;
--删除表约束
alter table schemaName.tableName drop constraint pkName;
--新增表约束
alter table schemaName.tableName add constraint pkName primary key(field1,field2);
--新增表字段
alter table schemaName.tableName add column ${columnName} ${datatype} <default ${defaultVaule}>;
--删除表字段
alter table schemaName.tableName drop column ${columnName};
--更改字段数据类型
alter table test.dim_micro_area_gsm alter column cell_id set data type numeric(15,0); 
--修改字段为非空
alter table test.fct_fournet_wlanap_equp_ana_d alter column day_id set not null;
--修改普通表为分区表
alter table test.fct_fournet_wlanap_equp_ana_d partition by day_id;


说明:这里列只能单个删除;
--修改表字段名
alter table schemaName.tableName rename column ${columnName} to field2;
--设置字段不为空约束
alter table schemaName.tableName alter column ${columnName} set not null;
--删除字段不为空约束
alter table schemaName.tableName alter column ${columnName} drop not null;
--更改字段数据类型
alter table schemaName.tableName alter column ${columnName} set data type ${dataType};

数据库表之间导数据

CONNECT TO VERTICA dbname USER dbadmin PASSWORD 'dbname' ON '192.168.1.1',5433;
export TO VERTICA dbname.test.FCT_TNES_GN_NET_M FROM test.FCT_TNES_GN_NET_M;

查询操作

--子查询需要加别名
select h.col_1,h.col_1,...
from (select a.col_1,a.col_2 from xxxx) h;
--查询优化
数据类型优化:float 调整 为 numeric,有效位数为18位以内;
--查询某个模式下的表
\dt public.*
--查询表对应的projection
SELECT owner_name, anchor_table_name, projection_name
  FROM projections
 WHERE projection_basename = 'DIM_BHJB';
 --查询注释
 1.查询表的列对应的注释
 SELECT t3.anchor_table_name AS Table_name,
       SUBSTR (t1.object_name, INSTR (t1.object_name, '.', 1) + 1) AS Column_name,
       t1.comment AS comment
FROM comments t1, projections t3
 WHERE  SUBSTR (t1.object_name, 1, INSTR (t1.object_name, '.', 1) - 1) =
              t3.projection_name
       AND t1.object_type = 'COLUMN'
ORDER BY t3.anchor_table_name;
--四舍五入、并且保留两位小数
SELECT TRIM (TO_CHAR (ROUND (3.456, 2.0), '999999999999999999.00')),
       TRIM (TO_CHAR (ROUND (3, 2.0), '999999999999999999.00')),
       TRIM (TO_CHAR (ROUND (3.00, 2.0), '999999999999999999.00')),
       TRIM (TO_CHAR (ROUND (323542.101, 2.0), '999999999999999999.00')),
       TRIM (TO_CHAR (ROUND (3.1067, 2.0), '999999999999999999.00'))
--产生随机数
SELECT RANDOM();

数据同步

当前 vertica 的数据同步主要是按照 jdbc 的 copy 接口实现;

函数

常用函数

  • hash_role(u s e r n a m e , username,usernam**e,rolename)
    说明:返回 布尔值,判断用户是否具备某个角色;

  • greatest(null,value_1,value_2)

  • least(null,value_1,value_2)
    说明:以上2个函数,当有空值时,结果为空;需要进行空值判断和转换;

  • row_number() over(partition by column_p order by column_o)
    说明:分析函数的排序列有空值时,空值会被排在第一位,需要进行空值判断和处理;

  • months_between(date_1,date_2) 和 AGE_IN_MONTHS(date_1,date_2)
    说明:AGE_IN_MONTHS函数返回的是整形结果;

  • analyze_statistics(schema_name.table_name, ‘column‑list’ ,col_percent)
    说明:统计信息收集,此处参数2和3可以默认;

  • uuid_generate()
    说明:该函数返回的是带 “-” 的36位随机UUID值,去掉"-"为32位字符;

  • 导出函数
    export_objects
    export_tables

  • projection函数

    SELECT get_projections('sc_ty.hxzg_dj_nsrxx')
    

    说明:该函数可以查询表的投影信息;

    (一)、系统信息函数

    • current_database()
    • current_schema()
    • current_user()
    • dbname()
      说明:获取数据库名称;
    • user()
    • username()
    • session_user()
      说明:获取会话或登录用户名;
    • version()
      说明:获取vertica集群版本

自定义函数

在 vertica 中自定义的 pgsql函数只支持简单的单个表达式类型的函数,复杂函数需要使用java/python写 udf 函数;

系统表/视图

--database
select t.* from databases t
order by t.database_id;
--database_backups
select t.* FROM database_backups t;
--database_snapshots
说明:数据库快照
--keywords
说明:使用场景比较少,查询vertica的关键字;
--nodes
说明:查询 vertica集群的节点信息;
--network_interfaces
说明:查询网卡接口信息

对象相关

  • tables

    select owner_id,
           owner_name,
           table_schema_id      as schema_id,
           table_schema         as schema_name,
           table_id,
           table_name,
           is_temp_table,
           is_system_table,
           create_time,
           table_definition,
           partition_expression,
           storage_mode,
           is_shared
      from tables t
     where 1 = 1
       and schema_name = ''
       and table_name = '';
    
    • views
      说明:系统视图里的 table_name实际是 view_name;

    • view_tables
      说明:系统视图里的 table_name实际是 view_name;可以查询视图引用的物理表;

    • view_columns
      说明:系统视图里的 table_name实际是 view_name;可以查询视图的列信息;

    • all_tables
      说明:该系统表里包含视图的信息,table_type可以区分是表还是视图;

    • columns

    • comments

    • ODBC_COLUMNS
      说明:查询对象列信息;

    • projection_columns
      说明:查询对象列统计附加信息

    • sequences
      说明:查询库中的序列信息;

    • projections

      select owner_id,
             owner_name,
             projection_schema_id         as schema_id,
             projection_schema            as schema_name,
             projection_id,
             projection_name,
             projection_basename,
             anchor_table_id,
             anchor_table_name,
             node_id,
             node_name,
             create_type,
             has_statistics,
             is_segmented,
             segment_expression,
             segment_range,
             is_super_projection,
             is_key_constraint_projection,
             has_expressions,
             is_aggregate_projection,
             partition_range_min,
             partition_range_max
        from v_catalog.projections o;
      

      说明:该系统表或视图可以看到每个对象的 segment 表达式列;

      • projection_storage

        ---query_sql
        select t.node_name,
               t.projection_schema,
               t.projection_name,
               t.projection_column_count,
               row_count,
               used_bytes,
               anchor_table_schema,
               anchor_table_name
          from v_monitor.projection_storage t
         where 1 = 1
           and t.anchor_table_schema = 'DZFP_DZDZ'
           and t.anchor_table_name = 'DZDZ_FJXX_DZZP';
        

        说明:查询对象的投影数据存储占用;

        • table_constraints
          说明:查询表的约束信息;
        • PRIMARY_KEYS
          说明:查询表的主键列信息;
        • constraint_columns
          说明:查询表的约束列信息;
        • user_procedures
          说明:vsql存过只能写简单计算的函数;
        • user_functions
        • system_tables
          说明:列出了库中的系统表;
        • system_columns
          说明:列出了库中的系统表的列信息;

会话相关

  • user_sessions

    select node_name,
           user_name,
           session_id,
           transaction_id,
           statement_id,
           session_start_timestamp,
           session_end_timestamp,
           is_active,
           client_hostname,
           client_pid,
           client_label,
           client_type,
           client_version,
           client_os,
           client_os_user_name
      from user_sessions s;
    
    • sessions
      说明:查询集群内各个节点每个用户下会话信息;

用户相关

--users
select u.user_id,
       u.user_name,
       profile_name,
       u.is_super_user,
       u.is_locked,
       u.lock_time,
       u.memory_cap_kb,
       u.temp_space_cap_kb,
       max_connections,
       idle_session_timeout,
       all_roles,
       default_roles,
       search_path
  from users u
 order by u.user_id;  说明:users里可以查询到用户的默认配置文件名称;

--roles
select * from roles;

  • schemata
    说明:查询 vertica 中的 schema信息;

权限相关

select grantor_id,
       grantor,
       privileges_description,
       object_schema,
       object_name,
       object_type,
       grantee_id,
       grantee
  from grants t;

配置相关

  • profiles
    说明:查询配置文件列表;
  • profile_parameters
    说明:查询配置文件参数信息;

统计信息

Vertica 有三种方式可以手动收集统计信息:
1)ANALYZE ROW COUNT:它是一种轻量级的自动的默认每 60 秒收集一次 projection 行数以及加载数据的最小化统计信息和行数。默认的收集间隔可以有参AnalyzeRowCountInterval
控制,也可以执行 DO_TM_TASK (‘analyze_row_count’)过程进行手动收集。

2)ANALYZE_STATISTICS:它收集数据库、表或者列上完整的统计信息,有以下特点:

  • 允许对表进行基于列的统计信息分析,以提升性能。
  • 进行快速采样,加速包含大量列的小表的分析
  • 包含 WOS 中的数据
  • 重组删除数据,而不是忽略删除标记
  • 允许你通过 CTRL-C 或者 INTERRUPT_STATEMENT()取消正在执行的收集过程
  • 记录最近的统计信息收集时间,以便后续收集过程能够得到优化

3)ANALYZE_HISTOGRAM:事实上 ANALYZE_STATISTICS()是 ANALYZE_HISTOGRAM
别名,它们主要的不同之处是 ANALYZE_HISTOGRAM 允许指定从磁盘读取数据的百分比,由此可以获得更多的采样精度和速度的控制。默认的采样百分比是 10%,可以指定 1~100%的值,另外也可以指定 smaller 或者 larger 百分比,指定了百分比参数之后统计信息的精度和收集速度都会受到影响。

select ANALYZE_STATISTICS('szc_sj_ggzt.hxzg_sb_sbb');
  • 删除统计信息

    select drop_statistics('szc_sj_ggzt.hxzg_dj_nsrxx');
    

参考链接

(189条消息) Vertica—操作汇总_vertica中文文档_蓝魔Y的博客-CSDN博客

Vertica 基本操作语句 | 阿牛的博客 (iogogogo.github.io)

Vertica性能优化

执行计划

此处内容待补充;

Vertica运维监控

---关闭指定会话
select close_session('session_id');
---关闭当前用户会话
select close_all_sessions();
---关闭指定用户会话
select close_user_sessions('username');

Vertica常见问题

1.数据库的后台进程被 kill

一般情况下 Vertica 有多个后台进程 agent.sh、 simply_fast.py、 spread、 vertica、 vertica-udx-zygote,
除了 vertica-udx-zygote 以外 kill 其它进程会导致本节点的数据库 crash。

--正常启动下
[dbadmin@localhost ~]$ ps -ef | grep vertica
dbadmin    5936      1  0 09:15 ?        00:00:00 /bin/bash /opt/vertica/agent/agent.sh /opt/vertica/config/users/dbadmin/agent.conf
dbadmin    5944   5936  0 09:15 ?        00:00:02 /opt/vertica/oss/python3/bin/python3 ./simply_fast.py
dbadmin   28122      1  0 10:42 ?        00:00:00 /opt/vertica/bin/rsync --daemon --config=/tmp/vbr_rsyncd/vbr_rsyncd.conf --port=50000
dbadmin   29199      1  0 10:48 pts/6    00:00:00 /opt/vertica/spread/sbin/spread -c /home/dbadmin/test/v_test_node0001_catalog/spread.conf -D /opt/vertica/spread/tmp
dbadmin   29201      1 28 10:48 ?        00:00:26 /opt/vertica/bin/vertica -D /home/dbadmin/test/v_test_node0001_catalog -C test -n v_test_node0001 -h 192.168.16.100 -p 5433 -P 4803 -Y ipv4
dbadmin   29212  29201  0 10:48 ?        00:00:00 /opt/vertica/bin/vertica-udx-zygote 11 9 29201 debug-log-off /home/dbadmin/test/v_test_node0001_catalog/UDxLogs 60 12 0
dbadmin   30921  30889  0 10:50 pts/7    00:00:00 grep --color=auto vertica
---kill 掉某些后台进程
[dbadmin@V3 ~]$ kill -9 6272
#监控 vertica 数据库的状态
[dbadmin@localhost ~]$ kill 5936
[dbadmin@localhost ~]$ ps -ef | grep vertica
dbadmin   28122      1  0 10:42 ?        00:00:00 /opt/vertica/bin/rsync --daemon --config=/tmp/vbr_rsyncd/vbr_rsyncd.conf --port=50000
dbadmin   29199      1  0 10:48 pts/6    00:00:00 /opt/vertica/spread/sbin/spread -c /home/dbadmin/test/v_test_node0001_catalog/spread.conf -D /opt/vertica/spread/tmp
dbadmin   29201      1 17 10:48 ?        00:00:26 /opt/vertica/bin/vertica -D /home/dbadmin/test/v_test_node0001_catalog -C test -n v_test_node0001 -h 192.168.16.100 -p 5433 -P 4803 -Y ipv4
dbadmin   29212  29201  0 10:48 ?        00:00:00 /opt/vertica/bin/vertica-udx-zygote 11 9 29201 debug-log-off /home/dbadmin/test/v_test_node0001_catalog/UDxLogs 60 12 0
dbadmin   31160  30889  0 10:51 pts/7    00:00:00 grep --color=auto vertica
[dbadmin@localhost ~]$ admintools -t view_cluster
 DB      | Host | State 
---------+------+-------
 test    | ALL  | UP    
 topszdp | ALL  | DOWN
#通过以下 sql 语句可以看到 vertica 的恢复状态  ,未实验出来
select node_name, recover_epoch, recovery_phase, current_completed, is_running from recovery_status;
select node_name, status , progress from projection_recoveries;

2 数据文件被删除

删除 vertica 数据库文件, vertica 实例很快就会 down 掉,此时节点可能无法再次启动, 如果删除 catalog
文件再启动则节点自动重建,或者可以使用-F 强制节点启动,此时节点需要从正常接 recover 直到正常。

2.1 删除 1 个节点数据文件

--删除数据文件
[dbadmin@localhost dhh]$ ls -l
total 24
-rw-r--r--.  1 dbadmin verticadba 12419 Jul 30 14:42 dbLog
-rw-r--r--.  1 dbadmin verticadba     5 Jul 30 14:40 port.dat
drwx------.  2 dbadmin verticadba     6 Jul 30 14:40 procedures
drwx------.  9 dbadmin verticadba  4096 Jul 30 14:41 v_dhh_node0001_catalog
drwx------. 18 dbadmin verticadba   182 Jul 30 14:42 v_dhh_node0001_data
[dbadmin@localhost dhh]$ mv v_dhh_node0001_data/ /tmp
[dbadmin@localhost dhh]$ ls -l
total 24
-rw-r--r--. 1 dbadmin verticadba 12419 Jul 30 14:42 dbLog
-rw-r--r--. 1 dbadmin verticadba     5 Jul 30 14:40 port.dat
drwx------. 2 dbadmin verticadba     6 Jul 30 14:40 procedures
drwx------. 9 dbadmin verticadba  4096 Jul 30 14:41 v_dhh_node0001_catalog
--启动数据报错
删除节点的 data 文件后直接重启节点失败
admintools -t stop_db -d dhh -p vertica

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论