前言
这篇是继上一篇的后文【原创】国产化适配-全量迁移MySQL数据到OpenGauss数据库_mysql 迁移到 opengauss-优快云博客
本篇主要讲的是OpenGauss的安装部署,以及如何完成B兼容数据库的创建和数据迁移工作。
环境说明
操作系统:CentOS7.9 最小安装
OpenGauss:企业版6.0.1
java运行环境:jdk17
准备工作
用户和组
安装OpenGauss前需要在CentOS中准备用户和用户组,并安装一些软件:
以下命令用于创建管理OpenGauss用的组和用户
groupadd dbgroup
useradd -g dbgroup omm
passwd omm
安装python3和bzip2
yum install -y python3 bzip2
下载OpenGauss6.0.1
openGauss软件 | openGauss下载 | openGauss软件包 | openGauss社区
建议直接从官网下载

上传安装包到/opt/opengauss-install目录下,没有的话创建一个目录即可
关闭防火墙
为了防止防火墙导致数据库无法远程连接,建议将防火墙关闭方便调试
systemctl stop firewalld
systemctl disable firewalld
安装DBeaver
在Windows环境安装DBeaver用于远程连接OpenGauss
开始安装
解压安装包
使用以下命令解压安装包
cd /opt/opengauss-instal
tar zxvf openGauss-All-6.0.1-CentOS7-x86_64.tar.gz
解压完成后还需要再解压其中的一个tar包
tar zxvf openGauss-OM-6.0.1-CentOS7-x86_64.tar.gz
解压完成后目录如下:
执行安装脚本
进入script目录,执行安装脚本
cd /opt/opengauss-install/script
./gs_preinstall -U omm -G dbgroup --one-stop-install

使用中文,按1回车。后面几个直接回车跳过。单机部署按2回车
修改xml中的ip

按照提示的路径,编辑这个cluster.xml,将ip改为你服务器的ip地址,而不是127.0.0.1
vi /opt/opengauss-install/script/base_utils/template/cluster.xml

保存后输入yes,然后回车

安装完成后输入yes,创建omm用户,如果不出意外的话就安装完成了

但是目前只是安装完成了环境,还没有真正完成最终安装
切换到omm用户
切换到omm用户后,完成最终安装
su omm
gs_install -X /opt/opengauss-install/script/base_utils/template/cluster.xml
在安装过程中需要输入数据库密码,这个需要你们自己输入即可,要输入两遍

查看进程和状态
ps aux|grep gauss
出现gaussdb的进程,说明安装完成了

查看运行状态
gs_om -t status
创建用户
由于默认的omm用户不能进行远程连接,因此需要单独创建一个普通用户用于远程连接数据库
su omm
gsql
CREATE USER IF NOT EXISTS {你的用户名} SYSADMIN PASSWORD '你的密码';
其中gsql命令只有CentOS中的omm用户拥有,用于本地连接OpenGauss数据库
使用\q可以退出OpenGauss数据库。
打开数据库远程连接
进入/opt/openGauss/install/data/dn1,这里需要编辑两个文件,pg_hba.conf和postgresql.conf
cd /opt/openGauss/install/data/dn1
vi pg_hba.conf
修改93行,将中间的ip地址改为0.0.0.0/0,然后:wq保存

编辑postgresql.conf
vi postgresql.conf
修改其中关联的ip地址

将listen_address和local_bind_address都改为0.0.0.0即可
重启OpenGauss
gs_om -t restart
DBeaver远程连接OpenGauss
打开DBeaver后,创建新的连接,注意!DBeaver自带OpenGauss连接配置,不需要手动创建连接信息。筛选后就能找到GaussDB了,使用这个即可。

host填写你的OpenGauss的连接地址,database保持不变,用户名密码填写你自己新建的用户名密码。完成后点击“Test Connection”测试连接,如果连接成功那就恭喜你成功了。

创建B兼容数据库
OpenGauss存在两种模式:
A模式:PostgreSQL模式,所有语法都是PostgreSQL的,也就是OpenGauss的默认模式。
B模式:MySQL模式,当前OpenGauss兼容的MySQL为5.7版本,但是还是存在和正常MySQL语法不同的地方。
执行建表语句:
CREATE DATABASE test_db
WITH
OWNER = dct -- 指定所有者(需替换为你创建的用户)
ENCODING = 'UTF8' -- 等效MySQL的utf8mb4
LC_COLLATE = 'en_US.UTF-8' -- 排序规则(需与MySQL一致)
LC_CTYPE = 'en_US.UTF-8' -- 字符分类规则
DBCOMPATIBILITY = 'B'; -- 开启MySQL兼容模式
其中dct换成你自己创建的用户名。DBCOMPATIBILITY = 'B'必须要加,不然就是默认的A模式。
打开库
右键Databases,点击Refresh,即可刷新出你新创建的库了

