Home

在麒麟操作系统上使用Gbase8c数据库

什么是Gbase数据库

基本上是基于华为的openGauss发展过来的,而PostgreSQL又是openGauss的上游,所以如果你没有什么特殊要求,只是因为信创的需要,就把他当PostgreSQL用吧

单机部署

麒麟的服务器系统基本上就是从红帽系里面的CentOS魔改过来的,所以基本上相关的东西也能通用

这是信创官方给的安装步骤

1、创建用户
useradd gbase

2、创建目录
mkdir /opt/Installation_package

3、解压文件
cd  /opt/Installation_package/
tar -vxzf GBase8sV8.8.5_S5.0.0B15_centos7.8_x86_64.tar.gz
tar -vxzf GBase8sV8.8.5_S5.0.0B15_CentOS_x86_64_om.tar.gz

4、配置安装参数文件
cp script/gspylib/etc/conf/cluster_config_template.xml /opt/Installation_package/cluster_config.xml
vi cluster_config.xml

<?xml version="1.0" encoding="utf-8"?>
<ROOT>
  <CLUSTER>
    <PARAM name="clusterName" value="gbase8c" />
    <PARAM name="nodeNames" value="<主机名>"/>
    <PARAM name="gaussdbAppPath" value="/opt/database/app" />
    <PARAM name="gaussdbLogPath" value="/opt/database/log" />
    <PARAM name="tmpMppdbPath" value="/opt/database/tmp"/>
    <PARAM name="gaussdbToolPath" value="/opt/database/tool" />
    <PARAM name="corePath" value="/opt/database/corefile"/>
    <PARAM name="backIp1s" value="192.168.200.111"/>
  </CLUSTER>

  <DEVICELIST>
    <DEVICE sn="gbase8c">
      <PARAM name="name" value="<主机名>"/>
      <PARAM name="azName" value="AZ1"/>
      <PARAM name="azPriority" value="1"/>
      <PARAM name="backIp1" value="192.168.200.111"/>
      <PARAM name="sshIp1" value="192.168.200.111"/>
      <!-- dn -->
      <PARAM name="dataNum" value="1"/>
      <PARAM name="dataPortBase" value="15400"/>
      <PARAM name="dataNode1" value="/opt/database/data/dn"/>
      <PARAM name="dataNode1_syncNum" value="0"/>
    </DEVICE>
  </DEVICELIST>
</ROOT>

5、执行安装检查
script/gs_preinstall -U gbase -G gbase -X /opt/Installation_package/cluster_config.xml

6、执行安装
su - gbase
gs_install -X /opt/Installation_package/cluster_config.xml

#初始化配置
gs_guc reload -N all -I all -h "host all all 0.0.0.0/0 sha256"
gs_guc set -N all -I all -c "listen_addresses = '*' "
gs_guc set -N all -I all -c "password_encryption_type=1"
gs_om -t restart

#创建操作用户
create user gbase8c with sysadmin login password 'Database@123';

7、启动、停止数据库,检查数据库状态
gs_om -t start/stop
gs_om -t status --detail

8、登录数据库,创建mysql兼容库
$ gsql -r -d postgres -p 15400

postgres=# CREATE DATABASE mysqldb DBCOMPATIBILITY 'B' encoding 'UTF-8' LC_COLLATE 'zh_CN.utf8' LC_CTYPE 'zh_CN.utf8';

9、帮助
postgres=# \?
postgres=# \h

10、查看库
postgres=# \l

11、查看表
postgres=# \dt

12、查看表定义
postgres=# \d <table_name>

但是不知道为啥,创建Mysql兼容库后用Python的Mysql驱动连不上

动手创建一个PostgreSQL数据库

和Postgre的步骤差不多,贴上Copilot给的步骤

-- 连接到 PostgreSQL 数据库
psql -U postgres

-- 创建一个普通用户
CREATE USER myuser WITH PASSWORD 'mypassword';

-- 创建一个数据库,并将其所有者设置为新用户
CREATE DATABASE mydatabase OWNER myuser;

