Mysql迁移至SinoDB指南

2022-03-28 00:00:00 数据库 架构 线程 字节 数据类型

1.    SinoDB简介

       SinoDB是星瑞格具有自主知识产权的高端国产数据库管理系统产品。产品借鉴先进技术思想与国际主流数据库产品优点,融合了安全可靠、动态扩展、分布式、弹性计算与云计算的优势。产品成熟稳定、自主可控、功能强大、具备高性能、高可用、简单易用等特性,提供了两地三中心的高可用解决方案,实现集群负载、同城灾备、异地灾备等特性。SinoDB兼容主流软硬件平台,尤其是主流国产操作系统、芯片、中间件;支持国密算法,提供多层次安全保障机制;具备高可靠性和水平扩展能力;具有成熟的服务体系,可提供99.99%的高水准的服务等级(SLA),能确保用户业务的连续性,为用户提供安全可靠的基础服务支撑。

2.    技术区别

       在技术层面上,MySQL不提供全面的外键支持,这意味着它不具有SinoDB的所有关系特性,而SinoDB是一个完整的关系数据库。

性能

       在性能方面,SinoDB拥有明显的优势,这主要归功于大容量在线事务处理(OLTP)、应用程序集成以及较小的内存消耗,占用很少的磁盘空间、内存和 CPU。其稳定性和可靠性已经过验证,故SinoDB是金融、物联网和电信等行业的理想选择。

       MySQL的优势是其“插件”架构支持从其他数据库服务器获取可扩展特性。但是,这也许也是MySQL的大缺点。那些特性中的大部分设计用于一些“花哨”的功能,但通常以其他不可缺少的元素为代价。这里的代价是内存和存储器方面的复杂性和资源消耗,这通常会导致性能降低。

安全性

       MySQL 提供简单、但非常有效的安全机制,但人们普遍认为,MySQL 的安全模型没有其他流行数据库精密。MySQL 的默认安装,特别是根密码空缺和缓冲区溢出的潜在漏洞,使得这个数据库服务器成为容易攻击的目标。

       SinoDB集成了操作系统安全性功能来对用户进行身份验证和管理网络权限。角色分离分离了管理员的安全职责。审计功能允许服务器记录用户和管理员执行的敏感操作,以便进行分析并识别系统误用。自主访问控制 (DAC) 是主要的访问控制机制,通过特权和角色支持访问 SQL 对象。

恢复

       在恢复方面,SinoDB对MySQL拥有优势,后者即便使用MyISAM系统配置仍然差强人意。如果需要不间断运行,则MyISAM必须使用不间断电源 (UPS)。如果电源中断,那么MySQL数据库中存储的关键数据可能会面临损坏或丢失的风险。然而使用SinoDB,数据损坏发生的可能性非常小,因为数据会定期通过各个检查点。另外,SinoDB持续跟踪此过程以便成功实施恢复,即便是系统意外关闭。

3.    架构概览和比较

SinoDB和MySQL之间有一些重要区别。我们首先检查这两个数据库服务器之间的一些相似和不同的基本架构方式。

架构模型

SinoDB和MySQL数据库服务器都使用基于服务器线程的专用架构。

存储器访问

SinoDB使用RSAM作为存储器访问方法。

MySQL 数据库使用可插拔存储引擎架构。

表空间模型

SinoDB表空间能跨多个数据库。

MySQL对InnoDB和NDB存储引擎使用表空间。

架构支持

SinoDB拥有真正的架构支持。

MySQL没有真正的架构支持。MySQL中的架构可视为MySQL数据库。

数据库对象名称的大小写敏感性

使用SinoDB表和列在UNIX和Windows上不区分大小写,以小写形式存储。

MySQL在Linux上的默认区分数据库、表和列名区分大小写。

身份验证

SinoDB使用数据库用户/角色执行身份验证,向所有数据库维度(包括单独的行、列和数据库)提供访问控制和加密级别。还可以使用各种外部安全模式,比如操作系统、PAM、Kerberos、Active Directory 等等。

