案例分析 | 搭建基于 GBase8a 的博客系统遇到的若干问题
关于 GBase 8a 数据库
GBase 是南大通用数据技术有限公司推出的自主品牌的数据库产品,在国内数据库市场具有较高的品牌知名度。
GBase 8a MPP Cluster (以下简称“8a集群”)是南大通用公司自主研发、国内领先的大规模分布式并行数据库集群系统,具有满足各个数据密集型行业日益增大的数据分析、数据挖掘、数据备份和即席查询等需求的能力。已在人民银行、银监会、农总行、中行、中移动、海关总署等数百家用户形成规模化应用,目前部署节点总数超过25000个,管理数据超过200PB。
关于 WordPress 博客系统
WordPress 是使用PHP语言开发的博客平台,并逐步演化成一款内容管理系统软件,它是使用PHP语言和MySQL数据库开发的,用户可以在支持 PHP 和 MySQL数据库的服务器上使用自己的博客。
环境准备
- OS: CentOS Linux release 7.9.2009 (Core)
- OS安全:关闭防火墙、iptables、selinux等。
- 安装并启动Docker服务
1 | [root@centos7 wp-blog]# systemctl status docker |
启动 GBase 8a 数据库
本案例中,为便于演示,使用 Docker 版的 GBase 8a,具体启动命令如下:
1 | 从 Docker Hub 拉去镜像 |
为 wordpress 准备 user/schema:
1 | create database wordpress; |
安装 WordPress
使用 Yum 直接安装 wordpress, apache server,命令如下:
1 | # 安装 wordpress 包 |
到此,基本安装完成,接下来需要配置数据库连接信息:
1 | # 修改数据库连接信息 |
修改完成后,启动httpd服务:
1 | # 启动httpd |
运行 httpd 服务后,便可通过URL: http://192.168.8.101/phpinfo.php 查看php信息,如图所示。
通过 URL: http://192.168.8.101/wp-blog/wp-admin/install.php 来进行博客系统的初始化。
到此,个人博客系统搭建完成。
遇到的问题
接下来,着重阐述在搭建博客时遇到的几点问题,以及问题解析。
Case 1: Unknown collation: ‘utf8mb4_unicode_520_ci’
- 问题解读:
由于wordpress默认使用MySQL数据库,从MySQL 5.7开始,引入了新的字符校验规则utf8mb4_unicode_520_ci
,而这在GBase 8a中是不支持的,所以需要修改wordpress的默认配置项。
1 | /** Database Charset to use in creating database tables. */ |
如若不修改,则会遇到下面的报错信息:
1 | WordPress database error: [Unknown collation: 'utf8mb4_unicode_520_ci'] |
Case 2: (GBA-01EX-700) Gbase general error: unsupported key algorithm
- 问题解读:
GBase 8a 当前版本,不支持 KEY user_login_key (user_login)
这种语法。
故会遇到下面的报错信息:
1 | WordPress database error: [(GBA-01EX-700) Gbase general error: unsupported key algorithm] |
- 解决办法:
将DDL中的 KEY user_login_key (user_login)...
去掉。
- 问题引申:
GBase 8a 系统支持三类索引:
- 智能索引:
粗粒度,在DC满块时自动创建智能索引,所有列都有,对用户透明,无需用户手动维护。 - Hash索引:
提升等值查询的性能,需用户根据查询列手动创建,会影响数据入库性能。 - 全文检索:
提升文本内容的查询效率,采用全单字索引方式,并且可以保证100%的查询召回率,
需要用户手动创建,需特别安装支持全文检索的插件包后才能使用全文检索功能。
Case 3: ERROR 1067 (42000): Invalid default value for ‘user_registered’
- 问题解读:
这个报错是由于字段 user_registered
的默认值不合规引起的,应由'0000-00-00 00:00:00'
改为'0001-01-01 00:00:00'
。这也是GBase 8a与MySQL不同之处之一。
- 问题引申:
当我们需要做异构数据库迁移时,需要注意数据类型的兼容性问题。
数据类型:DATETIME
最小值:0001-01-01 00:00:00.000000
最大值:9999-12-31 23:59:59
显示格式:YYYY-MM-dd HH:MI:SS.ffffff
--> 精确到微秒
另外,GBase为我们提供了数据迁移工具-- GBase Migration Toolkit
GBase Migration Toolkit 迁移工具是 GBase 提供的一款可以实现异构数据库进行数据迁移的工具。目前可以实现将源数据库(目前支持的源数据库有:ACCESS、Oracle、SQL Server 2005、DM、DB2、MySQL、ShenTong、GBase 8s V8.3 和 PostgreSQL)中的数据迁移到目标数据库(目前支持的目标数据库有:GBase 8a、GBase 8t 和 GBase 8s V8.7、GBase 8s V8.8)。
-
引申阅读:
- MySQL 8.0 中的
DATETIME
Invalid DATE, DATETIME, or TIMESTAMP values are converted to the “zero” value of the appropriate type (‘0000-00-00’ or ‘0000-00-00 00:00:00’), if the SQL mode permits this conversion. - Oracle 21c 中没有
DATETIME
,而是DATE
DATE
: Valid date range from January 1, 4712 BC, to December 31, 9999 AD. The default format is determined explicitly by the NLS_DATE_FORMAT parameter or implicitly by the NLS_TERRITORY parameter. - PostgreSQL 14 中没有
DATETIME
,而是timestamp
timestamp
: both date and time, Low Value: 4713 BC, High Value: 294276 AD.
- MySQL 8.0 中的
Case 4: ERROR 1733 (HY000): (GBA-01EX-700) Gbase general error: Unsupported data type.
- 问题解读:
这个报错是由于字段 bigint
指定了unsigned
无符号数字所导致的。
GBase 8a 当前版本,不支持unsigned的无符号数字。
- 演示示例:
1 | gbase> CREATE TABLE t1 ( ID bigint(20) unsigned); |
- 解决办法:
将unsigned
去掉即可。
Case 5: ERROR 1101 (42000): BLOB/TEXT column ‘meta_value’ can’t have a default value
- 问题解读:
该问题是由字段meta_value
的默认值导致的,在当前GBase 8a版本中,数据类型longtext
不支持指定DEFAULT值。
将DEFAULT NULL
去掉即可。
1 | CREATE TABLE `wp_commentmeta` ( |
- 问题引申:
- 在实际的项目不建议使用char和text类型,建议使用 VARCHAR 数据类型。
- TEXT类型不能指定DEFAULT值,仅兼容使用,推荐使用 VARCHAR 数据类型。
总结
从上述5个Case中,可以将问题归类为:
1)字符集 (Case 1)
2)DDL(表定义、索引定义) (Case 2)
3)数据类型 (Case 3, Case 4, Case 5)
这是日常工作中容易遇到的基础问题,需要在 GBase 8a 日常管理、异构数据库迁移到 GBase 8a 时重点注意的地方。
相关链接
- 活动 | 第一届“GBase技术文章”有奖征文大赛活动公告
- 征文大赛 | 第一届“GBase技术文章”有奖征文常见问题解答
- 第一届“GBase技术征文大赛”首批入围文章发布啦🔈~(持续更新中)
- 资深DBA带您了解GBase培训
- 新春开课 | 欢迎参加GBase 8a MPP CLuster数据库2月训练营
- 源码阅读 | 浅析 GBase 8a Python 连接器的源码
2022-02-20
Shawn Yan
https://www.modb.pro/db/331065
https://mp.weixin.qq.com/s?__biz=MzI2ODU2NDUzMQ==&mid=2247490976&idx=3&sn=c517f78034310b3a5a5117ff10a96b29
- Title: 案例分析 | 搭建基于 GBase8a 的博客系统遇到的若干问题
- Author: 严少安
- Created at: 2022-02-21 00:02:55
- Updated at: 2022-02-21 00:02:55
- Link: https://shawnyan.cn/2022/gbase/gbase-8a-blog-case/
- License: This work is licensed under CC BY-NC-SA 4.0.