Skip to content

opengauss笔记

docker部署openGauss

docker部署openGauss

数据库用户解锁

登录管理员用户

sh
gsql -d 数据库名(用默认的库即可) -p 5432 -U 管理员用户名

解锁

ALTER USER gaussdb(需要解锁的用户) ACCOUNT UNLOCK;

OpenGauss 极简版安装

shell
# 新建用户组、用户
groupadd dbgroup
useradd -g dbgroup test

# 创建文件夹
mkdir -p /opt/software/openGauss
chown 755 -R /opt/software
chown -R test /opt/software/openGauss

# 下载安装包
# 地址:https://opengauss.org/zh/download
# 下载文件拷贝到/opt/software/openGauss目录
# 解压:
tar -jxf openGauss-3.1.1-openEuler-64bit.tar.bz2 -C /opt/software/openGauss

# 关闭防火墙和selinux
systemctl disable firewalld.service
systemctl stop firewalld.service
vim /etc/selinux/config
SELINUX=disabled

# 切换用户,执行脚本安装
su test
cd /opt/software/openGauss/simpleInstall
sh install.sh  -w "密码" &&source ~/.bashrc

# ps和gs_ctl查看进程是否正常
ps ux | grep gaussdb
gs_ctl query -D /opt/software/openGauss/data/single_node

# 启动gauss数据库
gs_ctl start -D /opt/software/openGauss/data/single_node -Z single_node

# 重启gauss数据库
gs_ctl restart -D /usr/local/openGauss/data/single_node -Z single_node

如果安装完成后系统无法使用yum,请参考这篇文章

解决【openGauss安装后】yum、ssh命令无法使用_yum 没有opengauss-CSDN博客

我是这样解决的

sh
vim /etc/profile
text
注释下面这行
#export LD_LIBRARY_PATH=$GAUSSHOME/lib:$LD_LIBRARY_PATH

Mysql数据迁移至OpenGauss

一、安装迁移工具chameleon

shell
# chameleon工具是一个基于Python语言的MySQL到openGauss的实时复制工具。安装方式分为:whl安装包安装和源码安装两种。这里我们主要介绍安装包安装。
# 1、下载安装包:
https://opengauss.obs.cn-south-1.myhuaweicloud.com/3.1.1/chameleon/chameleon-1.0.0-py3-none-any.whl
# 下载完成后,通过Python virtual env环境进行安装。

# 2、执行如下命令创建Python虚拟环境并激活:
python3 -m venv venv
source venv/bin/activate
# 3、执行如下命令通过pip安装chameleon工具:
pip3 install ./chameleon-1.0.0-py3-none-any.whl

二、mysql端创建用户usr_replica并授权

sql
CREATE USER usr_replica   IDENTIFIED BY  're@1qazx';
GRANT ALL ON db_test.* TO 'usr_replica';
GRANT RELOAD ON *.* to 'usr_replica';
GRANT REPLICATION CLIENT ON *.* to 'usr_replica';
GRANT REPLICATION SLAVE ON *.* to 'usr_replica';

三、修改mysql配置文件my.cnf

text
[mysqld]
binlog_format = ROW
log_bin = mysql-bin
server_id = 1
binlog_row_image = FULL
gtid_mode = ON
enforce-gtid-consistency=on
# 然后重启mysql:systemctl restart mysql。

四、切换用户test,创建迁移配置文件

shell
su test
source venv/bin/activate
# 创建配置文件目录:chameleon set_configuration_files 。执行该命令后,将在~/.pg_chameleon/configuration目录下创建默认的配置文件模板。
# 复制配置文件:
cd ~/.pg_chameleon/configuration  cp config-example.yml default.yml
# 按照实际情况修改default.yml配置文件。

五、迁移配置重点说明

text
 pg_conn:
  host: "192.168.132.153"
  port: "5432"
  user: "gaussdb"
  password: "test"
  database: "db_test"