MySQL在数据库级别实现身份验证,并对密码进行加密。

实例架构

SinoDB提供在一台机器上使用多个数据库服务器实例的灵活性,一个实例能够管理多个不同数据库。

一个MySQL实例能管理多个不同数据库,一台机器上可能有多个MySQL实例。

图4-1和图4-2展示了MySQL和SinoDB的架构图。

(1)MySQL架构

MySQL和SinoDB都使用一个基于多线程的架构。一个MySQL实例(如图4-1所示)能管理多个数据库。一个实例中的所有MySQL数据库共享一个名为 INFORMATION_SCHEMA 的公共系统目录。

SinoDB中的实例与MySQL中的实例类似,但它包含自己的系统目录、存储空间、缓冲区池、线程等等。

包含多个数据库的单个实例可以在MySQL和SinoDB中可视化。当您有几个MySQL实例运行在一台机器上且每个实例管理几个数据库时,可以将每个MySQL实例作为SinoDB进行迁移。

MySQL的一个有趣特性是可插拔存储引擎。可以选择 MyISAM、InnoDB、Archive、Federated、Memory、Merge、Cluster、NDB 或 Custom 存储引擎。每个存储引擎都具有不同的特征,可以根据具体需求选择特定存储引擎。


图 4-1MySQL 架构和进程概览

一个MySQL服务器进程(mysqld)能创建几个线程:

一个全局线程(每个服务器进程一个)负责创建和管理用户连接线程。

一个线程被创建来处理每个新用户连接。

每个连接线程还执行身份验证和查询执行。

在 Windows 上,有一个已命名管道处理程序线程,其作用等同于用于已命名管道连接请求的连接线程。

一个信号线程处理警报并在闲置时间过长的连接上强制执行超时。

一个线程被分配为处理关机事件。

一些线程用于处理主从服务器的同步,以便执行复制。

一些线程用于表刷新、维护任务等。

MySQL 使用一个数据缓存、记录缓存、键缓存、主机名缓存和特权缓存,缓存和检索服务器进程中执行的所有线程使用的不同数据类型。

另外,MySQL主进程(mysqld)使用一些线程来处理备份、恢复和并发控制等管理活动。

(2)SinoDB架构

       图4-2提供了SinoDB架构的一个视觉概览。SinoDB数据库服务器基于一种名为动态伸缩架构(Dynamic Scalable Architecture,DSA)的技术,该技术几乎支持高效使用所有当今硬件和软件资源。通过一些相似的数据库活动类型,比如I/O、复杂查询、索引构建、日志恢复、插入和备份/恢复,这种技术充分利用SMP环境中可用的处理能力。DSA设计架构包含内置多线程功能、动态和自调优共享内存组件以及智能逻辑数据存储功能,支持有效地利用所有可用系统资源。

       SinoDB进程被称为虚拟处理器(VP),原因是它的工作方式与计算机 CPU 的工作方式类似。与一个 CPU 运行多个操作系统线程、服务多个用户一样,一个 SinoDB虚拟处理器运行多个线程,服务多个 SQL 客户机应用程序。

虚拟处理器是操作系统计划处理的进程。SinoDB虚拟处理器是多线程的,因为它们运行多个并发线程。图2展示了客户机应用程序与虚拟处理器之间的关系。少数几个虚拟处理器服务大量客户机应用程序或查询。

与一个服务单个客户机应用程序的数据库服务器进程相比,SinoDB的动态、多线程特性有以下优势:

虚拟处理器可以共享处理。

虚拟处理器可以节约内存和资源。

虚拟处理器可以执行并行处理。

可以在运行数据库服务器时启动其他虚拟处理器并终止活动的 CPU 虚拟处理器。

