MySQL主从同步+binlog

一、简介

MySQL内建的复制功能是构建大型,高性能应用程序的基础 通过将MySQL的某一台主机(master)的数据复制到其他主机(slaves)上,并重新执行一遍来执行 复制过程中一台服务器充当主服务器,而其他一个或多个其他服务器充当从服务器

1.1主从复制原理

主要基于MySQL二进制日志 主要包括三个线程(2个I/O线程,1个SQL线程)

LNMP(centos7,mysql5.6)

vmware workstation pro配置了3个虚拟机,均安装了LNMP环境:

master:  192.168.0.105       

slave:     192.168.0.106 、192.168.0.107

二、原理

(1)主数据库master进行增删改操作后,相应操作记录的语句(比如 create database test)会记录到binlog日志文件中(binlog日志文件一般和数据库data文件夹在一起)。

(2)从数据库Slave会请求主数据库的binlog日志文件,拷贝到Slave的中继日志中,然后在自己的从数据库上自动执行相同的操作语句,进而实现主从的同步。

注:这里,我们所需要配置的只是主从环境以及开启binlog日志,其他的mysql会自动完成。

二、配置主从同步

2.1环境准备

克隆三台没有下过mysql的虚拟机(或恢复快照)

ip为  master   192.168.1.112 

        slave1     192.168.1.113

        slave2     192.168.1.114

下载mysql:yum install mysql-server -y

不会下载或者下载报错:MySQL数据库安装---离线下载_mysql 离线下载安装-CSDN博客

2.2主从配置

2.2.1【master】(主服务器)

1.)选举112为主服务器

vim /etc/my.cnf[client]
user=root
password=ABc1234[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.socklog-error=/var/log/mysqld. log
pid-file=/var/run/mysqld/mysqld.pidserver_id=11 #可以是任意正整数,一般比slave大

然后开启MySQL服务

2.)在数据库中创建用户,以及授权,修改master库的密码加密方式

repl 你所创建的用户名

MySQL@123 用户密码

mysql> create user repl@'%'identified with mysql_native_password by 'MySQL@123'-> ;
Query OK, 0 rows affected (0.00 sec)mysql> grant replication slave on *.* to repl@'%';
Query OK, 0 rows affected (0.00 sec)

查看主配置状态:show master status;

3 )关闭防火墙,禁用SElinux 

[root@openeuler-1 ~]  systemctl stop firewalld[root@openeuler-1 ~]  setenforce 0
setenforce: SELinux is disabled  #已被禁用[root@openeuler-1 ~]  getenforce #查看SElinux状态
Disabled
2.2.2【slave】从服务器

【slave1】和【slave2】

1.)配置主配置文件,添加一个server_id(唯一标识)

vim /etc/my.cnf

slave1的   113slave2的   114

配置后开启/重启mysql服务:systemctl start mysql.service/systemctl restart mysql.service

2.)在从mysql上进行部署,连接主库(因为连接的是同一个主库,两个slave操作一样)

ps:如果start slave后,要重新连接主库(change maste to), 必须先stop slave

        从库指向主库创建的host,用户名,密码,二进制文件,以及节点

mysql> change master to-> master_host='192.168.1.112',-> master_user='repl',-> master_password='MySQL@123',-> master_log_file='binlog.000001',-> master_log_pos=980;
Query OK, 0 rows affected, 8 warnings (0.01 sec)

 3.)开启主从

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

4.) 关闭防火墙,禁用SElinux  

[root@openeuler-1 ~]  systemctl stop firewalld[root@openeuler-1 ~]  setenforce 0
setenforce: SELinux is disabled  #已被禁用[root@openeuler-1 ~]  getenforce #查看SElinux状态
Disabled

 5.) 查看是否成功并测试

 

三、基于binlog的主从同步

3.1【主服务器】

1.) 开启binlog

在id后面添加两行

[root@openeuler-1 Mysql]# vim /etc/my.cnfserver_id=11gtid_mode=ON
enforce-gtid-consistency=ON[root@openeuler-1 Mysql]# systemctl restart mysqld.service

 3.2【从服务器】

1.)暂停slave,进入配置文件添加两行,重启服务(重启更改后的配置才会生效)

mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)mysql> \q
Bye[root@openeuler-1 Mysql]# vim /etc/my.cnfserver_id=113gtid_mode=ON
enforce-gtid-consistency=ON[root@openeuler-1 Mysql]# systemctl restart mysqld.service 

2.)测试gid是否开启

mysql> show variables like '%gtid%';

3.) 暂停slave,连接主库

mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> change master to-> master_host='192.168.1.112',-> master_user='repl',-> master_password='MySQL@123',-> master_auto_position=1;        #使用 GTID 自动定位。
Query OK, 0 rows affected, 7 warnings (0.00 sec)mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.02 sec)
3.3 GTID 从库误写入操作处理

从库一般是不需要写入数据的,如果不小心写入一般会报错

Last_SQL_Error: Error 'Can't create database 'db4'; database exists' on query. Default database: 'db4'. Query: 'create database db4'

Retrieved_Gtid_Set: 71bfa52e-4aae-11e9-ab8c-000c293b577e:1-3                #说明gid3报错
Executed_Gtid_Set:  71bfa52e-4aae-11e9-ab8c-000c293b577e:1-2,
7ca4a2b7-4aae-11e9-859d-000c298720f6:1

解决方法:注入空事务

暂停salve:
stop slave;#3是报错的ID号
set gtid_next='99279e1e-61b7-11e9-a9fc-000c2928f5dd:3';
begin;commit; 
set gtid_next='AUTOMATIC';这里的xxxxx:N 也就是你的slave sql thread报错的GTID,或者说是你想要跳过的GTID。

最好的解决方案:重新构建主从环境

3.4  IO进程错误

发现IO进程错误,检查日志,排除故障:

tail localhost.localdomain.err

常见错误:各个复制的虚拟机server_id不能相同

解决方法:修改id,重启mysql

四、延时同步

4.1简介

是我们人为配置的一种特殊同步,从库和主库同步延时N小时

为什么要有延时同步?

        数据库有两种故障:

                物理损坏:可以用主从复制解决。主库rm删除,直接将应用切换到从库

                逻辑损坏:普通主从同步无法解决。eg:主库drop database ns,从库也没了

4.2配置延时同步

主库加一个参数即可,其他不变

 change master to master_delay=300;  #延时300s

4.3故障模拟恢复

1.)主库数据操作

mysql> stop slave;
Query Ok, 0 rows affected, l warning(0.00 sec)mysal> change master to master_delay=300;  #延时300s
Query OK, 0 rows affected, 2 warnings (0.0l sec)mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.02 sec)mysq1> show slave status \G
SQL_Delay: 300
SQL_Remaining_Delay: NULL

 2.)停止从库SQL线程

stop slave sql_thread;

3.) 找relaylog的截取点和终点

起点:

        Relay_Log_File:db01-relay-bin.000002

        Relay_Log_Pos:482

终点:

4.)  从库恢复relaylog

source /tmp/relay.sq1

5.)  从库身份解除

db0l [relay]>stop slave ;
db0l [relay]>reset slave all

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PCB多层板打样:深度解析优缺点与应用场景

随着电子产品朝小型化、高性能化方向发展,PCB多层板扮演着越来越重要的角色。无论是智能手机、计算机,还是航空航天、工业控制,多层板都发挥着至关重要的作用。像专业的PCB制造商——嘉立创,凭借超高层工艺,可以生产最…

【前端】 react项目使用bootstrap、useRef和useState之间的区别和应用

一、场景描述 我想写一个轮播图的程序,只是把bootstrap里面的轮播图拉过来就用上感觉不是很合适,然后我就想自己写自动轮播,因此,这篇文章里面只是自动轮播的部分,没有按键跟自动轮播的衔接部分。 Ps: 本文用的是函数…

CentOS 7操作系统部署KVM软件和创建虚拟机

CentOS 7.9操作系统部署KVM软件和配置指南,包括如何创建一个虚拟机。 步骤 1: 检查硬件支持 首先,确认您的CPU支持虚拟化技术,并且已在BIOS中启用: egrep -c (vmx|svm) /proc/cpuinfo 如果输出大于0,则表示支持虚拟…

RocketMQ与kafka如何解决消息丢失问题?

0 前言 消息丢失基本是分布式MQ中需要解决问题,消息丢失时保证数据可靠性的范畴。如何保证消息不丢失程序员面试中几乎不可避免的问题。本文主要说明RocketMQ和Kafka在解决消息丢失问题时,在生产者、Broker和消费者之间如何解决消息丢失问题。 1.Rocket…

APP端网络测试与弱网模拟!

当前APP网络环境比较复杂,网络制式有2G、3G、4G网络,还有越来越多的公共Wi-Fi。不同的网络环境和网络制式的差异,都会对用户使用app造成一定影响。另外,当前app使用场景多变,如进地铁、上公交、进电梯等,使…

deepseek-r1 训练流程

deepseek-r1 训练流程 技术创新deepseek-v3 && deepseek-r1deepseek-r1-zero训练过程aha moment准确度提升思考时间增加 deepseek-r1冷启动推理场景强化学习数据采样&&SFT全场景强化学习结果 参考文献 技术创新 极致的成本控制,媲美openAI的性能&a…

