MySQL使用chameleon迁移openGauss问题处理

    • 问题概述

mysql通过chameleon迁移到opengauss3.1时,迁移指令没有报错,但高斯数据库端就是没数据,只有chameleon中间维护的表,最终定位chameleon的日志中如下显示,卡了我两天才解决,应该也有不少人碰到,这里分享出来解决方法。

2023-01-27 14:36:26 MainProcess ERROR: The MySQL configuration does not allow the replica. Exiting now
2023-01-27 14:36:26 MainProcess ERROR: Source settings - log_bin OFF, binlog_format ROW, binlog_row_image FULL, gtid_mode OFF
2023-01-27 14:36:26 MainProcess ERROR: Mandatory settings - log_bin ON, binlog_format ROW, binlog_row_image FULL, gtid_mode ON (only for MySQL 5.6+)
    • 环境

操作系统:openEuler20.03LTS

openGauss:3.1.0企业版

mysql:5.7、8.0、mariaDB 均发生问题

chameleon:3.1.1

    • 迁移过程

chameleon的gitee项目中有文档说明,不用看那么多,最后的实例汇集了关键步骤,chameleon的官方文档点击查看,但成也萧何败也萧何,文档中有一段开启mysql数据库的复制功能的说明,亲测必须开启,但照着操作,mysql数据库无法启动。

创建用户后,修改MySQL的配置文件,开启MySQL的复制功能。(一般是/etc/my.cnf或者/etc/my.cnf.d/mariadb-server.cnf)
在 [mysqld] 配置块下修改如下配置(若没有[mysqld] 配置块新增即可)
[mysqld]
binlog_format = ROW
log_bin = mysql-bin
server_id = 1
binlog_row_image = FULL
gtid_mode = ON
修改完毕后重启MySQL。

经过排除法操作,发现问题出在gtid_mode = ON的设置上,尝试在mysql控制台设置环境变量,被告知只读变量,通过配置文件又无法启动。

    • 解决办法

需要以root身份在mysql服务器端的mysql控制台进行如下操作,其实就是gtid_mode不能直接设置为ON。按下列步骤依次操作即可。

mysql> set global gtid_mode=on;
ERROR 1788 (HY000): The value of @@GLOBAL.GTID_MODE can only be changed one step at a time: OFF <-> OFF_PERMISSIVE <-> ON_PERMISSIVE <-> ON. Also note that this value must be stepped up or down simultaneously on all servers. See the Manual for instructions.
mysql> set global gtid_mode=OFF_PERMISSIVE;
Query OK, 0 rows affected (0.00 sec)
mysql> set global gtid_mode=ON_PERMISSIVE;
Query OK, 0 rows affected (0.02 sec)
mysql> set global gtid_mode=ON; 此处会有提示信息,必须要先设置 enforce_gtid_consistency=on
ERROR 3111 (HY000): SET @@GLOBAL.GTID_MODE = ON is not allowed because ENFORCE_GTID_CONSISTENCY is not ON.
mysql> set global enforce_gtid_consistency=on;
Query OK, 0 rows affected (0.00 sec)
mysql> set global gtid_mode=ON;
Query OK, 0 rows affected (0.01 sec)

操作完成按文档说明重新迁移即可

chameleon create_replica_schema --configdefault

chameleon add_source --config default--source mysql

chameleon init_replica --config default--source mysql

    • 部分数据迁移失败处理

自定义函数、属视图、存储过程、最终迁移失败,部分表的数据插入失败,记得查看日志,日志位置在

/home/omm/.pg_chameleon/logs,我日志里的错误就是性别长度造成的。

顺便提一下,配置文件目录不用手动创建,运行chameleon set_configuration_files命令自动生成。

    • 兼容性处理

兼容性造成的问题,这个可以做适配但着实麻烦。chameleon的配置文件模板里给了参照。

# 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.

#下面就是示例,将某些数据库的布尔型表示的tinyint转换成布尔型
type_override:
  "tinyint(1)":
    override_to: boolean
    override_tables:
      - "*"


# postgres  destination connection
pg_conn:
  host: "localhost"
  port: "5432"
  user: "usr_replica"
  password: "never_commit_password"
  database: "db_replica"
  charset: "utf8"

sources:
  mysql:
    readers: 4
    writers: 4
    db_conn:
      host: "localhost"
      port: "3306"
      user: "usr_replica"
      password: "never_commit_passwords"
      charset: 'utf8'
      connect_timeout: 10
    schema_mappings:
      delphis_mediterranea: loxodonta_africana   #这个很重要不要搞错了,左边是源,右边是生成的目标

如果解决了你的问题,求打赏~😄

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Opengauss Chameleon是一种兼容MySQL协议的数据库引擎,它是基于Opengauss数据库开发的。Opengauss是华为公司自主研发的一个开源数据库,与传统的关系型数据库相比,Opengauss具有更高的性能和更好的扩展性。 Opengauss Chameleon使用可以帮助用户在原有的MySQL应用上,无需修改代码即可迁移Opengauss数据库中。该引擎在逻辑上实现了MySQL协议,可以直接处理来自MySQL客户端的请求,无需通过中间件进行转换。这样一来,用户可以在部署MySQL应用时,将数据库引擎替换为Opengauss Chameleon,实现无缝的迁移Opengauss Chameleon内部使用Opengauss的存储引擎,支持了很多常见的MySQL特性,如事务、锁机制、索引等。通过Opengauss Chameleon,用户可以在不改变现有应用的情况下,享受到Opengauss数据库的高性能和高可靠性。 Opengauss Chameleon的安装和配置相对简单,用户只需要下载相应的软件包,并按照官方文档进行安装和配置即可。安装完成后,用户可以在MySQL客户端中连接到Opengauss Chameleon,然后像连接MySQL数据库一样进行操作。 总结来说,Opengauss Chameleon使用可以让用户在不改动现有应用的情况下,将MySQL应用迁移Opengauss数据库上。它提供了MySQL协议的兼容性和Opengauss本身的高性能,方便用户享受到Opengauss数据库的优势。使用Opengauss Chameleon,用户可以更好地利用现有的应用和数据库资源,提升系统性能和可靠性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盐池虾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值