十三、MySQL 主从复制

news2024/11/23 12:08:50

一、MySQL 主从复制

1. 主从复制原理

  1. 主库 有一个 工作线程 I/O dump thread(转储线程)。
  2. 从库 有两个工作线程 I/O thread 和 SQL thread。
  3. 主库 通过 I/O dump thread 给 从库 I/O thread 传送 binlog 日志。
  • 主从同步过程中:
  1. 主库 把接收的 SQL 请求,记录到自己的 binlog 日志中。
  2. 从库 的 I/O thread 去请求主库的 binlog 日志,并将 binlog 日志写到 中继日志 中。
  3. 从库 的 SQL thread 重做 中继日志 中的 SQL 语句。
    在这里插入图片描述

2. 主从复制前提

  1. 主 DBserver 和 从 DBserver 数据库的版本需一致。
  2. 主 DBserver 和 从 DBserver 数据库数据名称需一致。
  3. 主 DBserver 需开启二进制日志。
  4. 主 DBserver 和 从 DBserver 的 server_id 都必须唯一。

二、MySQL 主服务配置

1. 修改主 my.cnf 文件

[mysqld]
# 主服务器唯一ID(一般取IP最后一段)
server-id=101
# 启用二进制日志(文件名称)
log-bin=mysql-bin

# 需要同步的数据库
binlog-do-db=db1
# 不需要同步的数据库
binlog-ignore-db=mysql
binlog_ignore_db=information_schema
binlog_ignore_db=performation_schema
binlog_ignore_db=sys

# 设置 binlog 日志格式(MySQL 默认采用 statement,建议使用 mixed)
binlog_format=MIXED

1. MySQL 复制主要有三种方式
  1. 基于 SQL 语句的复制(SBR,statement-based replication),对应的 binlog 格式 STATEMENT
  2. 基于 行的复制(RBR,row-based replication),对应的 binlog 格式 ROW
  3. 混合模式复制(MBR,mixed-based replication),对应的 binlog 格式 MIXED

2. binlog_format
1. STATEMENT 模式(SBR)
  1. 每一条修改数据的 SQL 语句,会记录到 binlog 中。
  2. 优点:并不需要记录每一条 SQL 语句和 每一行的数据变化,减少了 binlog 日志量,节约 IO,提高性能。
  3. 缺点:在某些情况下会导致(master-slave)中的数据不一致。
    如:sleep()、last_insert_id()、user-defined、functions(udf) 等函数。
2. ROW 模式(RBR)
  1. 不记录每条 SQL 语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。
  2. 而且不会出现某些特定情况下的 存储过程、function、trigger 的调用和触发,无法被正确复制的问题。
  3. 缺点:会产生大量的日志,尤其是 alter table 的时候会让日志暴涨。

3. MIXED 模式(MBR)
  1. 以上两种模式的混合使用,MySQL 会根据执行的 SQL 语句,选择日志的保存方式。
  2. 一般的复制使用 STATEMENT 模式保存 binlog 日志。
  3. 对于 STATEMENT 模式无法复制的操作,使用 ROW 模式保存 binlog 日志。

2. 重启 Master 主服务

service mysqld restart

3. 创建连接帐户并授权

  1. 一般不用 root 帐号,% 表示所有客户端都可以连,只需要帐号密码正确。
  2. 此处可用具体 客户端IP 代替,如:192.168.1.137 加强安全。
# 主库 创建用户及授权
# CREATE USER 'slave1'@'172.20.0.3' IDENTIFIED BY '123456';

# 建立 slave 帐户
mysql>GRANT FILE ON *.* TO 'backup'@'%' IDENTIFIED BY '123456';
# 授权 slave 帐户
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%' identified by '123456'; 

# 刷新权限
mysql>FLUSH PRIVILEGES;

# 查看 MySQL 当前有哪些用户
mysql>SELECT user,host FROM mysql.user;

4. 查看 Master 主服务状态

mysql>show master status;

# 删除所有 index file 中记录的 binlog 文件
# 将日志索引文件清空,创建一个新的日志文件,通常仅用于第一次 搭建主从关系时的主库。
mysql>reset master

三、MySQL 从服务配置

1. 修改从 mysqld.cnf 文件

[mysqld]
# 从服务器唯一ID(一般取IP最后一段)
server-id=102
relay-log=mysql-relay

2. 配置 从服务 连接 主服务

show master status;
  • 查看数据库状态
    在这里插入图片描述
# 从库 创建连接 主库的 IP、账户、密码、日志文件、位置
mysql>change master to master_host='192.168.1.137', master_port=3306, master_user='slave', master_password='123456', master_log_file='mysql-bin.002142', master_log_pos=385963

