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/profiletext
注释下面这行
#export LD_LIBRARY_PATH=$GAUSSHOME/lib:$LD_LIBRARY_PATHMysql数据迁移至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版本的数据库脚本导入到项目的数据库,否则会出现数据类型不支持,字段找不到等异常情况。
常用方法
转化为日期
分隔字符串
将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;