当前位置: 首页 > news >正文

数据库主从复制

主从复制

主从复制架构和原理

  • 读写分离

  • 复制:每个节点都有相同的数据集,向外扩展,基于二进制日志的单向复制

主从复制原理

1主节点负责用户的写操作,用户发起写操作后,会修改数据库
2.数据库修改后,会更新主节点上的二进制日志
3.主服务器会产生一个 dump线程, 一边读取二进制日志一边将二进制日志通过 网络传给从服务器
4.从服务器会开启io线程,接收主服务器的二进制日志
5 会写入中继日志,这时只是生成了一个文件,并没有同步
6.从服务器再开启 sql线程将 中继日志中 操作写入数据库完成更新

主从复制实战

#主服务器
vim /etc/my.cnf[mysqld]
server-id=1
log-bin=/data/mysql/mysql-binmkdir /data/mysql -p
chown mysql.mysql /data -R
systemctl restart mysqldmysql 登录数据库 新建同步用户
grant replication slave on *.* to test@'%' identified by 'Admin@123',
show master status; #查看同步文件和 同步的位置

请添加图片描述

#从服务器
vim /etc/my.cnf[mysqld]
server-id=2 #要和主不一样
log-bin=/data/mysql/mysql-binmkdir /data/mysql-0chown mysql.mysql /data -R
systemctl restart mysqld
mysql登录数据库 添加主的信息help change master to
#查看change master to 的格式,注意信息的修改CHANGE MASTER TOMASTER_HOST='192.168.10.101',MASTER_USER='test',MASTER_PASSWORD='Admin@123',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=1240;
#开启io线程 以及sq| 线程start slave;
show processlist;#看到进程列表
show slave status\G; # 查看从服务器状态
#去主新建数据库 验证从是否同步#如果两个线程不是yes
stop slave;
reset slave all;
#重新配置create database cc;
#在主建立数据库验证,从如果同步上了就是主从复制成功了

请添加图片描述
请添加图片描述

半同步复制

默认情况下,MySQL的复制功能是异步的,异步复制可以提供最佳的性能,主库把binlog日志发送给从库即结束,并不验证从库是否接收完毕。这意味着当主服务器或从服务器端发生故障时,有可能从服务器没有接收到主服务器发送过来的binlog日志,这就会造成主服务器和从服务器的数据不一致,甚至在恢复时造成数据的丢失

rpm -ql mysql-community-server |grep semisync
#需要安装插件vim  /etc/my.cnf
#修改文件
[mysqld]
server_id=100
log-bin=/data/mysql/mysql-bin
#rpl_semi_sync_master_enabled=ON
#rpl_semi_sync_master_timeout=3000
#修改上面两行,需要先安装semisync_master.so插件后,再重启,否则无法启动 开启半同步
#永久设置3s内无法同步,也将返回成功信息给客户端mkdir /data/mysql/   -p
#建立文件夹
chown mysql.mysql /data/ -R
#注意修改权限
systemctl restart mysqld
mysql -uroot -p123123mysql>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; 
#永久安装插件
#mysql>UNINSTALL PLUGIN rpl_semi_sync_master ;卸载插件
mysql>rpm -ql mysql-community-server |grep semisync #查看插件mysql>SET GLOBAL rpl_semi_sync_master_enabled=1; #临时修改变量
mysql>SET GLOBAL rpl_semi_sync_master_timeout = 3000;  #超时长1s,默认值为10smysql>SHOW GLOBAL VARIABLES LIKE '%semi%';
#查看半同步状态show global status like '%semi%';
#查看半同步客户端show  master  status;grant replication slave on *.* to test@'192.168.91.%' identified by 'Admin@123';
#建立复制用户

请添加图片描述

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
#安装插件vim /etc/my.cnf[mysqld]
server-id=101
rpl_semi_sync_slave_enabled=ON #修改此行,需要先安装semisync_slave.so插件后,再重启,否则无法启动CHANGE MASTER TOMASTER_HOST='192.168.10.101',MASTER_USER='test',MASTER_PASSWORD='Admin@123',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=1240;show global status like '%semi%';
#查看状态  主从状态mysql>SET GLOBAL rpl_semi_sync_slave_enabled=1; #临时修改变量
mysql>SHOW GLOBAL VARIABLES LIKE '%semi%';

主上可以看到两台从机已经生效了
请添加图片描述
请添加图片描述

相关文章:

  • 第5章:软件工程
  • 在window上搭建docker
  • 实验一 MATLAB \ Python数字图像处理初步
  • java web 部分
  • miniprogram-to-uniapp-微信小程序转换成uniapp项目
  • 约瑟夫环-map法
  • Qt源码分析:窗体绘制与响应
  • js文件的执行和变量初始化缓存
  • Java面向对象练习(1.手机类)(2024.7.4)
  • Liunx网络配置
  • Sqlmap中文使用手册 - 各个参数介绍(持续更新)
  • 每日两题 / 20. 有效的括号 155. 最小栈(LeetCode热题100)
  • 实验五 数据库完整性约束的实现与验证
  • linux守护进程生命周期管理-supervisord
  • ABAP开发:动态Open SQL编程案例介绍
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【笔记】你不知道的JS读书笔记——Promise
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • chrome扩展demo1-小时钟
  • Less 日常用法
  • Spring Cloud Feign的两种使用姿势
  • Spring-boot 启动时碰到的错误
  • 前端之React实战:创建跨平台的项目架构
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 我从编程教室毕业
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • #162 (Div. 2)
  • #stm32驱动外设模块总结w5500模块
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (js)循环条件满足时终止循环
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (第27天)Oracle 数据泵转换分区表
  • (循环依赖问题)学习spring的第九天
  • (原创)可支持最大高度的NestedScrollView
  • (杂交版)植物大战僵尸
  • .cfg\.dat\.mak(持续补充)
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .Net 基于MiniExcel的导入功能接口示例
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .net8.0与halcon编程环境构建
  • .NET项目中存在多个web.config文件时的加载顺序
  • .NET中winform传递参数至Url并获得返回值或文件
  • @FeignClient注解,fallback和fallbackFactory
  • @html.ActionLink的几种参数格式
  • @RequestBody与@ResponseBody的使用
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • [20190401]关于semtimedop函数调用.txt
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [C++]C++类基本语法
  • [C++]二叉搜索树
  • [C++基础]-入门知识