-- 授予新用户对新数据库的权限
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;

-- 退出 psql
\q

现在用Python尝试连一下数据库

import psycopg2
from psycopg2 import sql

def main():
    # 数据库连接配置
    config = {
        'dbname': 'mydatabase',
        'user': 'myuser',
        'password': 'mypassword',
        'host': '127.0.0.1',
        'port': '5432'
    }

    try:
        # 连接到数据库
        conn = psycopg2.connect(**config)
        cursor = conn.cursor()
        print("成功连接到数据库")

        # 获取所有表的名称
        cursor.execute("SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'")
        tables = cursor.fetchall()

        for table_name in tables:
            print(f"表名: {table_name[0]}")

            # 查询表中的所有数据
            query = sql.SQL("SELECT * FROM {}").format(sql.Identifier(table_name[0]))
            cursor.execute(query)
            rows = cursor.fetchall()

            # 获取列名
            colnames = [desc[0] for desc in cursor.description]
            print(colnames)

            # 输出每行数据
            for row in rows:
                for col_name, col_value in zip(colnames, row):
                    print(f"{col_name}: {col_value}")
                print("---------------------")

    except psycopg2.Error as e:
        print(f"数据库错误: {e}")
    except KeyboardInterrupt:
        print("程序被用户中断")
    finally:
        if cursor:
            cursor.close()
        if conn:
            conn.close()

if __name__ == "__main__":
    main()

成功连上,理论上就可以作为一个普通PostgreSQL数据库使用了

Gbase命令和PostgreSQL区别

先了解一下PostgreSQL命令

psql 是 PostgreSQL 数据库的命令行客户端工具,用于连接和操作 PostgreSQL 数据库。通过 psql,你可以执行 SQL 查询、查看表结构、管理数据库对象等操作。

psql 的主要功能包括:

  1. 连接数据库:通过命令行连接到 PostgreSQL 数据库。

  2. 执行 SQL 查询:可以直接在命令行中执行 SQL 语句,并查看结果。

  3. 管理数据库:创建或删除数据库、表、用户等数据库对象。

  4. 脚本执行:执行包含 SQL 语句的脚本文件。

  5. 查询结果导出:将查询结果导出为文件,例如 CSV、JSON 等格式。

psql 命令的基本使用:

bashCopy code
psql -h hostname -U username -d dbname


例如:

bashCopy code
psql -h localhost -U postgres -d mydatabase


该命令会连接到名为 mydatabase 的数据库,并以 postgres 用户身份登录。

常见 psql 命令:

psql 是 PostgreSQL 数据库管理中非常强大且灵活的工具,适用于日常操作和管理任务。


pg_ctlpg_om 都与 PostgreSQL 数据库的管理相关,但它们的功能和使用场景有所不同。

1. pg_ctl

pg_ctl 是 PostgreSQL 数据库的控制工具,用于启动、停止、重启和检查 PostgreSQL 服务器的状态。它是 PostgreSQL 核心包中的一个实用工具,可以帮助管理员对 PostgreSQL 数据库进行管理和控制。

常见命令:

例如:

bashCopy code
pg_ctl -D /path/to/your/data/directory start


上面的命令会启动 PostgreSQL 服务器,-D 选项用于指定数据目录。

2. pg_om

pg_om 通常是指一些企业级 PostgreSQL 发行版中提供的集群管理工具,特别是在中国的某些发行版中(例如阿里的 PolarDB for PostgreSQL)。pg_om 通常用于管理 PostgreSQL 数据库集群,提供包括创建集群、管理节点、监控和维护的功能。

相比于 pg_ctlpg_om 更侧重于在分布式或集群环境下对 PostgreSQL 进行整体管理。它可能包括更多自动化和高级功能,例如集群的自动故障转移、高可用性配置等。

总结

如果你只是在使用单节点的 PostgreSQL 数据库,pg_ctl 应该是足够的;如果你管理的是一个集群环境,可能需要使用 pg_om


区别

pg_ctl gs_ctl
psql gsql
pg_om gs_om