背景说明

负责公司MySQL数仓的搭建和维护,因为前端业务涉及到一次业务表的分库,导致整个平台新增加一台MySQL服务器,需要将该库数据通过主从复制同步至原有的数仓实例。

数据流向说明如下图:

业务环境说明

MySQL: percona 8.0.16-7 且都开启记录binlog

操作系统:Centos 7

步骤

1: 从源库获取数据库备份

  • 备份源库的方式一般就两种,物理备份和逻辑备份,物理备份使用xtrabackup,逻辑备份直接使用mysqldump

    (因为是在现有的数仓C上新加一个库级别复制B,且B库刚刚新建数据量较少,最好选择逻辑备份的方式)

  • mysqldump使用语句:

mysqldump -uroot -p --master-data=2 --single-transaction -S /data/mysql/3306/mysql_3306.sock -E -R --comments --triggers --databases data1 > /data/data1.sql

ps: 参数--master-data=2 和--single-transaction 一定要加上,一个是获取该服务器的binlog 位点信息,一个是防止对库加锁

  • 获取备份文件中的binlog位点信息 很重要,主从复制必须知道源实例的binlog起始位点

  • 使用shell指令查看备份文件中的位点信息

grep -i "change master" /data/data1.sql -- 查找对应主从位点

2: 还原备份至目标实例

这步简单,将1中的备份sql文件移动到目标服务器中,直接source就好

3: 设置主从复制参数,启动主从复制

  • 新建复制通道指向关系

CHANGE MASTER TO MASTER_HOST='XXXX', MASTER_USER='repl', MASTER_PORT=3306, MASTER_PASSWORD='repl',MASTER_LOG_FILE='mysql-bin.005461', MASTER_LOG_POS=918111162 FOR CHANNEL 'XXXXXX';

复制账户提前建好,通道名自己设置好,一般和库名一致,位点信息就是2中的返回结果,复制过来就好

  • 设置通道的库级别过滤 实例级别主从同步可忽略此步

CHANGE REPLICATION FILTER REPLICATE_DO_DB = (B) FOR channel 'XXXXXX';

通道名上面的保持一致,库名设定好

  • 启动复制通道观察

start slave for channel 'XXXXXX';

-- STOP SLAVE FOR CHANNEL 'XXXXXX'; -- 单独停止该复制通道

4: 检查

  • show slave info -- 查看重点栏位的值,sql进程,io进程是不是yes,有没有延迟

  • 查看数仓中新建的B库表数据有没有变化

总结

主从复制是MySQL中保证高可用的基础,重点是要获取源数据库的binlog起始位点,因为binlog是服务器层log且记录语句完整,在此基础上就可以进行表级别,库级别,实例级别的复制同步

MySQL主从复制--单库复制搭建的更多相关文章

  1. mysql主从复制跳过复制错误【转】

    跳过复制错误 mysql因为binlog机制问题,有些时候会出现从库重放sql执行失败的情况,特别是旧的STATEMENT模式最容易出现这种情况(因为函数和存储过程等原因),这也是为什么强调使用mix ...

  2. MySQL主从复制异步原理以及搭建

    MySQL主从复制的原理: 1.首先,MySQL主库在事务提交时会把数据变更作为时间events记录在二进制日志文件binlog中:MySQL主库上的sync_binlog参数控制Binlog日志以什 ...

  3. MySQL主从复制(异步复制与半同步复制)

    1.MySQl主从复制 原理:将主服务器的binlog日志复制到从服务器上执行一遍,达到主从数据的一致状态. 过程:从库开启一个I/O线程,向主库请求Binlog日志.主节点开启一个binlog du ...

  4. MySQL主从复制半同步复制原理及搭建

    在MySQL5.5之前的版本中,MySQL的复制是异步复制,主库和从库的数据之间存在一定的延迟,比如网络故障等各种原因,这样子容易存在隐患就是:当在主库写入一个事务成功后并提交了,但是由于从库延迟没有 ...

  5. MySQL主从复制之并行复制说明

    传统单线程复制说明 众所周知,MySQL在5.6版本之前,主从复制的从节点上有两个线程,分别是I/O线程和SQL线程. I/O线程负责接收二进制日志的Event写入Relay Log. SQL线程读取 ...

  6. mysql 主从单库单表同步 binlog-do-db replicate-do-db

    方案一:两边做主从. SELECT SUM(DATA_LENGTH)+SUM(INDEX_LENGTH) FROM information_schema.tables WHERE TABLE_SCHE ...

  7. mysql主从复制 主主复制 读写分离

    首先是mysql的主从复制很简单 主主复制也就是互相主从最麻烦的最难的就是日志恢复,增量恢复什么的比较复杂 首先如果你不会安装mysql版本最好一样,或者往上的版本,因为mysql是向下兼容 请注意不 ...

  8. mysql主从复制的异步复制与同步复制

    异 步复制:MySQL本身支持单向的.异步的复制.异步复制意味着在把数据从一台机器拷贝到另一台机器时有一个延时 – 最重要的是这意味着当应用系统的事务提交已经确认时数据并不能在同一时刻拷贝/应用到从机 ...

  9. MySQL主从复制-指定数据库复制

    在/etc/my.cnf添加需要进行同步的数据库信息 #需要进行同步的数据库 #replicate-do-db=custmgr #replicate-do-db=sdata #replicate-ig ...

