ubuntu利用docker安装opengauss数据库及测试

ubuntu利用docker安装opengauss数据库及测试

Posted by MZ on September 30, 2023

ubuntu利用docker安装opengauss数据库及测试

一、安装

docker安装

sudo apt install docker.io

拉取openguass镜像

sudo docker pull enmotech/opengauss

创建容器

docker run --name opengauss \ 
-p 5432:5432 \ 
-v /home/docker:/var/lib/opengauss/data \
-e GS_NODENAME=gaussdb \
-e GS_USERNAME=gaussdb \
-e GS_PASSWORD=Enmo@123 \
--privileged=true \
--restart=always \
-d enmotech/opengauss:latest 

密码组合一定是大写字母、小写字母、特殊符号、数字都包含的,密码不对,容器能创建成功,但是没法开启。

连接数据库 ,切换到omm用户 ,用gsql连接到数据库

sudo docker exec -it opengauss bash –进入docker
su - omm --切换为omm用户
gsql  --启动opengauss

然后可以输入sql语句建库建表啦。

二、建库建表测试

1.建立flow_meter库

首先进入到gsql操作界面新建表空间:

CREATE TABLESPACE tpcds_local RELATIVE LOCATION 'tablespace/tablespace_1' ;

然后创建一个新的数据库

CREATE DATABASE flow_meter WITH TABLESPACE = tpcds_local;

可以查看数据库:

\l

2.建表语句

因为4张表内容相同,所以这里只定义一张示例表。到时候换一个表名即可。

CREATE TABLE examples (
            src_ip  VARCHAR(15) NOT NULL,
            dst_ip  VARCHAR(15) NOT NULL,
            src_port INTEGER NOT NULL,  
            dst_port INTEGER NOT NULL,  
            protocol TINYINT NOT NULL,
            timestamp TIMESTAMP,
            flow_duration INTEGER,
            flow_byts_s BINARY_DOUBLE,
            flow_pkts_s BINARY_DOUBLE,
            fwd_pkts_s BINARY_DOUBLE,
            bwd_pkts_s BINARY_DOUBLE,
            tot_fwd_pkts INTEGER,
            tot_bwd_pkts INTEGER,
            totlen_fwd_pkts INTEGER,
            totlen_bwd_pkts INTEGER,
            fwd_pkt_len_max INTEGER,
            fwd_pkt_len_min INTEGER,
            fwd_pkt_len_mean BINARY_DOUBLE,
            fwd_pkt_len_std BINARY_DOUBLE,
            bwd_pkt_len_max INTEGER,
            bwd_pkt_len_min INTEGER,
            bwd_pkt_len_mean BINARY_DOUBLE,
            bwd_pkt_len_std BINARY_DOUBLE,
            pkt_len_max INTEGER,
            pkt_len_min INTEGER,
            pkt_len_mean BINARY_DOUBLE,
            pkt_len_std BINARY_DOUBLE,
            pkt_len_var BINARY_DOUBLE,
            fwd_header_len INTEGER,
            bwd_header_len INTEGER,
            fwd_seg_size_min INTEGER,
            fwd_act_data_pkts INTEGER,
            flow_iat_mean BINARY_DOUBLE,
            flow_iat_max INTEGER,
            flow_iat_min INTEGER,
            flow_iat_std BINARY_DOUBLE,
            fwd_iat_tot INTEGER,
            fwd_iat_max INTEGER,
            fwd_iat_min INTEGER,
            fwd_iat_mean BINARY_DOUBLE,
            fwd_iat_std BINARY_DOUBLE,
            bwd_iat_tot INTEGER,
            bwd_iat_max INTEGER,
            bwd_iat_min INTEGER,
            bwd_iat_mean BINARY_DOUBLE,
            bwd_iat_std BINARY_DOUBLE,
            fwd_psh_flags INTEGER,
            bwd_psh_flags INTEGER,
            fwd_urg_flags INTEGER,
            bwd_urg_flags INTEGER,
            fin_flag_cnt INTEGER,
            syn_flag_cnt INTEGER,
            rst_flag_cnt INTEGER,
            psh_flag_cnt INTEGER,
            ack_flag_cnt INTEGER,
            urg_flag_cnt INTEGER,
            ece_flag_cnt INTEGER,
            down_up_ratio FLOAT4,
            pkt_size_avg FLOAT4,
            init_fwd_win_byts INTEGER,
            init_bwd_win_byts INTEGER,
            active_max INTEGER,
            active_min INTEGER,
            active_mean BINARY_DOUBLE,
            active_std BINARY_DOUBLE,
            idle_max INTEGER,
            idle_min INTEGER,
            idle_mean BINARY_DOUBLE,
            idle_std BINARY_DOUBLE,
            fwd_byts_b_avg BINARY_DOUBLE,
            fwd_pkts_b_avg BINARY_DOUBLE,
            bwd_byts_b_avg BINARY_DOUBLE,
            bwd_pkts_b_avg BINARY_DOUBLE,
            fwd_blk_rate_avg BINARY_DOUBLE,
            bwd_blk_rate_avg BINARY_DOUBLE,
            fwd_seg_size_avg BINARY_DOUBLE,
            bwd_seg_size_avg BINARY_DOUBLE,
            cwe_flag_count INTEGER,
            subflow_fwd_pkts INTEGER,
            subflow_bwd_pkts INTEGER,
            subflow_fwd_byts INTEGER,
            subflow_bwd_byts INTEGER )

3.插入数据测试

这里采用opengauss的copy操作,从csv文件直接复制到数据表当中。因为csv的数据有些问题,所以先提取转换一下。

转换test.csv数据

import csv

# 读取原始 CSV 文件
with open('test.csv', 'r') as f:
    reader = csv.reader(f)
    header = next(reader)  # 读取列标题
    modified_rows = []

    for row in reader:
        # 将包含小数的列(例如第二列)中的小数部分去掉
        modified_row = [row[0], row[1], row[2], row[3], row[4], row[5], int(float(row[6])), 
                        row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], 
                        int(float(row[15])), int(float(row[16])), row[17], row[18], 								int(float(row[19])), int(float(row[20])), row[21], row[22], 
                        row[23], row[24], row[25], row[26], row[27], 
                        row[28], row[29], row[30], 
                        row[31], row[32], int(float(row[33])), 
                        int(float(row[34])), row[35], int(float(row[36])), 
                        int(float(row[37])), int(float(row[38])), row[39], 
                        row[40], int(float(row[41])),
                        int(float(row[42])), int(float(row[43])), row[44],
                        row[45], row[46],
                        row[47], row[48], row[49], row[50], row[51], 
                        row[52], row[53], row[54],
                        row[55], row[56], row[57], row[58], row[59], 
                        row[60], int(float(row[61])), int(float(row[62])),
                        row[63], row[64], int(float(row[65])), int(float(row[66])), 
                        row[67], row[68], row[69], row[70],
                        row[71], row[72], row[73], row[74], row[75], 
                        row[76], row[77], row[78],
                        row[79], row[80], row[81]]  # 假设第二列包含小数
        modified_rows.append(modified_row)

# 将修改后的数据保存到新的 CSV 文件
with open('test.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(header)  # 写入列标题
    writer.writerows(modified_rows)  # 写入修改后的数据

执行copy操作

把服务器上转换好的csv文件copy到数据库的某个表中。

COPY unnormal_flow FROM '/home/omm/test.csv' WITH CSV HEADER DELIMITER ','

最后查询成功。