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

发表于:2020-7-16 11:34

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:知洲    来源:掘金

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

本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号