电商数据迁移:MySQL到GaussDB的奇幻之旅

1 概述

1.1 背景介绍

云数据库GaussDB是华为自主创新研发的分布式关系型数据库。该产品具备企业级复杂事务混合负载能力,同时支持分布式事务,同城跨AZ部署,数据0丢失,支持1000+的扩展能力,PB级海量存储。同时拥有云上高可用,高可靠,高安全,弹性伸缩,一键部署,快速备份恢复,监控告警等关键能力,能为企业提供功能全面,稳定可靠,扩展性强,性能优越的企业级数据库服务。

通过该案例,大家可以学习GaussDB数据库的简单使用,并在代码中如何通过JDBC驱动操作数据库,体验数据应用和迁移UGO服务的SQL转换能力,助力数据库迁移。

1.2 适用对象

  • 企业
  • 个人开发者
  • 高校学生

1.3 案例时间

本案例总时长预计120分钟。

1.4 案例流程

e64f935f6a361da31c3a795eca50539d.png{{{width="70%" height="auto"}}}

说明:

① 下载电商项目代码; ② 安装Redis数据库; ③ 购买&初始化GaussDB数据库; ④ 改造电商项目; ⑤ 运行电商项目。

1.5 资源总览

本案例预计花费总计8元。体验完成后请及时释放资源,避免产生多余的费用。

资源名称规格单价(元)时长(分钟)
GaussDB数据库X86计算,通用计算增强型 | c7.large.2 | 2 vCPUs | 4 GiB CentOS 7.6 64bit (40GB)3.7120
弹性公网IP按需计费|按流量计费 5Mbit/s0.02+0.8元/GB120
华为开发者空间—云主机鲲鹏通用计算增强型 kc2.xlarge.2 | 4vCPUs8G | Ubuntu免费120

2 电商项目数据迁移步骤

2.1 下载项目代码

登录开发者空间:https://developer.huaweicloud.com/space/devportal/desktop

进入桌面.PNG

点击“进入桌面”,进入云主机,在云主机桌面右键打开“终端”。

d9b82e197a08b2b6dff7c8273f6c2046.png

创建/home/developer/my_code目录,以此目录存放代码,然后进入此目录。

332cbe9dbb3c6a97881d0565b9b4014a.png

执行下载代码命令,完成下载:

# 克隆命令
git clone https://gitcode.com/CaseDeveloper/E-Commerce-Java.git
git clone https://gitcode.com/CaseDeveloper/E-Commerce-Web.git

49030f741ad2279244fff5e98b33bc2f.png

2.2 安装Redis

在终端中,更新软件包,交互方式选择Y或直接回车Enter:

sudo apt update -y
sudo apt upgrade -y

d80b55363c71c0453ffbc22aad14a411.png

安装Redis,执行命令:

sudo apt install -y redis-server

534d146f9f2fe6acf533b4eab3faae7d.png

查看版本:

redis-cli --version

30484f171c143aaee618b26918b334d2.png

2.3 准备GaussDB数据库

登录华为云控制台,搜索云数据库GaussDB,点击“创建”。

e23861cb033c8cf9dfa0776baa16267c.png

当前案例建议选择“华南-广州”区域,因为该区域支持集中式版1主1备1日志部署形态,费用较低。也可以选择其他区域,但只能购买集中式版1主2备费用比前者高一点。注意保持后续创建的其他云服务保持同一区域,点击“购买数据库实例”。

74616175df009e1adab8ad62505e852d.png

数据库规格:其他默认即可,费用¥3.70/小时。预计创建耗时20分钟,期间可以先熟悉实验步骤。

配置项规格
计费模式按需计费
区域华南-广州
产品类型基础版
数据库引擎版本最新版本
实例类型集中式版
部署形态1主1备1日志
性能规格通用型4vCPUs|16GB
存储空间40GB
虚拟私有云没有新建即可
安全组没有则新建,有则给安全组添加规则,对以下网段开放8000端口:1.92.0.0/16,1.94.0.0/16, 113.44.0.0/16,116.205.0.0/16, 120.46.0.0/16,123.249.0.0/16,124.70.0.0/16
管理员密码自定义

购买弹性公网IP,规格如下:其他默认即可,弹性公网IP保有费¥0.02/小时+公网流量费¥0.8/小时。

配置项规格
计费模式按需计费
线路全动态BGP
公网带宽按流量计费|5Mbit/s
带宽名称自定义
弹性公网IP名称自定义

当GaussDB数据库和弹性公网IP创建完成后,给GaussDB实例主节点绑定弹性公网,后续在云主机使用弹性公网IP连接数据库。绑定后点击右上角“登录数据库”。

610003d684e73323b3783ed85854f4f8.png

输入密码测试连接后登录。

062ce45e4604d6d7650d8359aa26a390.png

登录成功后创建数据库commerce。

c91b3cf74b8364ba697bb7b77e83df86.png

数据库创建完成后,可以使用E-Commerce-Java项目中的db_init_test.sql脚本进行创建表并插入测试数据。由于db_init_test.sql是MySQL导出的脚本,需要先进行SQL语句转换,将脚本中SQL转换为适配GaussDB的SQL语句,借助工具:华为云数据库和应用迁移UGO

打开工具,源端SQL语句选择“MySQL”,目标端SQL语句选择“GaussDB 集中式版(B兼容)V2.0-8.0 企业版”然后复制db_init_test.sql中SQL语句到左边窗口,点击SQL转换。

0ce0c2a1ce8b3778c9ca3103c0cd0422.png

得到转换后的SQL,去到登录后的GaussDB实例commerce数据库下执行SQL。

5c6c7094e365a75760d6dde70753154c.png

至此,数据库已初始化完成。

2.4 改造电商项目