可以将虚拟处理器绑定到 CPU。

      虚拟处理器代表 SQL 客户机应用程序(会话线程)并为了满足内部需要(内部线程)而运行线程。在多数情况下,对于一个客户机应用程序的每个连接,SinoDB运行一个sqlexec 线程。SinoDB运行内部线程以完成数据库I/O、日志 I/O、页面清理和任务管理等任务。

用户线程是服务来自客户机应用程序的请求的数据库服务器线程。用户线程包括会话线程(称为sqlexec线程),会话线程是数据库运行来服务客户机应用程序的主要线程。


图 4-2SinoDB 架构和进程概览

4.    数据大小限制比较

表5-1比较了MySQL和SinoDB数据大小重要的限制。

表 5-1Mysql和SinoDB数据小大限制区别表

 

MySQL

SinoDB

大数据库大小

无限

128PB

大表大小

MyISAM 存储限制:256TB
Innodb 存储限制:64TB

128PB

大行大小

64KB¹

32768字节

每行的大列

4KB²

32768字节

大 blob/clob 大小

4GB

4TB

大 CHAR 大小

64KB(文本)

32768 字节

大 NUMBER 大小

64 字节

10^32

小 DATE 值

1000

12/31/1900

大 DATE 值

9999

12/31/9999

 

1. InnoDB 仅限于 8000 字节(VARBINARY、VARCHAR、BLOB 和 TEXT 列除外)。

2. InnoDB 仅限于 1000 列。

5.    迁移方案

5.1. 系统要求

完成本教程不需要SinoDB副本,但是,如果您下载SinoDB的试用版并跟随本教程操作,肯定能更好地利用本教程。

5.2. 迁移注意事项

我们现在就开始,一起来了解从MySQL迁移到SinoDB是多么轻松!成功的数据库迁移取决于准确计划、DBA 资源和硬件基础架构可用性,比如磁盘空间和 CPU 资源。其他能影响迁移项目是否成功的因素包括现有数据库对象的知识,数据库对象大小及其关系,以及数据库及其对象是如何在源数据库服务器上维护的。如果您将迁移作为改进现有数据库设计(例如通过更改存储布局实现)的机会,那么迁移的复杂性将会增加。您还需要深入理解各种数据移动方法,以便统一高效地卸载、转换和加载数据,这也是满足公司数据库迁移要求的一个关键因素。

以下是从MySQL迁移到SinoDB的5个简单步骤:

步骤 1:下载并安装SinoDB

步骤 2:配置SinoDB实例

步骤 3:数据库架构移动

步骤 4:表数据移动

步骤 5:数据迁移到SinoDB

5.3. 数据类型映射

在开始使用其他数据库对象之前,我们来比较MySQL和SinoDB数据类型之间的区别。通常,所有MySQL数据类型都能映射到SinoDB数据类型,基本不需要修改。

数据库表中的每一列都有一个关联数据类型,决定列能包含的值。SinoDB同时支持内置数据类型和用户定义数据类型 (UDT),而MySQL只支持内置数据类型。对于迁移目的,我们只需考虑SinoDB内置数据类型。

表6-4展示了MySQL数据类型如何映射到SinoDB数据类型。表6-4还展示了这个特殊数据类型的可选映射。

表 6-4数据类型映射

MySQL

SinoDB

TINYINT

SMALLINT

SMALLINT

SMALLINT

MEDIUMINT

INTEGER

INT

INTEGER

BIGINT

INT8

REAL

DOUBLE PRECISION

DOUBLE

DOUBLE PRECISION

FLOAT

DOUBLE PRECISION

DECIMAL(p,s)
其中:
s > 0 && p >= s
s > 0 && p < s
s < 0

DECIMAL(min(p,32), min(s,32))
DECIMAL(min(p,32), min(s,32))
DECIMAL(min(p,32),0)

NUMERIC(p,s)
其中:
s > 0 && p >= s
s > 0 && p < s
s < 0

