文档章节

MySQL 新增库同步到Slave

cwalet
 cwalet
发布于 2016/03/19 13:33
字数 582
阅读 141
收藏 12

由于Master无法停机,并且master同时存在大量INNODB和MyISAM引擎的表,

而且总体数据量很大,因此无法通过常规的手段来重做Slave。

现在需要新增某个库的同步,刚好这个库在Slave上设置了replicate-ignore-db(历史原因),

所幸这个库里的表全部是INNODB,可以通过如下方法来实现。


  • 首先在Master上将该库导出,使用mysqldump不加锁导出或者使用percona-xtrabackup实现:
slave=1.1.1.1
db='new_db'
mysqldump -S /tmp/mysql.sock --single-transaction --master-data=2 -aqC --compact --skip-add-drop-table --default-character-set=UTF8 -B $db | gzip -c | ssh $slave "gzip -cd > /tmp/$db.sql"

注意由于导出时加了master-data=2 参数,所以导出文件的第一行是被注释掉的change master 信息,

从中可以知道导出时刻的binlog位置,也就是起始位置。


  • 然后ssh登入Slave,将上述导出的文件导入到Slave中并停止同步:
mysql -S /tmp/mysql.sock < /tmp/$db.sql
mysql -S /tmp/mysql.sock -e 'STOP SLAVE;SHOW SLAVE STATUS;' | egrep 'Relay_Master_Log_File|Exec_Master_Log_Pos'

并记录下当前Slave同步到的Master的binlog位置,

注意一定要停止同步后再记录,否则很有可能会漏掉部分事务,导致同步无法重启。


  • 接下来最关键的一步是将导出新库到Slave同步停止这一段时间新库产生的事务从binlog中解析出来:

mysqlbinlog --base64-output=decode-rows -vv -d $db --set-charset=UTF8 -S /tmp/mysql.sock --start-position=$master_data --stop-position=$Exec_Master_Log_Pos /data/mysql/data/$Relay_Master_Log_File | gzip -c | ssh $slave "gzip -cd > /tmp/$db.last.binlog.sql"

上面语句中的三个变量master_dataExec_Master_Log_PosRelay_Master_Log_File分别就是前几步记录的。

传送到Slave后再导入MySQL,但是我在操作中遇到执行导入命令时MySQL报语法错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server...

但是看binlog解析的SQL文件又没找到问题,于是只好手工过滤:

egrep -i 'insert|update|delete|replace' /tmp/$db.last.binlog.sql | sed 's/$/;/' | mysql -S /tmp/mysql.sock

实际上这样操作会有问题,对于使用参数替换的动态SQL会被过滤掉,因此最好是去掉注释行后直接导入.


  • 最后再Slave上START SLAVE; 即大功告成。

© 著作权归作者所有

cwalet
粉丝 44
博文 111
码字总数 87663
作品 0
其他
私信 提问
Keepalived+MySQL双主高可用配置

1.安装环境: 服务器 IP OS MySQL同步用户名/密码 VIP master1 192.168.0.110 CentOS 7.5 sync/syncpwd 192.168.0.250 master2 192.168.0.111 CentOS 7.5 sync/syncpwd 192.168.0.250 MySQL:......

湖之风情
05/11
0
0
MySQL主从复制(Master-Slave)实践

实现MySQL主从复制需要进行的配置: 主服务器: 开启二进制日志 配置唯一的server-id 获得master二进制日志文件名及位置 创建一个用于slave和master通信的用户账号 从服务器: 配置唯一的ser...

bobway
2018/06/14
0
0
22-主从复制

mysql主从复制 主从复制的作用:数据库备份,读写分离,数据库负载均衡,高可用,集群。 主从复制产生问题: 1:延迟性 比较少见 先查从节点,在查主节点 2:主从同步不一致 清除从所有数据,...

Z-向上
2018/01/18
0
0
部署MySQL延迟从库的几个好处

导读 MySQL延迟从库的好处多多,你了解吗 MySQL的主从复制(replication)关系,不太严谨的叫法是“同步”或者“主从同步”。实际上在早期,MySQL的主从并不能实现真正的“同步”(sync),而是“...

老叶茶馆
05/10
0
0
MySQL 主从复制

MySQL 主从复制原理 Mysql 主从同步其实是一个异步复制的过程,要实现复制首先需要在 master 上开启bin-log 日志功能,整个过程需要开启 3 个线程,分别是 Master 开启 IO 线程,slave开启 ...

Hai_Mo
2017/09/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 因违反《中华人民共和国治安管理处罚法》第四十四条之规定

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :#今日歌曲推荐# 惊艳分享谷微的单曲《安守本份》(@网易云音乐) 《安守本份》- 谷微 手机党少年们想听歌,请使劲儿戳(这里) ...

小小编辑
18分钟前
31
0
Angular 英雄编辑器

应用程序现在有了基本的标题。 接下来你要创建一个新的组件来显示英雄信息并且把这个组件放到应用程序的外壳里去。 创建英雄组件 使用 Angular CLI 创建一个名为 heroes 的新组件。 ng gener...

honeymoose
今天
6
0
Kernel DMA

为什么会有DMA(直接内存访问)?我们知道通常情况下,内存数据跟外设之间的通信是通过cpu来传递的。cpu运行io指令将数据从内存拷贝到外设的io端口,或者从外设的io端口拷贝到内存。由于外设...

yepanl
今天
6
0
hive

一、hive的定义: Hive是一个SQL解析引擎,将SQL语句转译成MR Job,然后再在Hadoop平台上运行,达到快速开发的目的 Hive中的表是纯逻辑表,就只是表的定义,即表的元数据。本质就是Hadoop的目...

霉男纸
今天
7
0
二、Spring Cloud—Eureka(Greenwich.SR1)

注:本系列文章所用工具及版本如下:开发工具(IDEA 2018.3.5),Spring Boot(2.1.3.RELEASE),Spring Cloud(Greenwich.SR1),Maven(3.6.0),JDK(1.8) Eureka: Eureka是Netflix开发...

倪伟伟
昨天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部