在云主机桌面打开CodeArts IDE for Java,打开E-Commerce-Java项目,等待模型同步成功。构建方式弹窗选择“Use Maven”。

0015c5ffd4cd9098ab98779a3ede9368.png

a13e67357a7fc0e73f7a79676404cbd5.png

修改工程JDK版本为JDK1.8,点击IDE左上角“文件”,点击“Java智能助手设置”,选择JDK1.8解压目录,点击确定。

7227fb72839989fa6bec16a862261f6a.png

下载GaussDB驱动包,解压获取GaussDB_driver/Centralized/Euler2.5_X86_64/opengaussjdbc.jar驱动并在项目下新建lib目录放置驱动,修改pom.xml文件中JDBC驱动为opengaussjdbc,重新加载依赖。

<dependency>
      <systemPath>${project.basedir}/lib/opengaussjdbc.jar</systemPath>
      <groupId>com.huawei.opengauss.jdbc</groupId>
      <artifactId>opengaussjdbc</artifactId>
      <version>1.0.0</version>
      <scope>system</scope>
</dependency>

db5f3a51b6cca7982dff561d70e89757.png

修改application.yml中数据库连接信息,其中数据库IP使用GaussDB数据库绑定的弹性公网IP,密码是购买GaussDB数据库时设置的密码。

4037efa00ed6f153727a3ffeef8b14dd.png

由于order、user在GaussDB中为保留关键字,不能作用于其他标识符,可以通过添加schema来指定其为某个指定schema下的表。为了预防未来GaussDB增加其他关键字设置导致SQL执行报错,可以为所有SQL中表明指定schema,所以需要修改CartMapper.java、CommodityMapper.java、OrderMapper.java、UsersMapper.java中SQL,指定表schema为public。

如OrderMapper和UsersMapper的修改参考:

af8d6f2fbdd23f99201d71e9ac301ab1.png

另外,关于结算接口业务中,需要向订单表中插入新的数据,而UGO在进行SQL转换时,是将MySQL中的json类型转换成了jsonb类型,直接插入json字符串会报错,可以使用PGObject类来处理jsonb数据。

需要修改CartServiceImpl.java、OrderMapper.java文件,修改内容如下:

3366b191999938720a7696e64c0c4c58.png

2.5 运行电商项目

2.5.1 启动后端服务

打开src/main/java/org/example/CommerceApplication.java启动类,点击编辑窗口左侧运行按钮,选择运行主程序。

20f7647961f34dd05b80be371fa05744.png

2.5.2 启动前端服务

安装nvm(Node版本管理器)

# 使用国内镜像源(如 gitee)下载并安装 nvm
export NVM_SOURCE=https://gitee.com/mirrors/nvm.git
curl -o- https://gitee.com/mirrors/nvm/raw/master/install.sh | bash
# 查看nvm是否生效,根据提示,让nvm生效(运行提示命令或者重启终端)
nvm

image.png 若nvm命令未生效,见上一步提示配置临时环境变量,这里仅为参考。

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

注意*:安装脚本提示的命令是配置临时环境变量,仅对当前终端会话有效。如果要配置永久全局配置,请写入到~/.bashrc文件并执行source ~/.bashrc重建加载配置文件。)

下载并安装 Node.js。

nvm install 22

验证版本。

node -v

npm -v

打开终端,进入前端项目目录。

cd /home/developer/my_code/E-Commerce-Web/

拉取项目依赖。

npm install

启动项目。

npm run dev

使用浏览器访问http://localhost:3000。

d674479f6b99882db9b1f1bfb056760d.png

可以注册账号体验功能,验证无误证明案例成功完成,可以自由选择结束案例或继续开发或验证其他问题。

如结束案例,请务必释放资源! 如果想要直接获取改造后的电商后端服务可以访问:https://gitcode.com/CaseDeveloper/E-Commerce-GaussDB 如果想了解更多云数据库GaussDB内容可以访问:https://bbs.huaweicloud.com/contents/sql/gaussdb-community.html

3 释放资源

3.1 释放GaussDB数据库

云数据库GaussDB和弹性公网IP会持续计费,体验完成后请及时释放资源,避免产生多余的费用。

登录华为云控制台GaussDB页面,在实例列表中选择之前创建的实例进入基本信息页,下拉到底部节点列表,在主节点后选择更多操作,选择解绑弹性公网IP。

cdbe97d74c33780109655de1cf71a55c.png 回退到GaussDB实例列表页选择之前创建的实例后更多操作,选择删除实例。

a916375575d23c35bbd7a0744c86546a.png

再到弹性公网IP页面,选择之前创建的弹性公网IP,点击实例后更多操作,选择释放。

e38e55014730489e4713b93695a572ac.png

3.2 资源检查

控制台点击“更多 | 资源 | 我的资源”菜单项,检查资源是否全部删除。

注意:(1) 虚拟私有云VPC和安全组可以不删除,以留下次使用。(2) 若在其他区域购买了GaussDB和EIP等资源,请切换到那个区域查看。

4 问题记录

4.1 项目运行问题

1、关键字问题

报错:ERROR: syntax error at or near "order"或ERROR: syntax error at or near "user"

解决:检查触发接口对应得Mapper中SQL,在user、order表前加“public.”指定schema。

2、结算失败1

报错:ERROR: column "commodity_list" is of type jsonb but expression is of type character varying

解决:UGO在进行SQL转换时,是将MySQL中的json类型转换成了jsonb类型,直接插入json字符串会报错,可以使用JDBC驱动中提供的PGObject类来处理jsonb数据。参考2.5改造电商项目最后一步。

3、结算失败2

报错:ERROR: syntax error at or near "`"

解决:在OrderMapper.java中SQL,将“`”去掉。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值