使用 Docker 官方镜像进行迁移

在这篇博客中,我们将探讨如何设置 Docker Compose 文件以从 MySQL 5.7 迁移到最新的 MariaDB。

在下一篇博客中,我们将解释如何设置 Docker Compose 文件以从 MySQL 8.0 迁移到 MariaDB。

从 MySQL 5.7 迁移到 MariaDB 的步骤如下:

  1. 通过运行 Docker Compose 文件启动容器
  2. 使用 MySQL 数据目录并通过 MARIADB_AUTO_UPGRADE=1 启动 MariaDB

让我们探讨每个步骤。

1. 启动 MySQL

使用以下 Docker Compose 文件启动 MySQL 容器。

使用容器实现 MariaDB 半同步复制

在博客 使用容器实现 MariaDB 复制 中,我们展示了如何使用 Docker 容器在 MariaDB 中正确复制数据。
我们使用了标准复制、异步复制或惰性复制。

这种类型的复制存在的问题是,如果主服务器宕机,可能会导致数据丢失。在主服务器上提交的事务不会发送到副本服务器,并且副本服务器不会提交更改。在这种情况下,从主服务器故障转移到副本服务器可能导致相对于主服务器而言事务丢失。

为了克服这类错误,MariaDB 自 10.4 版本起集成了半同步复制,以及我们计划最终实现为 MDEV-19140 的完全同步复制。

Connect SE JDBC 表类型:访问其他 DBMS 中的表

在这篇博客中,我们将展示如何从 MariaDB Server 访问 MySQL 和 MariaDB DBMS 表。为此,我们将使用 Connect Storage Engine (SE),它支持不同的表类型选项。在这种情况下,我们将使用JDBC 表类型。要使用 JDBC 表类型,我们需要在 Connect SE 的 CREATE TABLE 定义中指定它,并且需要用于访问的 DBMS 的 Java 连接器。出于演示目的,我们将使用容器,但这在服务器运行在虚拟机或裸机上时也适用。只需确保机器可以通过 TCP/IP 相互访问即可。

使用 Docker 和 Connect SE 将数据从 Oracle 迁移到 MariaDB:一步步指南

在这篇博客中,我们将学习如何将数据从 Oracle 迁移到 MariaDB。

首先,我们将了解 Oracle 数据库的基础知识,以便理解演示示例中执行的步骤。之后,我们将在 Oracle 中创建一个表,并将其迁移到 MariaDB。

从 Oracle 迁移数据有两种方法

  1. 将 Oracle 数据导出为 CSV 并加载到 MariaDB 中。
  2. 使用Connect 存储引擎根据 Oracle 的源定义创建或插入表。

为了演示,我们将使用带有 Oracle Express Edition (XE) 镜像的 Docker 容器。

适用于 RPM 的新 GPG 发布密钥

正如之前发布的版本说明中所述(例如 10.6.11),我们适用于 Red Hat Enterprise Linux, Centos, Fedora, openSUSE 和 SUSE 的 Yum/DNF/Zypper 软件源将从下一批版本开始迁移,使用带有 SHA2 摘要算法的新GPG 密钥进行签名,而非 SHA1。

我们正在迁移到的密钥与我们已经用于 Debian 和 Ubuntu 软件源的密钥相同。

  • 短密钥 ID 为:0xC74CD1D8
  • 长密钥 ID 为:0xF1656F24C74CD1D8
  • 密钥的完整指纹为:177F 4010 FE56 CA33 3630 0305 F165 6F24 C74C D1D8

现在可以使用以下命令导入密钥,为本次更改做准备

sudo rpm –import https://rpm.mariadb.org/RPM-GPG-KEY-MariaDB

在软件源文件中包含 gpgkey=https://mirror/yum/RPM-GPG-KEY-MariaDB 的用户仍然可以使用,您只需要在 DNF 更新时接受新密钥即可。

MariaDB 中的 Gcov

Gcov 是一个代码覆盖率测试工具,用于创建更好的程序。它可以显示代码库中哪些部分未经测试。Gcov 位于与 *gcc* 相同的软件包中。MariaDB 注重代码质量,并使用 Gcov 检查测试覆盖率。我们期待 Gcov 很快能作为我们的 buildbot (MDBF-158) 的一部分使用。

如何使用 Gcov

让我们写一个演示示例来展示它是如何工作的。

— 源代码

$ cat -n test.c
int f1()
{
return 0; …

MariaDB 中 replicate_rewrite_db 作为系统变量

MariaDB 10.11.0,我们的最新预览版,包含许多改进。我们在此讨论的是replicate-rewrite-db。基于MDEV-15530,此选项自 10.11.0 版本起成为系统变量。在此版本之前,它只是 mariadbd 和 mariadb-binlog 二进制文件使用的一个选项。该选项的行为没有变化;它只是变成了一个动态变量。

如何试用此功能

最快的方法是在 docker / podman 中试用 MariaDB 10.11(请参阅博客 使用容器实现 MariaDB 复制),使用以下命令:

要启动主 10.11.0 MariaDB 容器,克隆目录,进入克隆的目录并运行以下命令:

docker run -d –rm –name mariadb-primary \
-v $PWD/config-files/primarycnf:/etc/mysql/conf.d:z \
-v $PWD/primaryinit:/docker-entrypoint-initdb.d:z \
-v $PWD/log-files-primary:/var/lib/mysql \
-e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=True \
quay.io/mariadb-foundation/mariadb-devel:10.11

要启动副本/辅助服务器,请运行命令以启动 mariadbd 进程,并在命令行上指定 replicate-rewrite-db 选项:

docker run -d –rm –name mariadb-secondary-1 \
-v $PWD/config-files/secondary-1:/etc/mysql/conf.d:z \
-v $PWD/secondaryinit:/docker-entrypoint-initdb.d:z \
-v $PWD/log-files-secondary-1:/var/lib/mysql \
-e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=True \
quay.io/mariadb-foundation/mariadb-devel:10.11 –replicate-rewrite-db=’db1->db2′

除了将选项指定为命令行参数外,您还可以使用配置文件。

MariaDB & K8s:如何在 K8s 中复制 MariaDB

前一篇博客中,我们已经了解了如何创建有状态集 MariaDB 应用程序。此外,我们还在这篇博客中了解了 MariaDB 的复制工作原理。现在,我们将尝试创建具有复制功能的有状态集应用程序。作为撰写这篇博客的良好参考,我特别感谢Kubernetes 文档以及来自阿里云的一个示例。

配置复制

为了复制 MariaDB 应用程序,我们将创建一个有状态集,它将包含一个Init 容器和一个应用程序容器。