tidb同步mysql

Easter79
• 阅读 381

通过kafka处理

  1. 下载;

重新进行ansible-playbook bootstrap.yml

两个pump和drainer在下载的resource/bin/下面。拷贝到 deploy/bin/目录下。

  1. 修改 inventory.ini

设置enable_binlog = True

设置zk地址,不然会报错,一定需要zk

注释原来的#[pump_servers:children]

增加

[pump_servers]

192.xxx.xxx.205

192.xxx.xxx.218

3.滚动升级tidb节点,部署pump

尝试 ansible-playbook rolling_update.yml –tags=tidb

报错如下:

TASK [stop pump by systemd] *******************************************************************************************************************************************************************

fatal: [192.xxx.xxx.205]: FAILED! => {"changed": false, "msg": "Could not find the requested service pump.service: host"}

测试自定义systemd 加入pump

[Unit]

Description=pd service

After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]

LimitNOFILE=1000000

User=tidb

ExecStart=/home/tidb/deploy2/bin/pump -config pump.toml

Restart=always

RestartSec=15s

[Install]

WantedBy=multi-user.target

配置使用到的pump.toml

# pump Configuration.

# pump 提供服务的 rpc 地址(默认 "127.0.0.1:8250")

addr = "127.0.0.1:8250"

# pump 对外提供服务的 rpc 地址(默认 "127.0.0.1:8250")

advertise-addr = ""

# binlog 最大保留天数 (默认 7), 设置为 0 可永久保存

gc = 3

#  pump 数据存储位置路径

data-dir = "data.pump"

# pump 向 pd 发送心跳间隔 (单位 秒)

heartbeat-interval = 3

# pd 集群节点的地址 (默认 "http://127.0.0.1:2379")

pd-urls = "http://192.xxx.xxx.218:2379"

# unix socket 模式服务监听地址 (默认 unix:///tmp/pump.sock)

socket = "unix:///tmp/pump.sock"

#log-file

log-file = "/home/tidb/deploy2/log/pump.log"

发现systemd启动不了,查看日志 ,路径为

/var/log/messages

Nov 20 10:34:12 TEST-1807-V002 pump: 2018/11/20 10:34:12 main.go:23: #033[0;31m[fatal] verifying flags error, open pump.toml: no such file or directory. See 'pump --help'.#033[0m

Nov 20 10:34:12 TEST-1807-V002 systemd: pump.service: main process exited, code=exited, status=255/n/a

Nov 20 10:34:12 TEST-1807-V002 systemd: Unit pump.service entered failed state.

Nov 20 10:34:12 TEST-1807-V002 systemd: pump.service failed.

是路径不对:修改后 systemctl daemon-reload

再次重启

[root@TEST-1807-V002 ~]# ps -ef|grep pump

tidb     23063     1  0 10:37 ?        00:00:00 /home/tidb/tidb-binlog/bin/pump -configl /home/tidb/depoy/conf/pump.toml

root     23092 21306  0 10:38 pts/1    00:00:00 grep --color=auto pump

可以启动

尝试停止

[root@TEST-1807-V002 ~]# systemctl stop  pump.service

[root@TEST-1807-V002 ~]# ps -ef|grep pump

root     23136 21306  0 10:40 pts/1    00:00:00 grep --color=auto pump

停止成功

其实上面的主要是升级程序能走通,后面升级程序会自己生成脚本,进行部署,deploy.

再次ansible-playbook rolling_update.yml –tags=tidb

PLAY RECAP ************************************************************************************************************************************************************************************

192.xxx.xxx.205            : ok=48   changed=6    unreachable=0    failed=0  

192.xxx.xxx.218            : ok=49   changed=12   unreachable=0    failed=0  

192.xxx.xxx.219            : ok=8    changed=0    unreachable=0    failed=0  

192.xxx.xxx.220            : ok=8    changed=0    unreachable=0    failed=0  

192.xxx.xxx.221            : ok=9    changed=0    unreachable=0    failed=0  

localhost                  : ok=1    changed=0    unreachable=0    failed=0  

Congrats! All goes well. :-)

审计tidb 节点成功升级,部署pump进程成功。

4.部署drainer

官方文档上写明需要手工部署。

a.配置drainer配置文件:

# drainer Configuration.

# drainer 提供服务的地址(默认 "127.0.0.1:8249")

addr = "192.xxx.xxx.218:8249"

# 向 pd 查询在线 pump 的时间间隔 (默认 10,单位 秒)

detect-interval = 10

# drainer 数据存储位置路径 (默认 "data.drainer")

data-dir = "/home/tidb/deploy2/data.drainer"

#pd-urls = "http://192.xxx.xxx.205:2379,http://192.xxx.xxx.218:2379,http://192.xxx.xxx.219:2379"

# log 文件路径

log-file = "/home/tidb/deploy2/log/drainer.log"

zookeeper-addrs="192.168.110.22:2181"

kafka-addrs="192.xxx.xxx.66:9092,192.xxx.xxx.67:9092"

kafka-version="0.10.2.1"

# Syncer Configuration.

[syncer]

## db 过滤列表 (默认 "INFORMATION_SCHEMA,PERFORMANCE_SCHEMA,mysql,test"),

## 不支持对 ignore schemas 的 table 进行 rename DDL 操作

ignore-schemas = "INFORMATION_SCHEMA,PERFORMANCE_SCHEMA,mysql"

# 输出到下游数据库一个事务的 sql 数量 (default 1)

txn-batch = 1

# 同步下游的并发数,该值设置越高同步的吞吐性能越好 (default 1)

worker-count = 1

# 是否禁用拆分单个 binlog 的 sqls 的功能,如果设置为 true,则按照每个 binlog