sources:
  mysql:
    db_conn:
      host: "192.168.132.153"
      port: "3306"
      user: "usr_replica"
      password: "test"
    schema_mappings:
      db_test: db_test
      
# 迁移数据时,MySQL侧使用的用户名密码分别是 usr_replica 和 re@1qazx。MySQL服务器的IP和port分别是192.168.132.153和3306,待迁移的数据库是db_test。openGauss侧使用的用户名密码分别是 gaussdb和 gaussdb@1qazx。openGauss服务器的IP和port分别是192.168.132.153和5432,目标数据库是db_test,同时会在db_test下创建schema:db_test,迁移的表都将位于该schema下。

六、初始化迁移过程

shell
chameleon create_replica_schema --config default
chameleon add_source --config default --source mysql

七、复制数据

shell
chameleon init_replica --config default --source mysql --debug 
# debug参数可以查看执行过程。

Mysql和Opengauss函数对照表(部分)

项目中的应用

驱动程序

  • 驱动包与PostgreSQL保持兼容,其中类名、类结构与PostgreSQL驱动完全一致,曾经运行于PostgreSQL的应用程序可以直接移植到当前系统使用。
  • Jeecgboot3.5.5代码生成器不支持OpenGauss驱动:jdbc:opengauss,在不改动其源代码的前提下,将驱动替换postgresql驱动:jdbc:postgresql,可以正常使用Jeecgboot功能。

中间件数据库脚本

  • 定时任务Quartz、开源工作流流程引擎Camunda均需要在官网下载PostgreSQL版本的数据库脚本导入到项目的数据库,否则会出现数据类型不支持,字段找不到等异常情况。

常用方法

转化为日期

可以参考postgreSQL中将timestamp转换成date格式

分隔字符串

将timestamp类型的create_time转为对应格式的字符串 = 将前端传来的createTime转为时间后再转为对应格式的字符串

sql
TO_CHAR(di.create_time, 'YYYY-MM-DD') = TO_CHAR(#{danger.createTime}::date, 'YYYY-MM-DD')

直接用date转换

这个之前生效,但是我最后一次用的时候不生效了(暂未找到原因)

sql
di.create_time::date = #{danger.createTime}::date

将逗号分隔的字符串转为多条数据和将多个id相同的数据的值组合成一个以逗号分隔的数据

STRING_TO_ARRAY和STRING_AGG

sql
select dg.id,  
--        这里将id相同的多条数据的值组合为一条数据  
       STRING_AGG(dpr.type, ',') AS possible_result_name,  
       CASE           WHEN is_hazard_origin = 0 THEN '否'  
           ELSE '是'  
           END                   AS is_hazard_origin_name,  
       assessment_team_leader,  
       ass.assessment_team_leader_name,  
       evaluate_team_members,  
       ass2.evaluate_team_members_name  
from db_test.danger dg  
         left join db_test.danger_system_description dsd on dsd.id = dg.id  
--     这里将以逗号分隔的dg.possible_result值,分隔为多条数据  
         left join db_test.danger_possible_result dpr on dpr.id = ANY (STRING_TO_ARRAY(dg.possible_result, ','))  
--     如果有多个需要分隔的,需要作为子表链接,否则数据会出错  
         left join (select dg.id, string_agg(su.realname, ',') assessment_team_leader_name  
                    from db_test.danger dg  
                             left join db_test.sys_user su  
                                       on su.id = any (string_to_array(dg.assessment_team_leader, ','))  
                    group by dg.id) ass on ass.id = dg.id  
         left join (select dg.id, string_agg(su.realname, ',') evaluate_team_members_name  
                    from db_test.danger dg  
                             left join db_test.sys_user su  
                                       on su.id = any (string_to_array(dg.evaluate_team_members, ','))  
                    group by dg.id) ass2 on ass2.id = dg.id  
group by dg.id, dsd.id, ass.assessment_team_leader_name,  
         ass2.evaluate_team_members_name;