ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL主从复制--单库复制搭建

2020-07-15 16:01:24  阅读:284  来源: 互联网

标签:binlog 主从复制 -- 备份 单库 MASTER 位点


背景说明

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

数据流向说明如下图:

主从01.png

业务环境说明

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且记录语句完整,在此基础上就可以进行表级别,库级别,实例级别的复制同步

标签:binlog,主从复制,--,备份,单库,MASTER,位点
来源: https://www.cnblogs.com/shixingchensky/p/13306017.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有