# 顺序依次还原成单个事务进行同步( 下游服务类型为 mysql, 该项设置为 False )

disable-dispatch = false

# drainer 下游服务类型 (默认为 mysql)

# 参数有效值为 "mysql", "pb"

db-type = "mysql"

# replicate-do-db priority over replicate-do-table if have same db name

# and we support regex expression ,

# 以 '~' 开始声明使用正则表达式

#replicate-do-db = ["~^b.*","s1"]

#[[syncer.replicate-do-table]]

#db-name ="test"

#tbl-name = "log"

#[[syncer.replicate-do-table]]

#db-name ="test"

#tbl-name = "~^a.*"

# db-type 设置为 mysql 时,下游数据库服务器参数

[syncer.to]

host = "192.168.216.22"

user = "drainer"

password = "123456"

port = 3306

主要需要配置的上面标红的内容。

b.配置systemd

[Unit]

Description=drainer service

After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]

LimitNOFILE=1000000

User=tidb

ExecStart=/home/tidb/deploy2/bin/drainer -config /home/tidb/deploy2/conf/drainer.toml

Restart=always

RestartSec=15s

[Install]

WantedBy=multi-user.target

systemctl daemon-reload

为了测试效果:

在测试库中新建数据库

MySQL [antiml]> create database caoyf;

Query OK, 0 rows affected (1.04 sec)

MySQL [caoyf]> create table test(id int);

Query OK, 0 rows affected (2.04 sec)

MySQL [caoyf]> insert into test values(1);

Query OK, 1 row affected (0.14 sec)

MySQL [caoyf]> select * from test;

+------+

| id   |

+------+

|    1 |

|    2 |

+------+

2 rows in set (0.01 sec)

c. 生成 drainer savepint 文件

/home/tidb/deploy2/bin/drainer -gen-savepoint --data-dir=/home/tidb/deploy2/data.drainer  --pd-urls=http://192.xxx.xxx.205:2379,http://192.xxx.xxx.218:2379,http://192.xxx.xxx.219:2379

在drainer配置文件中配置同步的起点tso

查看

为了测试,先全量备份数据

./mydumper -h  192.xxx.xxx.205 -P 4000     -u root -p 'xxxx' -t 4 -F 64 -B caoyf  --skip-tz-utc -o  /tmp/caoyf

传到对应的mysql机器

在新的库进行恢复

./loader  -u root -p xxxxx  -P 3306   -d  /tmp/caoyf

查看已恢复:

mysql> show tables;

+-----------------+

| Tables_in_caoyf |

+-----------------+

| test            |

+-----------------+

1 row in set (0.00 sec)

mysql> select * from test;

+------+

| id   |

+------+

|    1 |

|    2 |

+------+

2 rows in set (0.00 sec)

再在tidb插入几条数据:

MySQL [(none)]> use caoyf

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

MySQL [caoyf]> insert into test values(3);

Query OK, 1 row affected (0.02 sec)

MySQL [caoyf]> insert into test values(4);

Query OK, 1 row affected (0.02 sec)

d.启动drainer (希望能成功!!!!!)

报错,显示连不到kafka

需要配置pump 进行指定kafka,特别注意各版本的参数不一样,需要仔细查看对应的版本。-help查看参数内容。

后修改/home/tidb/deploy2/scripts/run_pump.sh

exec bin/pump \

    --gc="5" \

    --addr="0.0.0.0:8250" \

    --advertise-addr="192.xxx.xxx.218:8250" \

    --pd-urls="http://192.xxx.xxx.205:2379,http://192.xxx.xxx.218:2379,http://192.xxx.xxx.219:2379" \

    --zookeeper-addrs="192.168.110.22:2181" \

    --data-dir="/home/tidb/deploy2/data.pump" \

    --socket="/home/tidb/deploy2/status/pump.sock" \

    --log-file="/home/tidb/deploy2/log/pump.log" \

    --kafka-addrs="192.xxx.xxx.67:9092,192.xxx.xxx.66:9092"\

    --zookeeper-addrs="192.168.110.22:2181"\

    --kafka-version="0.10.2.1"\

    --config=conf/pump.toml

后启动drainer 

systemctl start drainer.service

查看日志:

2018/11/21 15:30:31 config.go:382: [sarama] ClientID is the default of 'sarama', you should consider setting it to something application-specific.

2018/11/21 15:30:31 broker.go:146: [sarama] Connected to broker at 192.xxx.xxx.66:9092 (registered as #1)

2018/11/21 15:30:31 consumer.go:712: [sarama] consumer/broker/1 added subscription to 6626154907404840978_TEST-1807-V003_8250/0

2018/11/21 15:34:11 syncer.go:453: [info] [ddl][start]create database test_caoyf;[commit ts]404431999019253762[pos]{0 908}

2018/11/21 15:34:11 syncer.go:255: [info] [write save point]404431999019253762[positions]map[TEST-1807-V002:8250:{0 908}]

2018/11/21 15:34:11 syncer.go:462: [info] [ddl][end]create database test_caoyf;[commit ts]404431999019253762[pos]{0 908}

2018/11/21 15:35:51 syncer.go:453: [info] [ddl][start]use `test_caoyf`; create table test1(id int);;[commit ts]404432026819624961[pos]{0 944}

2018/11/21 15:35:51 syncer.go:255: [info] [write save point]404432026819624961[positions]map[TEST-1807-V002:8250:{0 944}]

2018/11/21 15:35:51 syncer.go:462: [info] [ddl][end]use `test_caoyf`; create table test1(id int);;[commit ts]404432026819624961[pos]{0 944}

一些测试。日志显示成功,在下游mysql 查看包括建库,见表,简单插入同步没有问题。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k