# master_port 服务器端口号(无引号)。
# master_user 执行同步操作的数据库账户。
# master_log_file 通过`show master status;`中看到的`File`的值。
# master_log_pos 通过`show master status;`中看到的`Position`的值(无单引号)。

3. 启动 Slave 从服务

mysql>start slave; 
# 不带任何参数,表示同时启动 I/O线程 和 SQL线程。
# I/O线程 从主库读取`binlog`,并存储到`relaylog`中继日志文件中。
# SQL线程 读取中继日志,解析后在从库重放。

# 完成停止 I/O线程 和 SQL线程 的操作。
mysql>stop slave;

4. 查看 Slave 从服务状态

mysql>show slave status;
# 有两个 yes 才 OK,假如有 No 或者 Connecting,请看下方日志 或者 找到 MySQL 日志文件查看具体问题。
# Slave_IO_Running: Yes(此状态必须 YES)
# Slave_SQL_Running: Yes(此状态必须 YES)
# 注意:Slave_IO 及 Slave_SQL 进程必须正常运行(即 YES 状态)否则都是错误的状态(如:其中一个 NO 均属错误)
  • 错误:Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
  • 原因:MySQL 是克隆的系统,所以 MySQL 的 uuid 是一样的,所以需要修改。
  • 解决:删除 /var/lib/mysql/auto.cnf 文件,重新启动服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1069488.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大厂笔试真题【栈】美团2023春招-火车迷【欧弟算法】全网最全大厂秋招题解

文章目录 题目描述与示例题目描述输入描述输出描述示例一输入输出 示例二输入输出 解题思路代码pythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目描述与示例 题目描述 小美是一个火车迷。最近她在观察家附近火车站的火车驶入和驶出情况,发现…

C/C++学习 -- Base64算法

Base64算法概述 Base64是一种用于将二进制数据表示为ASCII字符集中的可打印字符的编码方法。它由64个不同的字符组成,通常包括26个大写字母、26个小写字母、10个数字以及两个特殊字符(通常是""和"/")。Base64编码的目的…

【Vue基础-数字大屏】地图标记涟漪效果设置

一、需求说明 将地图中北京市、陕西市、南宁市分别以实心圆、涟漪圆、涟漪圆标记出来 二、代码实践 涉及三个文件 1、App.vue: <template><Screen1/> </template> <script> import Screen1 from "./components/Screen1.vue"; export def…

如何应对数据安全四大挑战?亚马逊云科技打出“组合拳”

数字经济时代&#xff0c;数据被公认为继土地、劳动力、资本、 技术之后的又一重要生产要素。对于企业而言&#xff0c;数据则是一切创新与关键决策的根源。 然而&#xff0c;企业在发挥数据资产的商业价值方面&#xff0c;却面临诸多挑战&#xff0c;比如敏感数据识别、跨组织…

【高阶数据结构】图详解第一篇:图的基本概念及其存储结构(邻接矩阵和邻接表)

文章目录 1. 图的基本概念1.1 什么是图1.2 有向图和无向图1.3 完全图1.4 邻接顶点1.5 顶点的度1.6 路径1.7 路径长度1.8 简单路径与回路1.9 子图1.10 连通图1.11 强连通图1.12 生成树 2. 图的存储结构2.1 邻接矩阵2.2 邻接矩阵代码实现结构定义构造函数添加边打印图测试 2.3 邻…

leetCode 718.最长重复子数组 动态规划 + 优化(滚动数组)

718. 最长重复子数组 - 力扣&#xff08;LeetCode&#xff09; 给两个整数数组 nums1 和 nums2 &#xff0c;返回 两个数组中 公共的 、长度最长的子数组的长度 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,3,2,1], nums2 [3,2,1,4,7] 输出&#xff1a;3 解释&…

2023年台州市第三届网络安全技能大赛(MISC)这是神马

这是神马 考点&#xff1a;冰蝎流量特征数据包&#xff0c;需要解密 emoj解密 冰蝎之前做过 特征就是先base64编码在AES编码 我们在数据包里面找到了密钥&#xff1a;144a6b2296333602 这里我们知道了密钥我们就去解密 先筛选HTTP协议 导出HTTP数据流可以看到传了shell.php 随…

美容美甲小程序商城的作用是什么

美容院往往有很高需求&#xff0c;女性悦己经济崛起&#xff0c;加之爱美化程度提升&#xff0c;无论线下环境还是线上互联网信息冲击&#xff0c;美容服务、化妆产品等市场规格一直稳增不减。 通过【雨科】平台制作美容美甲商城&#xff0c;售卖相关服务/产品&#xff0c;模块…

记两次内网入侵溯源