随机推荐

  1. 如何开发一个自己的npm包

    目录 一.初始化npm包 二.新建自己的工具类 三.新建入口文件index.js 四.编写单元测试 五.登录仓库 六.发布包 七.安装使用 八.删除包 一.初始化npm包 npm init 运行输入包 ...

  2. 使用Apache commons email发送邮件

    今天研究了以下怎么用java代码发送邮件,用的是Apache的commons-email包. 据说这个包是对javamail进行了封装,简化了操作. 这里讲一下具体用法吧 一.首先你需要有邮箱账号和一 ...

  3. Spring系列.事务管理原理简析

    Spring的事务管理功能能让我们非常简单地进行事务管理.只需要进行简单的两步配置即可: step1:开启事务管理功能 @Configuration //@EnableTransactionManag ...

  4. Freemarker在replace替换是对NULL值的处理

    freemarker的对象调用内建函数时,比如userInfo对象的birthDay函数,页面${userInfo.birthDay}调用,当我想将birthDay值中的“-”替换为“/”时,${us ...

  5. SQL注入之Union注入攻击

    union联合查询算是最简单的一种注入了,但是却是经常遇到. 什么是UNION注入 UNION操作符用于合并两个或多个SELECT语句的结果集,而且UNION内部的SELECT语句必须拥有相同数量的列 ...

  6. webpack入门进阶(1)

    1.webpack应用实例 1.1.快速上手 初始化项目 mkdir webpack-demo cd webpack-demo npm init -y 安装webpack npm i webpack@ ...

  7. Linux中清空docker容器日志

    新建文件docker-clear-log,放在/usr/local/bin/目录下,文件内容如下: #!/bin/bash -e if [[ -z $ ]]; then echo "No c ...

  8. Android 错误异常之Error:Unable to resolve dependency for ':app@debug/compileClasspath': Could。。。。

    这个错误一般出现在导入别人的项目的时候出现的, 我出错原因是,as版本3.5.2用了几个月感觉不如3.0.1的带劲,so 该到了3.0.1 ,出现了这个错, 之前也遇到过,基本都是gradle版本的错 ...

  9. 大型Java进阶专题(六)设计模式之代理模式

    代理模式 前言 又开始我的专题了,又停滞了一段时间了,加油继续吧.都知道 SpringAOP 是用代理模式实现,到底是怎么实现的?我们来一探究竟,并且自己仿真手写还原部分细节. 代理模式的应用 在生活 ...

  10. 探讨NET Core数据进行3DES加密或解密弱密钥问题

    前言 之前写过一篇<探讨.NET Core数据进行3DES加密和解密问题>,最近看到有人提出弱密钥问题,换个强密钥不就完了吗,猜测可能是与第三方对接导致很无奈不能更换密钥,所以产生本文解决 ...