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: booleanoverride_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: 4writers: 4db_conn:host: "localhost"port: "3306"user: "usr_replica"password: "never_commit_passwords"charset: 'utf8'connect_timeout: 10schema_mappings:delphis_mediterranea: loxodonta_africana #这个很重要不要搞错了,左边是源,右边是生成的目标
如果解决了你的问题,求打赏~😄
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
