功能介绍
chameleon是一个用Python3编写的将MySQL迁移至openGauss的实时复制工具,支持初始全量数据的复制以及后续增量数据的实时在线复制功能。chameleon通过一次初始化配置,使用只读模式,将MySQL的数据全量拉取到openGauss。支持在同一快照下,表间数据并行迁移。
全量迁移支持的功能:支持表及表数据、视图、触发器、自定义函数、存储过程的全量迁移
特性优势
基于sysbench测试模型,在Kunpeng-920 2p服务器上,MySQL数据库10张表单(无主建)表数据量在500万以上时,chameleon使用20并发迁移数据至openGauss,整体全量迁移性能可达300M/S以上。
环境准备
ARM+openEuler 20.03 或 X86+CentOS 5.7
安装chameleon工具
-
whl安装
-
下载安装包。安装包下载地址:https://opengauss.obs.cn-south-1.myhuaweicloud.com/latest/chameleon/chameleon-1.0.0-py3-none-any.whl,下载完成后,通过Python virtual env环境进行安装。
-
执行如下命令创建Python虚拟环境并激活。
""
python3 -m venv venv source venv/bin/activate
-
执行如下命令通过pip安装chameleon工具。
""
pip3 install ./chameleon-1.0.0-py3-none-any.whl
说明:
- 安装过程中,将自动安装该工具依赖的其他库,请确保本机的pip能正常下载安装相关依赖。相关依赖库及版本要求为:
- PyMySQL>=0.10.0, <1.0.0
- argparse>=1.2.1
- mysql-replication>=0.22
- py-opengauss>=1.3.1
- PyYAML>=5.1.2
- tabulate>=0.8.1
- daemonize>=2.4.7
- rollbar>=0.13.17
- geomet>=0.3.0
- mysqlclient>=2.1.1
- mysqlclient的安装需要先使用yum安装mysql-devel,直接使用yum install mysql-devel即可。
-
-
源码安装
-
执行如下命令通过git下载源码。
""
git clone git@gitee.com:opengauss/openGauss-tools-chameleon.git
-
创建Python虚拟环境并激活。
""
python3 -m venv venv source venv/bin/activate
-
进入代码的目录,执行python install命令安装。
""
cd openGauss-tools-chameleon python3 setup.py install
安装完成后,不要退出Python虚拟环境,可以开始使用chameleon工具。
-
全量迁移
-
创建配置文件目录。
-
进入Python虚拟环境安装好chameleon工具。
-
执行如下命令创建chameleon配置文件目录。
""
chameleon set_configuration_files
执行该命令后,将在~/.pg_chameleon/configuration目录下创建默认的配置文件模板。
-
执行如下命令复制一份默认的配置文件模板保存为default.yml。
""
cd ~/.pg_chameleon/configuration cp config-example.yml default.yml
-
按照实际情况修改default.yml配置文件作为实际的配置文件。配置文件示例:
""
# 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. type_override: "tinyint(1)": override_to: boolean override_tables: \- "*" \# postgres destination connection pg_conn: host: "1.1.1.1" port: "5432" user: "opengauss_test" password: "password_123" database: "opengauss_database" charset: "utf8" sources: mysql: readers: 4 writers: 4 db_conn: host: "1.1.1.1" port: "3306" user: "mysql_test" password: "password123" charset: 'utf8' connect_timeout: 10 schema_mappings: mysql_database:sch_mysql_database limit_tables: skip_tables: grant_select_to: \- usr_migration lock_timeout: "120s" my_server_id: 1 replica_batch_size: 10000 replay_max_rows: 10000 batch_retention: '1 day' copy_max_memory: "300M" copy_mode: 'file' out_dir: /tmp sleep_loop: 1 on_error_replay: continue on_error_read: continue auto_maintenance: "disabled" gtid_enable: false type: mysql keep_existing_schema: No migrate_default_value: Yes
以上配置文件中参数的含义是:
- 迁移数据时,MySQL侧使用的用户名密码分别是 mysql_test 和 password123。MySQL服务器的IP和port分别是1.1.1.1和3306,待迁移的数据库是mysql_database。
- openGauss侧使用的用户名密码分别是 opengauss_test和 password_123。openGauss服务器的IP和port分别是1.1.1.1和5432,目标数据库是opengauss_database,同时会在opengauss_database下创建sch_mysql_database schema,迁移的表都将位于该schema下。
需要注意的是,这里使用的用户需要有远程连接MySQL和openGauss的权限,以及对对应数据库的读写权限。同时对于openGauss,运行chameleon所在的机器需要在openGauss的远程访问白名单中。对于MySQL,用户还需要有RELOAD、REPLICATION CLIENT、REPLICATION SLAVE的权限。
-
-
初始化迁移过程。
""
chameleon create_replica_schema --config default chameleon add_source --config default --source mysql
此步骤将在openGauss侧创建用于复制过程的辅助schema和表。
-
复制基础数据。
""
chameleon init_replica --config default --source mysql
此步骤完成后,MySQL当前的全量数据会被复制到openGauss。可以在openGauss侧查看全量数据复制后的情况。
-
复制数据库对象。
chameleon支持将视图、触发器、自定义函数、存储过程从MySQL迁移到openGauss。如果日志不需要输出至控制台,可去掉–debug参数。
-
复制视图
""
chameleon start_view_replica --config default --source mysql --debug
-
复制触发器
""
chameleon start_trigger_replica --config default --source mysql --debug
-
复制自定义函数
""
chameleon start_func_replica --config default --source mysql --debug
-
复制存储过程
""
chameleon start_proc_replica --config default --source mysql --debug
可以在对象迁移信息表sch_chameleon.t_replica_object中查看迁移对象的记录。下表展示了t_replica_object表的字段说明。
表 1 信息表sch_chameleon.t_replica_object字段说明
翻译后的语句。如果无法翻译或者翻译出现error的情况为空,openGauss不支持的字段被注释。
说明:- 前往openGauss-tools-sql-translator仓库了解数据库对象的翻译情况。
- 通过chameleon的日志了解数据库对象的翻译情况,chameleon的日志包括翻译过程产生的日志和迁移过程产生的日志。
-
-
结束复制过程及清理资源。
""
chameleon stop_replica --config default --source mysql chameleon detach_replica --config default --source mysql chameleon drop_replica_schema --config default
外键的创建和验证、重置序列(serial)将在detach_replica阶段进行。
卸载chameleon工具
该工具是Python编写的,只需要删除对应的源码和venv环境即可卸载工具。
示例
迁移自定义函数的示例。
""--MySQL侧创建两个自定义函数。
create function mysql_func1(s char(20)) returns char(50) deterministic return concat('mysql_func1, ',s,'!')
create function mysql_func2(x smallint unsigned, y smallint unsigned) returns smallint deterministic BEGIN DECLARE a, b SMALLINT UNSIGNED DEFAULT 10; SET a = x, b = y; RETURN a+b; END;
--迁移自定义函数。
chameleon start_func_replica --config default --source mysql --debug
--此时MySQL侧的自定义函数已成功被迁移过来了。查询sch_chameleon.t_replica_object表(注意en_object_type的值是为大写)即可获取自定义函数的迁移信息。
select * from sch_chameleon.t_replica_object where en_object_type='FUNC';