diff --git a/content/zh/post/11/.keep b/content/zh/post/11/.keep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/content/zh/post/11/2022.10.01-\346\225\260\346\215\256\350\277\201\347\247\273\350\207\263openGauss.md" "b/content/zh/post/11/2022.10.01-\346\225\260\346\215\256\350\277\201\347\247\273\350\207\263openGauss.md" new file mode 100644 index 0000000000000000000000000000000000000000..52d50d6ddd60bc4b69e750e40ba48440e564ca66 --- /dev/null +++ "b/content/zh/post/11/2022.10.01-\346\225\260\346\215\256\350\277\201\347\247\273\350\207\263openGauss.md" @@ -0,0 +1,507 @@ ++++ +title = "数据迁移至openGauss" + +date = "2022-10-01" + +tags = ["openGauss有奖征文", "openGauss", "数据迁移"] + +archives = "2022-10" + +author = "小薛同学" + +summary = "数据迁移至openGauss." + ++++ + +### 前言 + +openGauss是华为旗下的国产数据库,我对着这个数据库的了解要从今年8月份开始说起,这个数据库我刚开始使用的时候还头疼了很久,感觉搭建的过程还是比较复杂的,但是熟悉之后发现是真的很香! + + +### 一、openGauss介绍 + +官方介绍: openGauss是一款全面友好开放,携手伙伴共同打造的企业级开源关系型数据库。openGauss采用木兰宽松许可证v2发行,提供面向多核架构的极致性能、全链路的业务、数据安全、基于AI的调优和高效运维的能力。openGauss内核源自PostgreSQL,深度融合华为在数据库领域多年的研发经验,结合企业级场景需求,持续构建竞争力特性。同时,openGauss也是一个开源、免费的数据库平台,鼓励社区贡献、合作。 + +个人理解: 基于linux为内核的国产数据库,安全性大大提高 + +### 二、MySQL数据迁移到openGauss + +1.全量迁移 +(1)介绍 + +官方介绍 chameleon是一个用Python3编写的将MySQL迁移至openGauss的实时复制工具,支持初始全量数据的复制以及后续增量数据的实时在线复制功能。chameleon通过一次初始化配置,使用只读模式,将MySQL的数据全量拉取到openGauss。支持在同一快照下,表间数据并行迁移。全量迁移支持的功能:支持表及表数据、视图、触发器、自定义函数、存储过程的全量迁移 + +个人理解 也就是说,将数据库中的数据通过工具全量复制到openGauss里面,这是最简单易懂的解释。 + + +和上图其实原理很类似,就是对大量数据进行批量复制,从MySQL复制到openGauss,只不过中间开始利用工具进行操作。 + +(2)优势 + +官方解释: 基于sysbench测试模型,在Kunpeng-920 2p服务器上,MySQL数据库10张表单表数据量在300万以上时,chameleon使用10并发迁移数据至openGauss,整体全量迁移性能可达300M/S以上。 + +个人理解 也就是说,在大量数据的迁移的时候,通常会出现两种问题难以解决,第一数据量过于庞大,第二迁移速度太慢,openGauss很好的解决了这两点问题。 + +(3)chameleon工具 + +下载地址:https://opengauss.obs.cn-south-1.myhuaweicloud.com/latest/chameleon/chameleon-1.0.0-py3-none-any.whl + +pip3 install ./chameleon-1.0.0-py3-none-any.whl(安装chameleon命令) + +(4)安装 + +git clone git@gitee.com:opengauss/openGauss-tools-chameleon.git #(下载源码) + +python3 -m venv venv #(创建环境) + +source venv/bin/activate #(激活环境) + +cd openGauss-tools-chameleon #(进入指定目录) + +python3 setup.py install #(安装) + +(5)迁移 + +chameleon set_configuration_files (创建目录) + +cd ~/.pg_chameleon/configuration (进入目录) + +cp config-example.yml default.yml (配置default.yml) + +** 修改default.yml配置文件 ** + +# global settings + +pid_dir: '~/.pg_chameleon/pid/' + +log_dir: '~/.pg_chameleon/logs/' + +log_dest: file + +log_level: info + +log_days_keep: 10 + +rollbar_key: '' + +rollbar_env: '' + +\# type_override allows the user to override the default type conversion + +\# into a different one. + +type_override: + +"tinyint(1)": + +override_to: boolean + +override_tables: + +\- "*" + +\# postgres destination connection + +pg_conn: + +host: "1.1.1.1" + +port: "5432" + +user: "opengauss_test" + +password: "password_123" + +database: "opengauss_database" + +charset: "utf8" + +sources: + +mysql: + +readers: 4 + +writers: 4 + +db_conn: + +host: "1.1.1.1" + +port: "3306" + +user: "mysql_test" + +password: "password123" + +charset: 'utf8' + +connect_timeout: 10 + +schema_mappings: + +mysql_database:sch_mysql_database + +limit_tables: + +skip_tables: + +grant_select_to: + +\- usr_migration + +lock_timeout: "120s" + +my_server_id: 1 + +replica_batch_size: 10000 + +replay_max_rows: 10000 + +batch_retention: '1 day' + +copy_max_memory: "300M" + +copy_mode: 'file' + +out_dir: /tmp + +sleep_loop: 1 + +on_error_replay: continue + +on_error_read: continue + +auto_maintenance: "disabled" + +gtid_enable: false + +type: mysql + +keep_existing_schema: No + +migrate_default_value: Yes + + + +**初始化** + +chameleon create_replica_schema --config default + +chameleon add_source --config default --source mysql + + +**迁移数据** + +chameleon init_replica --config default --source mysql + +chameleon start_view_replica --config default --source mysql --debug + +chameleon start_trigger_replica --config default --source mysql --debug + +chameleon start_func_replica --config default --source mysql --debug + +chameleon start_proc_replica --config default --source mysql --debug + + +**结束迁移** + +chameleon stop_replica --config default --source mysql + +chameleon detach_replica --config default --source mysql + +chameleon drop_replica_schema --config default + +### 2.增量迁移 + +(1)介绍 + +官方解释: 基于开源三方件mysql-binlog-connector-java解析mysql的binlog,并根据mysql主备并行复制的原理,对可并行的事务在openGauss端采用多线程进行并行回放,以实现MySQL到openGauss端的在线迁移。其中并行事务的判断规则为:如果所有正在回放的事务的最小sequence_number大于该事务的last_committed,那么该事务就可以并行执行。该方案可以严格保证事务的顺序和一致性。 + +个人理解 也就是传输工程中的一种类似协议的东西,加固迁移过程的稳定性 + + +(2)迁移代码 + +git clone https://gitee.com/opengauss/openGauss-tools-onlineMigration-mysql.git(下载源码) + +**改动配置文件** + +#openGauss config + +openGauss_conn: + + host: "127.0.0.1" + + port: "5432" + + user: "opengauss" + + password: "password123" + + database: "postgres" + +#mysql config + +mysql_conn: + + host: "127.0.0.1" + + port: "3306" + + user: "mysql" + + password: "password123" + + database: "mysql" + + +cd openGauss-tools-onlineMigration-mysql/mysql2openGauss/ + +mvn clean package(编译) + +java -jar ./target/online-migration-mysql-3.1.0.jar (运行) + +numactl -C 0-31 -m 0 java -Xms15G -Xmx25G -jar ./target/online-migration-mysql-3.1.0.jar (执行) + +### 3.数据校验 + + + +(1)介绍 + +官方介绍 +全量校验: 在全量数据迁移完成后,由extract服务对MySQL源端和openGauss目标端数据抽取然后规整,并将数据推送到kafka中。最后由check服务提取kafka中的数据,并进行校验且输出校验结果。 +增量校验: 由debezium服务侦听源端MySQL数据库的增量数据,到指定topic。再由源端extract服务处理该topic增量数据,触发check增量校验。 + +个人理解:就是在全量数据迁移之后,正对数据迁移的准确性做一个调查,查看数据库信息是否在迁移过程中有丢失等等情况 + + +(2)代码 + +git clone https://gitee.com/opengauss/openGauss-tools-datachecker-performance.git(下载源码) + +mvn clean package -Dmvnen.test.skip=true(构建check 和 extract jar包) + + +**配置application.yml文件** + +server: + + port: 9000 + +spring: + + kafka: + + bootstrap-servers: 192.168.0.114:9092 # kafka 集群地址 + +data: + + check: + + data-path: D:\code\tool # 配置数据校验结果输出本地路径 + + bucket-expect-capacity: 10 # 桶容量范围最小值为1 + + source-uri: http://127.0.0.1:9002 # 配置源端服务地址和服务端口server.port + + sink-uri: http://127.0.0.1:9001 # 配置源端服务地址和服务端口server.port + + + **配置 application-source.yml文件** + +server: + + port: 9002 + +spring: + + check: + + server-uri: http://127.0.0.1:9000 # 数据校验服务地址 + + extract: + + schema: test # 源端数据实例 + + databaseType: MS # 源端数据库类型 MS mysql + + debezium-enable: false #是否开启增量debezium配置 默认不开启 + + debezium-topic:topic # debezium监听表增量数据,使用单一topic进行增量数据管理 + + debezium-groupId: debezium-extract-group # d debezium增量迁移topic ,groupId消费Group设置 + + debezium-topic-partitions: 1 # debezium监听topic 分区数量配置 + + debezium-tables: # debezium-tables配置debezium监听的表名称列表; 该配置只在源端服务配置并生效 + + table1, + + table2 + + debezium-time-period: 1 # debezium增量迁移校验 时间周期 24*60 单位分钟 + + debezium-num-period: 1000 #debezium增量迁移校验 统计增量变更记录数量阀值,默认值1000 阀值应大于100 + + datasource: + + druid: + + + dataSourceOne: + + driver-class-name: com.mysql.cj.jdbc.Driver + + url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&allowPublicKeyRetrieval=true + + username: jack # 源端mysql用于校验的用户名称 + + password: test@123 # 源端mysql用于校验的用户名称密码 + + +**配置 application-sink.yml文件** + +server: + + port: 9001 + +spring: + + check: + + server-uri: http://127.0.0.1:9000 # 数据校验服务地址 + + extract: + + schema: test # 宿端opengauss 用于校验数据schema + + databaseType: OG # 宿端数据库类型 OG opengauss + + datasource: + + druid: + + dataSourceOne: + + driver-class-name: org.opengauss.Driver + + # 宿端opengauss用于校验数据库链接地址 + + url: jdbc:opengauss://127.0.0.1:15432/test?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&batchMode=OFF + + username: jack # 宿端opengauss用于校验的用户名称 + + password: test@123 # 宿端opengauss用于校验的用户名称密码 + + + +**校验前的准备工作** + +cd /data/kafka/confluent-7.2.0 + +bin/zookeeper-server-start -daemon etc/kafka/zookeeper.properties(启动服务) + +bin/kafka-server-start.sh -daemon etc/kafka/server.properties(启动服务) + +bin/connect-standalone -daemon etc/kafka/connect-standalone.properties etc/kafka/mysql-conect.properties(文件连接) + + + +**校验** + +sh extract-endpoints.sh stat|restart|stop(启动校验服务) + +sh check-endpoint.sh stat|restart|stop(启动校验服务) + +curl -X 'POST' 'http://localhost:9000/start/check?checkMode=FULL' -H 'accept: */*' -d ''(全量校验) + +curl -X 'POST' 'http://localhost:9000/stop/clean/check' -H 'accept: */*' -d ''(环境清理) + +debezium-enable: true(开始校验) + +### 4.反向迁移 + +1.介绍 + +官方解释: +反向迁移是指用户将源端数据库迁移到目标数据库,应用切到目标数据库后,再将目标端新产生的数据迁移回源端。反向迁移可满足用户业务迁移逃生的诉求,保持源端、目标端两个库并行运行,在目标端数据库出问题后应用能及时切回源端数据库。openGauss提供reverse-migration工具,将openGauss数据库迁移至MySQL数据库,满足反向迁移要求。 + +个人理解: +也就是从openGauss数据库迁移回Mysql数据库中的过程 + +2.代码 + +**配置config.yaml文件** + +og_conn: + + host: "openGauss_ip" + + port: "5432" + + user: "user" + + password: "password" + + database: "postgres" + + charset: "utf8" + + driver: "org.opengauss.Driver" + + ASSUME_MIN_SERVER_VERSION: "9.4"//逻辑复制必备属性 + + REPLICATION: "database" //逻辑复制必备属性 + + PREFER_QUERY_MODE: "simple"//逻辑复制必备属性 + +slot: + + name: "replication_slot"//逻辑复制槽名称 + + include-xids: false//解码数据是否包含xid信息 + + skip-empty-xacts: true//解码事务是否包含空事务 + + waitLSN: ""//逻辑复制槽开启的lsn + + parallel-decode-num: 20//并行解码个数,最大20 + + white-table-list: ""//库表白名单 + + standby-connection: false//强制备机解码 + + decode-style: "j"//解码格式 + + decoding: "mppdb_decoding"//创建逻辑复制槽的工具 + + runnable_num: 1//并行回放个数 + +mysql: + + driver: "com.mysql.cj.jdbc.Driver" + + host: "mysql_ip" + + port: "3306" + + user: "user" + + password: "password" + + database: "database + + +**反项迁移** + +mvn clean package(编译) + +java -jar ./reverse-migration-mysql-1.0-SNAPSHOT.jar start/create/drop(运行) + +numactl -c 0 -31 -m 0 java -Xms15G -Xmx25Gs -jar ./reverse-migration-mysql-1.0-SNAPSHOT.jar start/create/drop(执行) + +### 三、小结 + +本次文章我准备写一个系列,主要针对openGauss数据库的各种讲解,希望各位小伙伴予以支持! \ No newline at end of file diff --git "a/content/zh/post/11/openGauss\350\216\267\345\245\226\351\241\271\347\233\256\350\256\262\350\247\243.md" "b/content/zh/post/11/openGauss\350\216\267\345\245\226\351\241\271\347\233\256\350\256\262\350\247\243.md" deleted file mode 100644 index b588aa244d0dc946d38c45aa15949abd25b3192a..0000000000000000000000000000000000000000 --- "a/content/zh/post/11/openGauss\350\216\267\345\245\226\351\241\271\347\233\256\350\256\262\350\247\243.md" +++ /dev/null @@ -1,223 +0,0 @@ -+++ - -title = "openGauss获奖项目讲解" - -date = "2022-9-14" - -tags = ["第四届openGauss有奖征文", "openGauss比赛作品"] - -archives = "2022-09" - -author = "m丶shine" - -summary = "2022年8月30日华为鲲鹏应用大赛openGauss赛道上海赛区第三名获奖作品开源分享,我们团队参加本次比赛的时候想了很多方案,但是最终还是决定用自己最擅长的项目." - -+++ - - - -# 前言 - - 2022年8月30日华为鲲鹏应用大赛openGauss赛道上海赛区第三名获奖作品开源分享,我们团队参加本次比赛的时候想了很多方案,但是最终还是决定用自己最擅长的项目 - -# 参赛方案介绍 - - 系统实现学生在线考试管理的基本功能,包括学生登录、查看自己的个人信息及考试信息;提供了在线考试的界面;后台管理员有管理员添加学生、管理学生、管理成绩、添加课程、添加题库题目和组建试卷等功能。本次的学生在线考试管理系统采用Python Django做后端、前端框架采用Bootstrap4实现,实现学生考试的动态管理,使得对信息的管理更加及时、高效,提高了效率。同时还对系统的开发原理、功能特点和设计方案进行了介绍。关键词:考试管理 openGuass数据库 Python Django Web - -# 系统需求分析 - - 系统需求分析 - - (1)学生用户是主要的需求者,主要需求功能是查看当前自己的考试信息、查看考试成绩并可导出以及进行在线考试等。 - - (2)教师用户主要需求功能是为自己所教授的课程组建题库和相对应的试卷,并可以查看学生的考试信息等。 - - (3)管理员用户的功能需求较为复杂,包括对学生信息、教师信息、考试信息进行管理。 - -# 主要功能模块 - - (1)用户登录:实现简单的登录及验证 - - (2)个人信息展示:展示考生个人信息 - - (3)考试管理:展示可以考试的试卷,考试及自动计算考试成绩。 - - (4)考试成绩管理:展示考试结果、导出考试信息 - - (5)后台基础数据管理:试卷,试题,考生等信息更新维护。 - -![输入图片说明](../../../../%E5%9B%BE%E7%89%87.png) - -# 设计思路 - - 设计思路 - - 系统设计包括三部分:数据库设计,功能函数视图设计,前端页面设计 - - 数据库设计 - - 根据对系统需求分析,得出该考试管理系统大致需要六个实体,他们的实体属性如下图所示: - -![输入图片说明](../../../../%E5%9B%BE%E7%89%87.png) - - 根据上面的实体联系图可以得出以下几个表: - - 学院表:Academy - - 专业表:Major - - 课程表:Course - - 学生表:Student - - 题库表:QuestionBank - - 试卷表:TestPaper - - 学生成绩表:Record - - 1.学院---序号、名称 - - 2.专业---序号、名称 - - 3.课程---课程号、课程名 - - 4.学生---学号、密码、姓名、性别、班级、邮箱 - - 5.试卷---标题、科目、使用专业、考试时常、开始时间 - - 6.题库---序号、专业、科目、备选项、题目、答案、难度、分值、题目类型 - -![输入图片说明](../../../../%E5%9B%BE%E7%89%87.png) - -# 字段基本数据分析 - -![输入图片说明](../../../../%E5%9B%BE%E7%89%87.png) - -![输入图片说明](../../../../%E5%9B%BE%E7%89%87.png) - -# 页面及功能设计 - - 1、登录页面: - - 其中需要登录,校验,登录后同时需要存储用户信息在Session中,以备登录后的页面使用。 - - 2、首页(考试信息页): - - 页面需要显示当前用户可以参考的考试试卷信息,在此页面点击开始考试可以跳转到考试页面。 - - 3、考试页面: - - 展示对应试卷的题目和选项信息,同时可以进行答题,交卷后可以自动计算考试分数并存入数据库。 - - 4、成绩显示页面: - - 展示对应考试的考试结果 - - 5、后台管理: - - 用于管理我们的专业,考生,试卷,题库等基础信息,为了快速实现系统将直接启用Django自带的Admin管理功能。 - - 6、个人详情: - - 用于展示个人详情信息。 - -![输入图片说明](../../../../%E5%9B%BE%E7%89%87.png) - -功能函数视图设计 - - # 功能函数视图设计 - - 学生在线考试系统是实现学生在线考试、查看相关信息的一个平台,整个学生在线考试系统共分为3个大模块:管理员模块,学生模块和公有模块,其中复杂的方法和模块的详细设计流程图如下。 - -![输入图片说明](../../../../%E5%9B%BE%E7%89%87.png) - -![输入图片说明](../../../../.gitee/%E5%9B%BE%E7%89%87.png) - -![输入图片说明](../../../../.gitee/%E5%9B%BE%E7%89%87.png) - -![输入图片说明](../../../../.gitee/%E5%9B%BE%E7%89%87.png) - -![输入图片说明](../../../../.gitee/%E5%9B%BE%E7%89%87.png) - -# 技术亮点及优势 - - openGuass是基于PostgreSQL9.2版本开发的,基本包括了PostgreSQL9.4的功能。所以可以采用连接postgresql的方式连接openGauss数据库。 - -django项目下的setting中的DATABASES下进行以下配置: - -DATABASES = { - -'default': { - -# 'ENGINE': 'django.db.backends.sqlite3', - -'ENGINE': 'django.db.backends.postgresql_psycopg2', - -'NAME': 'postgres', #数据库名 - -'USER': 'andy', #用户名 - -'PASSWORD': 'xxxxxxx', #密码 - -'HOST': 'xxx.xxx.xxx.xxx',#虚拟机ip - -'PORT': xxxx #openGauss数据口的端口 - -} - -} - - Django项目框架搭建起来后,我们所有对系统的前后台所有的程序开发都可以在这个项目中进行了,一个典型的Django项目模块功能的开发包括如下几个步骤: - - (1)创建app - - (2)注册app - - (3)定义模型 - - (4)定义视图函数 - - (5)配置访问路由URL - - (6)静态资源准备及配置 - - (7)前端模板开发 - - (8)测试及运行 - - - -# 商业模式及市场前景 - - 国外数据库占据国内大部分市场,关注国际局势的每个人都明白,核心技术掌握在自己手里的重要性,所以说我们要提倡使用属于我们自己的核心技术,这对于我们是很重要的! - -![输入图片说明](../../../../.gitee/%E5%9B%BE%E7%89%87.png) - -功能测试 -![输入图片说明](../../../../.gitee/%E5%9B%BE%E7%89%87.png) - -登录测试 -![输入图片说明](../../../../.gitee/%E5%9B%BE%E7%89%87.png) - -查询测试 -![输入图片说明](../../../../.gitee/%E5%9B%BE%E7%89%87.png) - -考试测试 -![输入图片说明](../../../../.gitee/%E5%9B%BE%E7%89%87.png) - - - -# 项目总结 - -我们团队通过这次openguass开发,进一步掌握数据库的方法和技术,提高软件开发的实际能力,培养设计能力和综合分析、解决问题的能力。 - -学习和实践了分析和设计软件系统的各种知识,包括面向对象的系统分析与设计,编码和测试方面的知识。 - -熟悉了如何根据实际需要分析实体关系,画出ER图从而设计出符合要求的数据库表。 - -学习和实践的数据库的增删改查功能在具体功能开发中的使用。 - -熟悉了openGuass数据库的相关操作。 - -