【原创】国产化适配-CentOS7.9单机安装OpenGauss并创建B兼容库,完成MySQL到OpenGauss数据迁移功能

该文章已生成可运行项目,

前言

这篇是继上一篇的后文【原创】国产化适配-全量迁移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

 

本文章已经生成可运行项目
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值