MariaDB 采用独特的方法为现代业务需求提供数据库解决方案。使用MariaDB Enterprise,组织可以依赖一个完整的数据库来满足他们的所有需求,无论是在商品硬件上还是在他们选择的云上。例如,我们的可插拔专用存储引擎支持以前需要各种专用数据库的工作。MariaDB 可在几分钟内针对任何规模的事务性、分析性或混合用例进行部署,在不牺牲关键企业功能(例如真正的 ACID 合规性和完整 SQL)的情况下提供无与伦比的操作敏捷性。
同样,MariaDB 提供了兼容性特性,允许通过几个步骤轻松地从 Oracle、SQL Server、Postgres 等迁移到 MariaDB,而无需重写应用程序。
本博客将引导您完成从 Oracle 轻松迁移到 MariaDB 所需的主要步骤。我将演示MariaDB MaxScale提供的功能、我们的智能数据库代理以及MariaDB Enterprise Server的兼容模式如何极大地简化迁移。
兼容模式可用于本地部署,也可在MariaDB SkySQL 中用于云部署。
先决条件
此处详述的迁移过程依赖于 MariaDB Enterprise Server 和 MariaDB MaxScale。MaxScale 配置将在 MaxScale GUI 的帮助下创建。
由于安装方式各不相同,因此我没有在此处提供有关安装 MariaDB Enterprise Server 和 MariaDB MaxScale 的完整说明。有关完整的安装说明,请参阅 MariaDB Enterprise 文档:
在深入研究数据和结构之前,MariaDB 建议在 MariaDB 客户门户内的“迁移门户”中运行迁移评估。迁移门户提供了多种资源来帮助您迁移到 MariaDB。在“新迁移”部分,您可以选择要从中迁移的数据库并获得定制的迁移评估,以帮助您评估和规划迁移项目。
验证当前的 SQL MODE
因为变量会变化并且可以由外部软件调整,所以值得仔细检查SQL_MODE是否正在运行。
从 Linux 终端验证当前 SQL 模式:
sudo mariadb -e "show global variables like 'sql_mode';"
复制
在我们的示例中,它显示了SQL_MODE
变量的默认配置:
+---------------+-------------------------------------------------------------------------------------------+ | Variable_name | Value | +---------------+-------------------------------------------------------------------------------------------+ | sql_mode | STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +---------------+-------------------------------------------------------------------------------------------+
复制
尝试使用 Oracle 语法创建表
让我们尝试在使用默认值的同时使用 Oracle 语法创建一个简单的表SQL_MODE
:
MariaDB [oracle_migration]> CREATE TABLE "customers" ( "CUST_ID" NUMBER(8,0), "FIRST_NAME" VARCHAR2(50 BYTE), "LAST_NAME" VARCHAR2(50 BYTE), "ADDRESS1" VARCHAR2(128 BYTE) ); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '"customers" ("CUST_ID" NUMBER(8,0), "FIRST_NAME" VARCHAR2(50 BYTE), "LAST_NAM...' at line 1
复制
ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MariaDB 服务器相对应的手册
在第 1 行的“客户”(“CUST_ID”NUMBER(8,0)、“FIRST_NAME”VARCHAR2(50 BYTE)、“LAST_NAM…”附近使用的正确语法的版本)
默认情况下,MariaDB 客户端无法识别此语法。许多项目会阻止这种创建,例如双引号。
启用 Oracle 兼容模式
SQL_MODE
将会话更改为 Oracle 兼容模式:
SET SESSION sql_mode='ORACLE'; Query OK, 0 rows affected (0.035 sec)
复制
尝试再次创建同一张表:
MariaDB [oracle_migration]> CREATE TABLE "customers" ( "CUST_ID" NUMBER(8,0), "FIRST_NAME" VARCHAR2(50 BYTE), "LAST_NAME" VARCHAR2(50 BYTE), "ADDRESS1" VARCHAR2(128 BYTE) ); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'BYTE), "LAST_NAME" VARCHAR2(50 BYTE), "ADDRESS1" VARCHAR2(128 BYTE))' at line 1
复制
它再次返回一个错误,但它是一个不同的错误。BYTE
使用 Oracle 兼容模式的 MariaDB 客户端无法识别该值。
那么如何去除BYTE
关键字呢?
我们可以依靠 MariaDB MaxScale 功能来删除和更新实时查询的语法。
MaxScale 2.5 包含一个智能 GUI,可以轻松监控和配置实时流量的 MaxScale。下一步将是关于如何使用 MariaDB MaxScale GUI。
访问 MaxScale GUI
在 MaxScale 上,我们可以定义一个规则来重写实时查询,然后再将其发送到 MariaDB 服务器。当需要调整一些实时查询而不对应用程序产生任何影响时,此功能特别有用。
这些功能还可用于修复应用程序中的拼写错误,而无需进行任何部署或对生产产生任何影响。
配置完成后,默认情况下 MaxScale GUI 在端口 8989 上可用。让我们使用以下地址 https://127.0.0.1:8989 访问此接口。
连接后,访问 MaxScale GUI 监控页面并访问考虑的服务。
MaxScale 配置由几个模块组成。所有这些模块都链接在我们所谓的“服务”中。我们可以在前面的屏幕截图中看到,一个服务正在链接多个服务器、一个监控系统、一个侦听端口、一个路由规则,以及潜在的许多过滤器。
在这种情况下,只定义了一项服务——“读写服务”。让我们通过单击其名称来访问此服务定义:
定义一个新的正则表达式过滤器
在 MariaDB MaxScale 上使用正则表达式过滤器允许您重写实时查询。
首先,返回 MaxScale 概览屏幕并单击 **+ Create New**并定义新过滤器的配置:
选择创建一个新过滤器。
提供与过滤器目标匹配的名称,然后选择“regexfilter”。
在参数中插入匹配参数中要替换的原始值:BYTE\)
要_匹配_括号等特殊字符,请记住通过添加反斜杠将其转义,如图所示。
用所需的值完成替换框。在这种情况下,它是括号而不转义特殊字符。
完成后验证此新规则。
将新规则关联到所需的服务
现在已经创建了新的过滤器,返回到服务定义页面并单击_过滤器部分上的+ 添加过滤器_按钮。
在_添加过滤器_框中,启用新创建的过滤器,以便将其与当前服务和侦听器关联。
完成后,我们可以CREATE TABLE
再次测试我们的命令。
检查新创建的规则
使用mariadb
命令行并访问 MaxScale 服务。
$ mariadb -hmaxscale1.example.com -P4006 -utest -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 10.5.9-6-MariaDB-enterprise MariaDB Enterprise Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
复制
通过 MaxScale 接口连接好后,我们现在可以测试新创建的重写规则。
让我们使用之前创建的数据库:
MariaDB [(none)]> use oracle_migration Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed
复制
在考虑的会话上启用 Oracle 模式:
MariaDB [(none)]> SET SESSION sql_mode='ORACLE'; Query OK, 0 rows affected (0.004 sec)
复制
再次尝试使用完全相同的语法创建此表:
MariaDB [oracle_migration]> CREATE TABLE "customers" ( "CUST_ID" NUMBER(8,0), "FIRST_NAME" VARCHAR2(50 BYTE), "LAST_NAME" VARCHAR2(50 BYTE), "ADDRESS1" VARCHAR2(128 BYTE) ); Query OK, 0 rows affected (0.044 sec)
复制
完成了,根本没有修改应用程序,创建的表没有错误。
当然,可以定义许多其他规则。
文章来源: https://mariadb.com/resources/blog/a-typical-journey-migrating-to-mariadb-from-oracle/