Mysql数据迁移工具介绍 datax && canal + otter

Mysql数据库迁移说明文档

1、使用工具及工程

使用工具作用
datax存量数据迁移
canal + otter增量数据迁移–方案

增量数据迁移,方案一和方案二,选择其中一个即可

2、前提步骤

1、待同步的Mysql,需要开启binlog日志

[mysqld]
server_id=1       # 服务编号, 与其它节点不冲突即可
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式

1、将所有的表结构,通过工具或者命令导出(只导表结构),形成.sql文件

2、将sql文件中的相关表结构进行修改

  1. 修改存储引擎,将MyISAM修改为InnoDB
  2. 将某些表结构中,主键id的类型,由int类型,修改为bigint类型

3、针对特殊的表数据,进行单独处理

3、datax使用说明

参考文档:

1、https://github.com/alibaba/DataX/blob/master/introduction.md

2、https://blog.youkuaiyun.com/weixin_46902396/article/details/121904705

3.1、读取目标库中的表名循环

/data/datax/bin/all_Sync_Task.sh

# vi /data/datax/bin/all_Sync_Task.sh 
#!/bin/bash
. /etc/profile

# 读库的变量 待修改
r_ip="******"				#源库地址
r_port="3306"				#源库端口号
r_username="root"			#源库用户
r_password="******"			#源库密码
dbname="test"	            #源库database

# 写入库的变量 待修改
w_ip="******"		     	#目标库的地址
w_port="3306"				#目标库的端口号
w_username="root"			#目标库的用户
w_password="******"		    #目标库的密码
w_dbname="test"				#目标库database

Tool_Datax='/usr/bin/python2.7 /data/datax/bin/datax.py'

# 获取库名
Mysql_Names=`mysql -h$r_ip -u$r_username -p$r_password -P$r_port -e "show databases\G" |grep 'Database'|awk -F'Database: ' '{print $2}' |grep -v 'information_schema\|performance_schema\|test\|sys\|mysql\|test1|'`

# 获取表名
table_tchema=`mysql -h$r_ip -u$r_username -p$r_password -P$r_port -e "use ${dbname}; show full tables;"|grep 'TABLE'|awk '{print $1}'`
#echo $table_tchema;

#循环导入数据库
for table_name in $table_tchema;
    do
        echo $table_name;
        $Tool_Datax  /data/datax/job/mysql2mysql_All.json -p "-Dr_ip=$r_ip -Dr_port=$r_port -Dr_dbname=$dbname -Dr_username=$r_username -Dr_password=$r_password -Dw_ip=$w_ip -Dw_port=$w_port -Dw_dbname=$w_dbname -Dw_username=$w_username -Dw_password=$w_password -Dtable_name=$table_name"
done

需要修改all_Sync_Task.sh脚本中读库和写库相对应的变量

3.2、撰写job脚本

/data/datax/job/mysql2mysql_All.json

{
    "job": {
		"setting": {
            "speed": {
                "channel": 50
            },
			"errorLimit": {
                "record": 0,
                "percentage": 0.02
            }
        },
        "content": [
            {
                "reader": {
                    "name": "mysqlreader", 
                    "parameter": {
						"column": ["*"],
                        "connection": [
                            {
                                "jdbcUrl": ["jdbc:mysql://${r_ip}:${r_port}/${r_dbname}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull"],
                                "table": ["${table_name}"]
                            }
                        ], 
						"username": "${r_username}",
                        "password": "${r_password}"
                    }
                }, 
                "writer": {
                    "name": "mysqlwriter", 
                    "parameter": {
						"writeMode": "insert",
                        "column": ["*"],
                        "session": [
                        	"set session sql_mode='ANSI'"
                        ],
                        "preSql": [
                            "truncate ${table_name}"
                        ],
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:mysql://${w_ip}:${w_port}/${w_dbname}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull", 
                                "table": ["${table_name}"]
                            }
                        ],
						"username": "${w_username}",
                        "password": "${w_password}"
                    }
                }
            }
        ]
    }
}

mysql2mysql_All.json,根据情况,修改channel的值

3.3、执行

[root@server02 bin]# sh all_Sync_Task.sh

3.4、特殊表处理

针对某些表结构或者或者数据的特殊要求,需要针对这些表进行特殊的处理,大致有如下几种情况:

  1. 表存储引擎必须是InnoDB,不支持MyISAM
  2. 表中必须包含主键
  3. 表字段中,若存在函数表达式生成的值,则会插入数据失败(eg:date_format等函数)
  4. 表字段存在外检依赖,需要提前特殊处理

4、增量数据迁移方案:otter使用说明

官方网站:https://github.com/alibaba/otter

地址用户名密码
安装服务器地址:8090adminadmin

配置顺序:数据源–>数据表–>canal–>channel配置–>pipline

4.1、数据源配置

在这里插入图片描述
在这里插入图片描述

配置完数据源以后,验证链接数据源以后,再进行保存

注意:待同步的源库和目标库,都是需要在此处进行配置的

4.2、数据表配置

在这里插入图片描述

在这里插入图片描述

上图示例中,表示的是同步 源库地址(替换成自己的地址) 中test库下的所有的表

注意:源库和目标库的表同步规则,都需要在此处进行配置

4.3、canal配置

在这里插入图片描述
在这里插入图片描述

4.4、channel配置

在这里插入图片描述

在这里插入图片描述

4.5、pipline配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

高级设置中,注意以下几个参数:

在这里插入图片描述

4.6、添加同步映射规则

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

源数据表和目标数据表的选择,选择的是4.2中新建的数据表

注意,如果是mysql到mysql ,两个白方框里面什么都不用写

4.7、启动&&检查

启动channel,是的运行状态变为运行

在这里插入图片描述

检查Pipeline是否正常

在这里插入图片描述

在这里插入图片描述

4.8、同步验证

在源数据库中,增加数据,然后会同步到目标库对应的表中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值