DECIMAL(min(p,32), min(s,32))
DECIMAL(min(p,32), min(s,32))
DECIMAL(min(p,32),0)

TINYINT UNSIGNED

SMALLINT

SMALLINT UNSIGNED

INTEGER
optional: SMALLINT

BIGINT UNSIGNED

DECIMAL(20,0)
optional: INT8

REAL UNSIGNED

DOUBLE PRECISION

DOUBLE UNSIGNED

DECIMAL(p,s)
optional: DOUBLE PRECESION

FLOAT UNSIGNED

DOUBLE PRECISION

DECIMAL UNSIGNED

DECIMAL(p,s)

NUMERIC UNSIGNED

DECIMAL(p,s)

DATE

DATE

TIME

DATETIME HOUR TO FRACTION

TIMESTAMP

DATETIME YEAR TO FRACTION

DATETIME

DATETIME YEAR TO FRACTION
optional: DATE

YEAR

CHAR(4)

VARCHAR(l)

VARCHAR(l)
optional: LVARCHAR
optional: CLOB

TINYBLOB

BYTE
optional: BLOB

BLOB

BLOB
optional: BYTE

MEDIUMBLOB

BYTE
optional: BLOB

LONGBLOB

BYTE
optional: BLOB

TINYTEXT

TEXT

TEXT

TEXT

MEDIUMTEXT

TEXT

LONGTEXT

TEXT

SinoDB数据类型详情说明如下:

数据类型

取值范围

备注

boolean

t'/'f'或者'T'/'F'以及null

单字节

date

自1899年12月31日以来的日期

时间精度为日

datetime

自1899年12月31日以来的时间

时间精度为毫秒

interval

year-month时间间隔和day-time时间间隔

可到秒

serial

0——2,147,483,647

自增整数

serial8

0——9,223,372,036,854,775,807

自增整数

bigserial

-9,223,372,036,854,775,807——9,223,372,036,854,775,807

8个字节的整数,生成的自增数都是正数

integer(int)

-(2^31-1)——(2^31-1)

10位精度范围

int8

-(2^63-1)——(2^63-1)

19位精度范围

bigint

-(2^63-1)——(2^63-1)

8个字节的整数

smallint

-32767——32767

只存储整数

float

17个有效位双精度浮点数

f(n)n必须是1-14之间的整数

smallfloat

9个有效数字的单精度浮点数,4个字节存储空间

smallfloat转换为decimal值产生9位精度

DOUBLE PRECISION

 

DOUBLE PRECISION X|VG FLOAT X|VD,eJ

real

 

同smallfloat

money

存储多32个有效数字的定点数

money(p,s)其中p是有效数字总数,s是小数位数

decimal

10^130——10^124

格式:decimal(p)浮点和decimal(p,s)定点

numeric

 

与decimal相同

char

1-32767

字符串数据

nchar

1-32767

字符串数据

varchar

0-255

VARCHAR(m,r)其中m是列的大大小,r是保留小字节数

NVARCHAR

0-255

NVARCHAR(m,r)其中m是列的大大小,r是保留小字节数

lvarchar

32739个字节

缺省大小为2048个字节

text

2G字节

存储文本数据

byte

2^31

存储二进制字节流数据,如电子表格,强制转换可将byte转换为blob

clob

4T字节

存储任何类型的文本数据

blob

4T字节

存储二进制数据

set

存储元素的无序集合

SET{"Oakland", "Menlo Park", "Portland", "Lenexa"}

multiset

存储无序的相同元素类型,元素值可重复

MULTISET(element_type NOT NULL)

list

存储相同sql数据类型的非null有序集合

LIST{"blue", "green", "yellow"}

row(命名)

数据类型的字段可以是任何内置数据类型

 CREATE ROW TYPE
name_t (lname CHAR(15), initial CHAR(1), fname CHAR(15))

row(未命名)

数据类型的字段可以是任何内置数据类型

ROW (x integer, z real, y varchar(20))


相关文章