1.1、入侵告警 1、某天深夜主机防护突然爆出CS木马后门&#xff0c;这攻击队不讲武德呀&#xff0c;还好没睡着2、赶紧叫醒旁边看流量设备的哥们儿&#xff0c;尝试Shiro 反序列漏洞攻击成功3、测试目标网站存在shiro反序列化漏洞1.2、上机排查 1、上机将CS木马下载下来&…

Vue3 reactive和ref详解

reactive Vue3.0中的reactive reactive 是 Vue3 中提供的实现响应式数据的方法。在 Vue2 中响应式数据是通过 defineProperty 来实现的&#xff0c;在 Vue3 中响应式数据是通过 ES6 的 Proxy来实现的。reactive 参数必须是对象 (json / arr)如果给 reactive 传递了其它对象 默…

基于JavaWeb的家用电器信息管理系统

本系统采用基于JAVA语言实现、架构模式选择B/S架构&#xff0c;Tomcat7.0及以上作为运行服务器支持&#xff0c;基于JAVA等主要技术和框架设计&#xff0c;idea作为开发环境&#xff0c;数据库采用MYSQL5.7以上。 开发环境&#xff1a; JDK版本&#xff1a;JDK1.8 服务器&…

intel深度相机 D455及D4系列入门教程(逐行代码讲解)

1.介绍 Intel RealSense D435、D455等D4系列&#xff1a; Intel D4系列深度相机是由英特尔&#xff08;Intel&#xff09;公司推出的一款深度感知摄像头&#xff0c;专为实现计算机视觉和深度学习应用而设计。这款相机使用了英特尔的深度感知技术&#xff0c;结合了摄像头和红…

三极管及继电器的使用(单片机如何控制灯泡等大型电器)

1.对于初入硬件的小伙伴一定会用到三极管和继电器&#xff0c;如下图&#xff08;三极管&#xff09; 如下图&#xff08;继电器&#xff09; 当然上述三极管和继电器&#xff0c;只是众多的其中一种&#xff0c;而且继电器是包装好了的&#xff0c;这个应该叫继电器模块&#…

opencv图像的直方图,二维直方图,直方图均衡化

文章目录 opencv图像的直方图&#xff0c;二维直方图&#xff0c;直方图均衡化一、图像的直方图1、什么是图像的直方图&#xff1a;2、直方图的作用&#xff1a;3、如何绘制图像的直方图&#xff1a;&#xff08;1&#xff09;cv::calcHist()函数原型&#xff1a;&#xff08;2…

土地证、工程规划许可证、建设用地规划许可证

土地证、工程规划许可证、建设用地规划许可证办理是房地产开发最基础和初开始的工作流程。 一、土地证是简称&#xff0c;全称为《中华人民共和国国有土地使用证》&#xff0c;发证部门是当地国有土地资源局。 申办单位经当地规划部门审批通过某项目备案审批&#xff0c;在办理…

想要精通算法和SQL的成长之路 - 简化路径

想要精通算法和SQL的成长之路 - 简化路径 前言一. 简化路径 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 简化路径 原题连接 思路如下&#xff1a; 我们根据 "/" 去拆分字符串&#xff0c;得到每个子目录。这里拿到的子目录可能是空字符串&#xff0c;需要…

【Vue2.0源码学习】生命周期篇-销毁阶段(destroy)

文章目录 1. 前言2. 销毁阶段分析3. 总结 1. 前言 接下来到了生命周期流程的最后一个阶段——销毁阶段。从官方文档给出的生命周期流程图中可以看到&#xff0c;当调用了vm.$destroy方法&#xff0c;Vue实例就进入了销毁阶段&#xff0c;该阶段所做的主要工作是将当前的Vue实例…

buuctf PWN warmup_csaw_2016

下载附件&#xff0c;IDA查看 发现直接有显示flag函数 int sub_40060D() {return system("cat flag.txt"); }查看程序起始地址0x40060D ; Attributes: bp-based framesub_40060D proc near ; __unwind { push rbp mov rbp, rsp mov edi, offset comman…

Vue中如何进行音视频录制与视频剪辑

在Vue中进行音视频录制与视频剪辑 随着互联网的发展&#xff0c;音视频处理已经成为前端开发中一个越来越重要的领域。Vue.js作为一款流行的前端框架&#xff0c;为我们提供了丰富的工具和生态系统&#xff0c;使得音视频录制和编辑变得更加容易。本文将介绍如何在Vue中进行音…

SpringMVC修炼之旅(1)什么是SpringMVC

一、什么是MVC 1.1概述 MVC是模型(Model)、视图(View)、控制器(Controller)的简写&#xff0c;是一种软件设计规范。 是将业务逻辑、数据、显示分离的方法来组织代码。 MVC主要作用是降低了视图与业务逻辑间的双向偶合。 MVC不是一种设计模式&#xff0c;MVC是一种架构模式…