如果无法打开,可以进入CentOS终端,执行gsql命令,进入OpenGauss后,切换一下首次用omm用户登录一下,即可使用普通用户打开我们新建的数据库了。
gsql
\c test_db;

解决切换库出错
如果执行\c test_db;出现:
FATAL: could not load library "dblink.so": libltdl.so.7: cannot open shared object file: No such file or directory
CONTEXT: SQL statement "create extension if not exists dblink;"
Previous connection kept
需要安装以下库,即可解决这个问题:
yum install -y libtool-ltdl
数据迁移
推荐使用我自己写的迁移工具
https://gitee.com/decentant/mysql-to-opengauss
需要在服务器中安装jdk17,并配置环境变量,为了节省篇幅这个我就不演示了
将发行版中的最新版上传到服务器,这个服务器必须是能够连接MySQL和OpenGauss的。
解压安装包
我将安装包上传到/opt目录下了
cd /opt
tar zxvf mysql-to-opengauss*.tar.gz
修改配置文件
cd /opt/mto/config
vi application-demo.yaml
我这里支持多个配置文件,默认是demo结尾的,可以自己添加其他配置文件

需要修改的点为MySQL和OpenGauss的连接ip、数据库名、用户名、密码,还有一个是OpenGauss模式,默认我这里写的是A,如果是文章里的B兼容库的话,需要改成B即可。
注意!本项目不会自动建库,库需要用户提前建好!
启动项目
进入bin目录后执行start脚本
cd /opt/mto/bin
./start.sh
查看执行日志
tail -f -n200 ../logs/mto.log
即可查看执行情况

查看报表
进入/opt/mto/result目录可以查看执行报表

其中第一个目录就是刚才执行的结果了,overview是总览,table-result.csv就是执行结果报表,可以使用Excel导入这个csv查看执行结果。由于我不想无端增加安装包的体积,因此我并没有将poi引入项目。

打开Excel,选择“数据”->“从文本/CSV”

文件原始格式使用UTF-8,分隔符选择自定义,输入竖线,也就是Enter上面的那个键,也就是shift+反斜杠键

点击右下角的加载,即可加载到Excel中

如果有出错的,可以查看最后一列的报错信息,也可以在error目录查看单个表的完整报错信息。如果有报错信息可以给我提issue,或者改我的代码自行解决。
查看数据库
打开数据库后如果看见Tables下有表了,且数据完整,说明迁移完成了,如果没有,或者缺表缺数据,建议查看报表了解出错原因,也有可能是连接信息填写错误。

语法区别
最后说一下普通MySQL和OpenGauss B兼容库的语法区别
索引
和A模式一样,这里的索引依旧是全局的,不像MySQL索引是跟着表的,即使索引名和其他表重名也没事。在OpenGauss中不管A模式和B模式索引名都是全局的,不能出现重复。
转义
MySQL中如果数据内部有单引号,那需要用\'进行转义,而在OpenGauss A、B模式中都是使用''来转义单个单引号
group by
OpenGauss严格执行group by规则,不像MySQL可以使用ONLY_FULL_GROUP_BY,允许查询非group by中的字段,而在OpenGauss中是不允许的,会报:
ERROR: column "xxx" must appear in the GROUP BY clause or be used in an aggregate function
由于这个问题,会导致迁移完成后可能有大量查询需要修改,所以迁移还需谨慎!
常见报错
memory is temporarily unavailable
ERROR: memory is temporarily unavailable
详细:Failed on request of size xxx bytes under queryid 0 in scan.l:1448.
这是由于OpenGauss可用内存不够了,导致内存分配失效。解决方案包括提高OpenGauss内存使用量:
gs_guc set -I all -N all -c "max_process_memory=20GB"
gs_om -t restart
使用omm用户执行上述脚本,20GB改为适合服务器内存大小的值。
或者修改配置文件中的batch-size和thread-count,将数值减少,减少OpenGauss内存使用量

could not load library "dblink.so"
FATAL: could not load library "dblink.so": libltdl.so.7: cannot open shared object file: No such file or directory
CONTEXT: SQL statement "create extension if not exists dblink;"
Previous connection kept
上文有介绍,安装libtool-ltdl即可
yum install -y libtool-ltdl


1358