网络工程师 (35)以太网通道

一、概念与原理 以太网通道,也称为以太端口捆绑、端口聚集或以太链路聚集,是一种将多个物理以太网端口组合成一个逻辑通道的技术。这一技术使得多个端口能够并行工作,共同承担数据传输任务,从而提高了网络的传输能力和可靠性。 二…

win11电脑其他WiFi可以连,只有一个WiFi连不上

这个问题卡了一小会,查了一些资料 后面发现 点击“诊断网络问题” 显示没有响应 第一步 重启wlan网络适配器 解决!!! 重新连接那个有问题的wifi,丝滑连接!

【网络通信】传输层之UDP协议

【网络通信】传输层之UDP协议 传输层端对端通信实现端到端通信的关键技术 UDP协议再谈端口号端口号划分关于端口号的两个问题 UDP协议基本格式UDP通信的特点UDP的缓冲区UDP数据报的最大长度基于UDP的应用层协议如何封装UDP报文以及如何交付UDP报文进一步理解封装和解包 传输层 …

时间盲注、boolen盲注

获取当前数据库名 获取数据库表 获取表的列

2025_2_13 二叉搜索树(一)

1.完全二叉树和满二叉树的概念 满二叉树:每一层都达到最大值 完全二叉树:只能右下角空,其他位置满,即最后一排从左到右的中间不能由缺 2.二叉搜索树 左子树中所有结点的 key 值都比根结点的 key 值小,并且左子树也…

DeepSeek 突然来袭,AI 大模型变革的危机与转机藏在哪?

随着人工智能技术的飞速发展,大模型领域不断涌现出具有创新性的成果。DeepSeek 的横空出世,为 AI 大模型领域带来了新的变革浪潮。本文将深入探讨 DeepSeek 出现后 AI 大模型面临的危机与转机。 冲冲冲!!! 目录 一、…

高速差分总线比较--RS422, LVDS,PECL

1. RS422A, 如RS422 & RS485总先, 0/5V的差分电平,匹配电阻120ohm. S2D, Transmitter D2S, Receiver LVDS 如SN65LVDS1,驱动器:DS90LV031(支持预加重),接收器&…

idea 错误: 找不到或无法加载主类 @C:\Users\admin\AppData\Local\Temp\idea_arg_file1549212448

idea 错误: 找不到或无法加载主类 C:\Users\admin\AppData\Local\Temp\idea_arg_file1549212448 该错误往往和左下角爱弹出的如下提示是一个意思 Error running ‘PayV3Test1.testTransferBatchesBatchId’ Error running PayV3Test1.testTransferBatchesBatchId. Command lin…

Java中如何高效地合并多个对象的List数据:方法与案例解析!

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互…

23、深度学习-自学之路-激活函数relu、tanh、sigmoid、softmax函数的正向传播和反向梯度。

在使用这个非线性激活函数的时候,其实我们重点还是学习的是他们的正向怎么传播,以及反向怎么传递的。 如下图所示: 第一:relu函数的正向传播函数是:当输入值(隐藏层)值大于了,就输出…

React源码揭秘 | scheduler 并发更新原理

React 18增加了并发更新特性,开发者可以通过useTransition等hooks延迟执行优先级较低的更新任务,以达到页面平滑切换,不阻塞用户时间的目的。其实现正是依靠scheduler库。 scheduler是一个依赖时间片分片的任务调度器,React团队将…

腿足机器人之二- 运动控制概览

腿足机器人之二运动控制概览 高层运动规划MPCRL 中层逆运动学和逆动力学底层执行器控制传感器校正 上一篇博客是腿足机器人的骨架和关节的机械和电气组件,关节不仅需要通过机械设计实现复杂的运动能力,还必须通过电子组件和控制系统来精确控制这些运动。…

企业级高可用 Kubernetes 实践:基于青云 LB 搭建容灾与负载均衡集群全攻略

一、前言 在企业生产环境,k8s高可用是一个必不可少的特性,其中最通用的场景就是如何在 k8s 集群宕机一个节点的情况下保障服务依旧可用。部署高可用k8s集群对于企业级云平台来说是一个根本性的原则,容错、服务可用和数据安全是高可用基础设施的关键。本文是在青云上利用青云…

软件项目估算偏差的5 大源头及解决方案

软件项目成本估算偏差往往导致资金紧张,资源投入受限,进度延误无法按时交付,为控制成本还可能牺牲质量,引发团队士气低落、客户不满,严重时项目直接失败 。 因此,及时解决或降低项目偏差就非常重要&#xf…