目录
一、实验
1.环境
2.Linux 部署 GaussDB
3.Linux 使用 GaussDB
4.使用 GaussDB 进行表与索引操作
5.使用 GaussDB 进行视图操作
6.使用 GaussDB 进行联表查询
7.使用 GaussDB 进行外键关联
二、问题
1.运行python脚本报错
2. 安装GaussDB 报错
3. install 安装有哪些参数
4. GaussDB有哪些服务状态
5. netstat 服务状态
6.查询表字段报错
7.添加外键报错
一、实验
1.环境
(1)主机
表1 主机
主机 | 软件 | 版本 | IP | 备注 |
gaussdb | GaussDB | 100 | 192.168.204.80 |
(2)安全机制
查看
[root@localhost ~]# sestatus
关闭
[root@localhost ~]# vim /etc/selinux/config
……
SELINUX=disabled
……
再次查看(需要reboot重启)
[root@localhost ~]# sestatus
(3)防火墙
关闭
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl mask firewalld
(4)修改主机名
[root@localhost opt]# hostnamectl set-hostname gaussdb
[root@localhost opt]# bash
(5)查看IP地址
[root@gaussdb ~]# ip addr
(6)清空iptables规则
[root@gaussdb ~]# iptables -F
[root@gaussdb ~]# iptables -nL
2.Linux 部署 GaussDB
(1)查阅
1)官方文档下载
https://support.huaweicloud.com/download_gaussdb/index.html
2)社区
https://opengauss.org/zh/
(2) 更改内核参数
[root@gaussdb ~]# vim /etc/sysctl.conf
修改前:
修改后:
#内核参数用于控制整个 Linux 系统中信号集的最大数量
kernel.sem = 50100 128256000 50100 2560
#每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.netdev_max_backlog = 1000
#这个参数标示TCP三次握手建立阶段接受SYN请求队列的最大长度,默认为1024,将其设置得大一些可以使出现Nginx繁忙来不及accept新连接的情况时,Linux不至于丢失客户端发起的连接请求
net.ipv4.tcp_max_syn_backlog = 2048
#控制 Linux 内核将核心转储文件写到磁盘的哪里
kernel.core_pattern = /corefile/core.%p.%e
#控制core文件的文件名中是否添加pid作为扩展名。文件内容为1,表示添加pid作为扩展名,为0则表示不添加
kernel.core_uses_pid = 1
#系统范围内共享内存段的最大数量 (Minimum size of shared memory segment (bytes))
kernel.shmmni = 4096
#允许系统打开的端口范围
net.ipv4.ip_local_port_range = 9000 65500
#这个参数表示内核套接字接受缓存区默认的大小,默认值比较小,网络服务器需要调高
net.core.rmem_default = 262144
# 这个参数表示内核套接字发送缓存区默认的大小,默认值比较小,网络服务器需要调高
net.core.wmem_default = 262144
# 这个参数表示内核套接字接受缓存区的最大大小,网络服务器需要调高
net.core.rmem_max = 4194304
#这个参数表示内核套接字发送缓存区的最大大小,网络服务器需要调高
net.core.wmem_max = 1048576
#所允许的并发请求的最大个数。最大个数通常是 64KB(用来对异步 I/O 的性能进行优化)
fs.aio-max-nr = 1048576
#这个参数表示进程(比如一个worker进程)可以同时打开的最大句柄数,这个参数直线限制最大并发连接数,需根据实际情况配置。
fs.file-max = 6815744
刷新内核参数
[root@gaussdb ~]# sysctl -p
(3)创建组与用户
[root@gaussdb ~]# groupadd -g 1000 dbgrp
[root@gaussdb ~]# useradd -u 1100 -g dbgrp -d /home/omm -s /bin/bash omm
[root@gaussdb ~]# id omm
uid=1100(omm) gid=1000(dbgrp) 组=1000(dbgrp)
(4)更改用户密码
[root@gaussdb ~]# echo 123456 | passwd --stdin omm
(5)创建目录
[root@gaussdb ~]# mkdir -p /usr/local/gaussdb/{app,data,logs}
(6)更改属组
[root@gaussdb ~]# chown -R omm.dbgrp /usr/local/gaussdb/
(7)查看目录
[root@gaussdb ~]# tree /usr/local/gaussdb/
(8)解压安装包
[root@gaussdb ~]# tar xf GaussDB_100_1.0.1-DATABASE-REDHAT-64bit.tar.gz
查看
[root@gaussdb ~]# cd GaussDB_100_1.0.1-DATABASE-REDHAT-64bit/
[root@gaussdb GaussDB_100_1.0.1-DATABASE-REDHAT-64bit]# ls
(9)修改脚本
[root@gaussdb GaussDB_100_1.0.1-DATABASE-REDHAT-64bit]# vim +572 install.py
修改前:
修改后:(572-573注释 或 -1改为 -2)
572 if self.run_pkg_name.find(distname.upper().replace("OS", "")) == -2:
573 logExit("Run package %s.tar.gz is inconsistent with os system %s." % (self.run_pkg_name, distna me))
(10)安装脚本
python install.py \
-U omm:dbgrp \
-R /usr/local/gaussdb/app/ \
-D /usr/local/gaussdb/data/ \
-C LSNR_ADDR=127.0.0.1,192.168.204.80 \
-C LSNR_PORT=1888 \
-C DATA_BUFFER_SIZE=500M \
-C SHARED_POOL_SIZE=150M \
-C TEMP_BUFFER_SIZE=150M
成功:
Checking runner.
Checking parameters.
End check parameters.
Checking user.
End check user.
Checking old install.
End check old install.
Checking kernel parameters.
Checking directory.
Checking integrality of run file...
Decompressing run file.
Setting user env.
Checking data dir and config file
Initialize db instance.
Creating database.
Creating database succeed.
Changing file permission due to security audit.
Install successfully, for more detail information see /home/omm/zengineinstall.log.
(11)监听网络
多了zengine 服务
[root@gaussdb ~]# netstat -antpu
(12)切换用户
[root@gaussdb ~]# su - omm
[omm@gaussdb ~]$ vim .bashrc
(13)查看目录
[omm@gaussdb ~]$ ls /usr/local/gaussdb/
app data logs
[omm@gaussdb ~]$ ls /usr/local/gaussdb/app/
add-ons admin bin lib package.xml
[omm@gaussdb ~]$ ls /usr/local/gaussdb/data/
archive_log cfg data dbs log protect trc zengine.lck
(14)登录数据库
输入y
[omm@gaussdb ~]$ zsql sys/Changeme_123@127.0.0.1:1888
Warning: SSL connection to server without CA certificate is insecure. Continue anyway? (y/n):y
connected.
SQL> exit
免密登录
[omm@gaussdb ~]$ zsql sys/Changeme_123@127.0.0.1:1888 -q
connected.
SQL> exit
(15)修改密码
SQL> ALTER USER SYS IDENTIFIED BY 'Admin@123';
(16)查看数据库
SQL> SELECT DBID,NAME,STATUS,OPEN_STATUS FROM dv_database;
查看版本
SQL> SELECT * FROM dv_version;
3.Linux 使用 GaussDB
(1)查看命令脚本
[omm@gaussdb ~]$ ls /usr/local/gaussdb/app/bin/
Common.py GaussLog.py shutdowndb.sh sql_process.py uninstall.py zctl.py zencrypt zengine zsql
(2)安装依赖包 (root用户)
[root@gaussdb ~]# yum -y install lsof
(3)查看状态
[root@gaussdb ~]# su - omm
[omm@gaussdb ~]$ zctl.py -t status
(4)关闭服务
[omm@gaussdb ~]$ zctl.py -t stop
Successfully stopped instance.
[omm@gaussdb ~]$ zctl.py -t status
Zengine instance has not started.
[root@gaussdb ~]# cd /usr/local/gaussdb/app/admin/scripts
[root@gaussdb scripts]# vim create_database.sample.sql
(5)启动服务
[omm@gaussdb ~]$ zctl.py -t start
Successfully started instance.
[omm@gaussdb ~]$ zctl.py -t status
Current instance STATUS OPEN
(6)切换状态
NOMOUNT状态
[omm@gaussdb ~]$ zctl.py -t stop
Successfully stopped instance.
[omm@gaussdb ~]$ zctl.py -t start -m nomount
Successfully started instance.
[omm@gaussdb ~]$ zctl.py -t status
Do zctl failed: Failed to get status, maybe it's NOMOUNT.
MOUNT状态
[omm@gaussdb ~]$ zctl.py -t stop
Successfully stopped instance.
[omm@gaussdb ~]$ zctl.py -t start -m mount
Successfully started instance.
[omm@gaussdb ~]$ zctl.py -t status
Current instance STATUS MOUNT
(7)切回默认状态
[omm@gaussdb ~]$ zctl.py -t stop
Successfully stopped instance.
[omm@gaussdb ~]$ zctl.py -t start
Successfully started instance.
[omm@gaussdb ~]$ zctl.py -t status
Current instance STATUS OPEN
观察网络变化 (在TCP四次挥手时,主动关闭端发送了ACK包之后,进入TIME_WAIT状态,等待最多MSL时间,让被动关闭端收到ACK包。)
观察网络变化 (30秒-1分钟)
(8)查看库文件 (root用户)
[root@gaussdb ~]# ls /usr/local/gaussdb/app/admin/scripts
add_standby_log.sample.sql initdb.sql initview.sql readme.md upgrade
create_database.sample.sql initplsql.sql initwsr.sql sql_dialect
创建数据库
(9)连接数据库
[omm@gaussdb ~]$ zsql sys/Admin@123@127.0.0.1:1888 -q
connected.
SQL>
(10)创建与删除用户
SQL> CREATE USER david IDENTIFIED BY 'Admin@123';
Succeed.
SQL> GRANT DBA TO DAVID;
Succeed.
SQL> DROP USER DAVID;
Succeed.
(11)查看用户信息
SQL> SELECT * FROM DB_USERS;
USER_ID USERNAME CREATED CRYPTOPERIOD
------------ ---------------------------------------------------------------- ---------------------- ------------------------
0 SYS 2024-03-18 12:31:29 +0000179 23:04:23.655845
1 PUBLIC 2024-03-18 12:31:29 +0000179 22:38:29.319123
2 rows fetched.
再次创建查看
SQL> CREATE USER david IDENTIFIED BY 'Admin@123';
Succeed.
SQL> SELECT * FROM DB_USERS;
USER_ID USERNAME CREATED CRYPTOPERIOD
------------ ---------------------------------------------------------------- ---------------------- ------------------------
0 SYS 2024-03-18 12:31:29 +0000179 23:02:48.336284
1 PUBLIC 2024-03-18 12:31:29 +0000179 22:36:53.999562
2 DAVID 2024-03-18 13:54:15 +0000179 23:59:39.974081
3 rows fetched.
查看所有用户
SQL> SELECT * FROM all_users;
USER_ID USERNAME CREATED CRYPTOPERIOD
------------ ---------------------------------------------------------------- ---------------------- ------------------------
0 SYS 2024-03-18 12:31:29 +0000179 22:55:39.756470
1 PUBLIC 2024-03-18 12:31:29 +0000179 22:29:45.419748
2 DAVID 2024-03-18 13:54:15 +0000179 23:52:31.394267
3 rows fetched.
(12)查看表
SQL> SELECT * FROM user_tables;
最后一行显示86个
查看系统所有表 (一共86行)
SQL> SELECT * FROM all_tables;
查看管理员表(一共86行)
SQL> SELECT * FROM dba_tables;
(13)创建表
SQL> CREATE TABLE DEVOPS(
2 id INT,
3 name CHAR(20)
4 );
Succeed.
查看表
SQL> SELECT * FROM USER_TABLES WHERE TABLE_NAME='DEVOPS';
查看表字段
SQL> DESC DEVOPS;
Name Null? Type
----------------------------------- -------- ------------------------------------
ID BINARY_INTEGER
NAME CHAR(20 BYTE)
(14)修改表
添加字段
SQL> ALTER TABLE DEVOPS ADD age INT;
查看表字段
SQL> DESC DEVOPS;
修改字段类型
SQL> ALTER TABLE DEVOPS MODIFY AGE TINYINT;
(15)修改字段名
SQL> ALTER TABLE DEVOPS RENAME COLUMN NAME TO USER_NAME;
查看
(16)删除字段
SQL> ALTER TABLE DEVOPS DROP AGE;
查看
(17)修改表名
SQL> ALTER TABLE DEVOPS RENAME TO CICD;
查看
(18)删除表
SQL> DROP TABLE CICD;
4.使用 GaussDB 进行表与索引操作
(1) 创建表
SQL> CREATE TABLE USERS(
2 ID INT NOT NULL DEFAULT 0,
3 NAME CHAR(200) NOT NULL DEFAULT ''
4 );
(2)查看表字段
SQL> DESC USERS;
Name Null? Type
----------------------------------- -------- ------------------------------------
ID NOT NULL BINARY_INTEGER
NAME NOT NULL CHAR(200 BYTE)
(3)字段插入记录
单个记录插入
SQL> INSERT INTO USERS VALUES (1,'JACK');
SQL> INSERT INTO USERS VALUES (2,'TOM');
多个记录连续插入
SQL> INSERT INTO USERS(ID,NAME) VALUES
2 (3,'HELEN'),(4,'JOHN');
查看
SQL> SELECT * FROM users;
ID NAME
------------ ----------------------------------------------------------------
1 JACK
2 TOM
3 HELEN
4 JOHN
4 rows fetched.
(4)修改数据
SQL> UPDATE USERS SET NAME='TONY' WHERE ID=2;
查看
(5)清空表
SQL> DELETE FROM USERS;
查看
(6)创建索引
SQL> CREATE INDEX name ON USERS(NAME);
查看
SQL> SELECT OWNER,INDEX_NAME,TABLE_NAME FROM all_indexes WHERE TABLE_NAME='USERS';
(7)查看索引
SQL> SELECT * FROM ALL_IND_COLUMNS WHERE TABLE_NAME='USERS';
(8)删除索引
SQL> DROP INDEX NAME;
5.使用 GaussDB 进行视图操作
(1)创建表
SQL> CREATE TABLE userinfo(
2 ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
3 NAME CHAR(200),
4 TEL CHAR(11),
5 CARD_ID CHAR(18)
6 );
查看
(2)插入数据
SQL> INSERT INTO USERINFO(NAME,TEL,CARD_ID)
2 VALUES
3 ('jack','11111111111','0001'),
4 ('tom','22222222222','0002'),
5 ('helen','33333333333','0003');
查看
(3)测试
截取
SQL> SELECT SUBSTR('ABCDEFG',3,3);
替换
SQL> SELECT REPLACE('abcdefaaa','a','A');
(4)隐藏信息
SQL> SELECT
2 NAME,
3 REPLACE(CARD_ID,SUBSTR(CARD_ID,4,1),'*')
4 FROM USERINFO;
(5)创建视图
SQL> CREATE VIEW EN_USERINFO
2 AS
3 SELECT
4 NAME,
5 REPLACE(CARD_ID,SUBSTR(CARD_ID,4,1),'*')
6 FROM USERINFO;
(6)查看视图
SQL> SELECT * FROM EN_USERINFO;
(7)删除视图
SQL> drop VIEW EN_USERINFO;
6.使用 GaussDB 进行联表查询
(1)创建表
表一
SQL> CREATE TABLE DEPTS(
2 ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
3 NAME CHAR(200)
4 );
表二
SQL> CREATE TABLE EMPS(
2 ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
3 NAME CHAR(200),
4 DEPT_ID INT NOT NULL
5 );
(2)查看
SQL> DESC DEPTS;DESC EMPS;
Name Null? Type
----------------------------------- -------- ------------------------------------
ID NOT NULL BINARY_INTEGER
NAME CHAR(200 BYTE)
Name Null? Type
----------------------------------- -------- ------------------------------------
ID NOT NULL BINARY_INTEGER
NAME CHAR(200 BYTE)
DEPT_ID NOT NULL BINARY_INTEGER
(3)插入数据
SQL> INSERT INTO DEPTS(NAME) VALUES ('DEV'),('NETWORK'),('IT');
额外创建一个不存在的4号部门员工
SQL> INSERT INTO EMPS(NAME,DEPT_ID) VALUES
2 ('jasmine',1),('machael',2),('simon',3),('hulk',4);
(4)查看表
(5)内连接
SQL> SELECT * FROM EMPS
2 INNER JOIN DEPTS
3 ON EMPS.DEPT_ID=DEPTS.ID;
ID NAME DEPT_ID ID NAME
------------ ---------------------------------------------------------------- ------------ ------------ ----------------------------------------------------------------
1 jasmine 1 1 DEV
2 machael 2 2 NETWORK
3 simon 3 3 IT
SQL> SELECT EMPS.NAME,DEPTS.NAME FROM EMPS
2 INNER JOIN DEPTS
3 ON DEPTS.ID=EMPS.DEPT_ID;
NAME NAME
---------------------------------------------------------------- ----------------------------------------------------------------
jasmine DEV
machael NETWORK
simon IT
3 rows fetched.
(6)外连接
左外连接
SQL> SELECT * FROM EMPS
2 LEFT OUTER JOIN DEPTS
3 ON EMPS.DEPT_ID=DEPTS.ID;
ID NAME DEPT_ID ID NAME
------------ ---------------------------------------------------------------- ------------ ------------ ----------------------------------------------------------------
1 jasmine 1 1 DEV
2 machael 2 2 NETWORK
3 simon 3 3 IT
4 hulk 4
4 rows fetched.
右外连接
SQL> SELECT * FROM EMPS
2 RIGHT OUTER JOIN DEPTS
3 ON EMPS.DEPT_ID=DEPTS.ID;
ID NAME DEPT_ID ID NAME
------------ ---------------------------------------------------------------- ------------ ------------ ----------------------------------------------------------------
1 jasmine 1 1 DEV
2 machael 2 2 NETWORK
3 simon 3 3 IT
3 rows fetched.
全外连接
SQL> SELECT * FROM EMPS
2 FULL OUTER JOIN DEPTS
3 ON EMPS.DEPT_ID=DEPTS.ID;
ID NAME DEPT_ID ID NAME
------------ ---------------------------------------------------------------- ------------ ------------ ----------------------------------------------------------------
1 jasmine 1 1 DEV
2 machael 2 2 NETWORK
3 simon 3 3 IT
4 hulk 4
4 rows fetched.
7.使用 GaussDB 进行外键关联
(1)查看
SQL> DELETE FROM EMPS WHERE ID=4;
SQL> SELECT * FROM EMPS;
(2)添加外键
级联删除
SQL> ALTER TABLE EMPS ADD CONSTRAINT DID FOREIGN KEY(DEPT_ID) REFERENCES DEPTS(ID) ON DELETE CASCADE;
(3)创建表时指定外键
SQL> CREATE TABLE EMPLOYESS(
2 ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
3 NAME CHAR(20),
4 DEPT_ID INT NOT NULL,
5 FOREIGN KEY (DEPT_ID) REFERENCES DEPTS(ID) ON DELETE CASCADE);
二、问题
1.运行python脚本报错
(1)报错
在执行python install安装数据库时,安装中止
Error: Run package GaussDB_100_1.0.1-RUN-REDHAT-64bit.tar.gz is inconsistent with os system centos.
Please refer to install log "/home/omm/zengineinstall.log" for more detailed information.
(2)原因分析
在安装执行check时,发现操作系统与安装包内预置check的结果不一致。
(3)解决方法
[root@gaussdb GaussDB_100_1.0.1-DATABASE-REDHAT-64bit]# vim +572 install.py
修改前:
修改后:(572-573注释 或 -1改为 -2)
572 if self.run_pkg_name.find(distname.upper().replace("OS", "")) == -2:
573 logExit("Run package %s.tar.gz is inconsistent with os system %s." % (self.run_pkg_name, distna me))
成功:
2. 安装GaussDB 报错
(1)报错
Error: Can not read user profile: [Errno 2] No such file or directory: '/home/omm/.bashrc'
(2)原因分析
缺少目录启动配置文件。
(3)解决方法
创建文件
vim /home/omm/.bashrc
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
成功:
3. install 安装有哪些参数
(1)参数
1)指定安装用户和用户组
-U
2)指定安装目录
-R
3)指定数据文件目录,即GAUSSDATA目录
-D
4)指定配置参数,可以指定多个。如果不指定,则按照/opt/gaussdb/data/cfg/zengine.ini 中的默认配置项。
-C
5)在安装时,如果禁用免密登录,则需要在命令行最后指定此选项。命令执行过程中,会提示输入连接数据库的用户名和密码,用户名时SYS,密码是SYS用户的初始密码Changeme_123。如果开启免密登录则不许套指定本选项。
-P
4. GaussDB有哪些服务状态
(1)状态
1)关闭
CLOSED
2)读取初始化参数文件,分配SGA并打开后台进程
NOMOUNT
3)加载数据库,根据初始化参数文件,读取控制文件信息
MOUNT
4)根据控制文件打开所有的数据文件和Redo日志,数据库可以进行访问
OPEN
5. netstat 服务状态
(1)状态
1)netstat中的各种状态
CLOSED 初始(无连接)状态。
LISTEN 侦听状态,等待远程机器的连接请求。
SYN_SEND 在TCP三次握手期间,主动连接端发送了SYN包后,进入SYN_SEND状态,等待对方的ACK包。
SYN_RECV 在TCP三次握手期间,主动连接端收到SYN包后,进入SYN_RECV状态。
ESTABLISHED 完成TCP三次握手后,主动连接端进入ESTABLISHED状态。此时,TCP连接已经建立,可以进行通信。
FIN_WAIT_1 在TCP四次挥手时,主动关闭端发送FIN包后,进入FIN_WAIT_1状态。
FIN_WAIT_2 在TCP四次挥手时,主动关闭端收到ACK包后,进入FIN_WAIT_2状态。
TIME_WAIT 在TCP四次挥手时,主动关闭端发送了ACK包之后,进入TIME_WAIT状态,等待最多MSL时间,让被动关闭端收到ACK包。
CLOSING 在TCP四次挥手期间,主动关闭端发送了FIN包后,没有收到对应的ACK包,却收到对方的FIN包,此时,进入CLOSING状态。
CLOSE_WAIT 在TCP四次挥手期间,被动关闭端收到FIN包后,进入CLOSE_WAIT状态。
LAST_ACK 在TCP四次挥手时,被动关闭端发送FIN包后,进入LAST_ACK状态,等待对方的ACK包。
2)分类
主动连接端可能的状态有:
CLOSED SYN_SEND ESTABLISHED。
主动关闭端可能的状态有:
FIN_WAIT_1 FIN_WAIT_2 TIME_WAIT。
被动连接端可能的状态有:
LISTEN SYN_RECV ESTABLISHED。
被动关闭端可能的状态有:
CLOSE_WAIT LAST_ACK CLOSED。
6.查询表字段报错
(1)报错
GS-00601, [1:1]Sql syntax error: key word expected
(2)原因分析
语法错误。
(3)解决方法
SQL> DESC DEVOPS;
7.添加外键报错
(1)报错
GS-00601, Sql syntax error: CASCADE/SET NULL expected but CASCADES found.
(2)原因分析
语法错误。
(3)解决方法
SQL> ALTER TABLE EMPS ADD CONSTRAINT DID FOREIGN KEY(DEPT_ID) REFERENCES DEPTS(ID) ON DELETE CASCADE;