MySQL主从复制原理以及实操

一、MySQL主从复制原理:
1、MySQL将数据变化记录到二进制日志中;
2、Slave将MySQL的二进制日志拷贝到Slave的中继日志中;
3、Slave将中继日志中的事件在做一次,将数据变化,反应到自身(Slave)的数据库

详细步骤:
1、从库通过手工执行change master to 语句连接主库,提供了连接的用户一切条件(user 、
password、port、ip),并且让从库知道,二进制日志的起点位置(file名 position 号); start
slave
2、从库的IO线程和主库的dump线程建立连接。
3、从库根据change master to 语句提供的file名和position号,IO线程向主库发起binlog的请求。
4、主库dump线程根据从库的请求,将本地binlog以events的方式发给从库IO线程。
5、从库IO线程接收binlog events,并存放到本地relay-log中,传送过来的信息,会记录到
master.info中
6、从库SQL线程应用relay-log,并且把应用过的记录到relay-log.info中,默认情况下,已经应用过的
relay 会自动被清理purge

二、MySQL主从复制实验

1、环境准备
两台机器一主一从

2、主库配置

#保证主从两机时间统一,安装ntpdate:yum install ntpdate -y 
#启动ntpdate服务:[root@localhost ~]# systemctl start ntpdate
#统一时间(主从两机使用ntpdate命令): 
[root@localhost ~]# ntpdate ntp1.aliyun.com2 Aug 11:58:01 ntpdate[6306]: adjust time server 120.25.115.20 offset -0.039909 sec
#主库在/etc/my.cnf设置server-id值并开启binlog参数
[root@localhost ~]# vim /etc/my.cnf
#增加如下两条命令,如下图一
log_bin = mysql-bin
server_id = 11#主从数据库文件保持一致:在主库创建三个新的数据库db,db1,db2 退出并重新启动mysqld服务,然后通过mysqldump进行备份 
[root@localhost ~]#systemctl restart mysqld
[root@localhost ~]# mysqldump -uroot -p123 -B db db1 db2 > db.sql
#通过scp将db.sql传输给从库
[root@localhost ~]# scp db.sql 192.168.10.147:/opt/
#从库:查看传输的sql文件
[root@localhost ~]# cd /opt
[root@localhost opt]# ls
db.sql
#从库登录到mysql执行如下命令
mysql> source /opt/db.sql
mysql> show databases;
#主库创建同步账号:
mysql> grant replication slave on *.* to 'rep'@'192.168.10.%' identified by
'123';
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000008 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)#此时回到从库设置设置server-id值和binlog参数如图一(与主库一样操作)
[root@localhost opt]# vim /etc/my.cnf
log_bin=mysql-binserver-id=13
[root@localhost opt]# systemctl restart mysqld
#登录mysql
mysql> change master to
MASTER_HOST='192.168.10.145',
MASTER_PORT=3306,#默认端口号,可不写
MASTER_USER='rep',
MASTER_PASSWORD='123',
#参照show master status返回的结果填写相应的值
MASTER_LOG_FILE='mysql-bin.000008',
MASTER_LOG_POS=154;mysql> start slave;
mysql> show slave status \G#结果如图二查看slave_IO_Running和slave_SQL_Running的状态是否都为yes。若都为yes,则配置成功;反之,则需查看mysql日志文件/var/log/mysqld.log

图一:
在这里插入图片描述
图二:

在这里插入图片描述
三、检验
主库当前的数据库数量:
在这里插入图片描述
从库:
在这里插入图片描述

#在主库创建新的数据库:
mysql> create database if not exists db4;
Query OK, 1 row affected (0.00 sec)#查看主库当前数据库状态:
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| -S                 |
| db                 |
| db1                |
| db2                |
| db3                |
| db4                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
10 rows in set (0.00 sec)

从库:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db                 |
| db1                |
| db2                |
| db3                |
| db4                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
9 rows in set (0.00 sec)mysql>

四、错误检查
当进行一主两从配置时,有一台从库机器出现与主库机器UUID相同的问题。
解决办法:
在该从库中登录mysql,随机获取一个UUID

mysql> select UUID();
+--------------------------------------+
| UUID()                               |
+--------------------------------------+
| c06c559d-3132-11ee-80ec-000c29f96d4c |
+--------------------------------------+
1 row in set (0.00 sec)#查找auto.cnf文件
find / -iname auto.cnf
#在对应路径找到后:
vim auto.cnf
#将文件中的UUID改为之前获取的UUID如下图
#重启mysqld:
systemctl restart mysqld
#登录mysql,执行如下操作并观察是否为双yes
show slave status \G

在这里插入图片描述

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

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

相关文章

c++ / python / java / PHP / SQL / Ruby / Objective-C / JavaScript 发展史

c发展史 C是由丹尼斯里奇和肯汤普森在1970年代早期开发的C语言的扩展。C最初被称为“C with Classes”,是在1980年代初期由比雅尼斯特劳斯特鲁普开发的。 1983年,斯特劳斯特鲁普将C with Classes重新命名为C。在1985年,C编译器的第一个版本被…

【Linux】常用的基本指令

👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 如果文章对…

C# Microsoft消息队列服务器的使用 MSMQ

先安装消息队列服务器 private static readonly string path ".\\Private$\\myQueue";private void Create(){if (!MessageQueue.Exists(path)){MessageQueue.Create(path);}}private void Send(){Stopwatch stopwatch new Stopwatch();stopwatch.Start();Message…

RxJava 复刻简版之二,调用流程分析之案例实现

接上篇:https://blog.csdn.net/da_ma_dai/article/details/131878516 代码节点:https://gitee.com/bobidali/lite-rx-java/commit/05199792ce75a80147c822336b46837f09229e46 java 类型转换 kt 类型: Any Object泛型: 协变: …

web基础与http

一,dns与域名 网络基于tcp/ip协议进行通信和连接的,其中主机以ip地址做固定的地址标识,用以区分用户和计算机。ip地址是由32位二进制数组成,不方便记忆。为了方便记忆,采用了域名。但是网络通信的唯一标识是ip地址&…

K8s的详细介绍

1.编写yaml文件的方式 2.yaml里面的内容介绍 Pod实现机制:(1)共享网络(2)共享存储 共享网络:通过Pause容器,把其他业务容器加入到Pause容器里面,让所有业务容器在同一个名称空间中,…

【Spring Cloud 三】Eureka服务注册与服务发现

系列文章目录 【Spring Cloud一】微服务基本知识 Eureka服务注册与服务发现 系列文章目录前言一、什么是Eureka?二、为什么要有服务注册发现中心?三、Eureka的特性四、搭建Eureka单机版4.1Eureka服务端项目代码pom文件配置文件启动类启动项目查看效果 E…

海量小文件传输慢的原因以及对应的优化方案

在日常工作中,我们经常遇到需要传输一些小文件的情况,但是当小文件的数量很多的时候,为什么小文件传输的速度就会变得很慢呢?为什么复制许多较小的文件时,小文件传输效率就会降低呢?针对这些问题&#xff0…

Mybatis插件

文章目录 1. 如何自定义插件1.1 创建接口Interceptor的实现类1.2 配置拦截器1.3 运行程序 2. 插件原理2.1 解析过程2.2 创建代理对象2.2.1 Executor2.2.2 StatementHandler2.2. 3ParameterHandler2.2.4 ResultSetHandler 2.3 执行流程2.4 多拦截器的执行顺序 3. PageHelper3.1 …

聊天系统登录后端实现

定义返回的数据格式 # Restful API from flask import jsonifyclass HttpCode(object):# 响应正常ok 200# 没有登陆错误unloginerror 401# 没有权限错误permissionerror 403# 客户端参数错误paramserror 400# 服务器错误servererror 500def _restful_result(code, messa…

Matlab Optimization Toolbox中的遗传算法工具包(GA)

matlab optimization 中使用了GA求解器 默认的是小于等于 找到GA 工具包 找到 APP选择 Optimization Tool 选择Solver ga - Genetic Algorithm 应用GA solver 定义适应度函数(Fitness function)与问题约束(Constraints) example one 优化函数 sin(x) 2 * cos(x)极其重要的…

windows10 设置代理

场景:同一个办公室,只有A的电脑有权限访问网站 http://10.129.129.129:5601, 那办公室其他B,C同学想访问 http://10.129.129.129:5601,需要怎么处理? A 同学电脑安装代理软件: 1. 下载wproxy IMFirewall, …

iMX6ULL驱动开发 | 让imx6ull开发板支持usb接口FC游戏手柄

手边有一闲置的linux开发板iMX6ULL一直在吃灰,不用来搞点事情,总觉得对不住它。业余打发时间就玩起来吧,总比刷某音强。从某多多上8块儿大洋买来一个usb接口的游戏手柄,让开发板支持以下它,后续就可以接着在上面玩童年…

信息学奥赛一本通——1258:【例9.2】数字金字塔

文章目录 题目【题目描述】【输入】【输出】【输入样例】【输出样例】 AC代码 题目 【题目描述】 观察下面的数字金字塔。写一个程序查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以从当前点走到左下方的点也可以到达右下方的点。 在上面…

VS2019编译安装OpenMesh8.0

文章目录 一、简介二、相关准备三、编译安装四、举个栗子参考资料一、简介 多边形网格一直以来就是交互式3D图形应用程序中最合适的几何表示,它们足够灵活,可以近似任意形状,并且可以通过当前的图形硬件有效地处理,即使在今天的低成本电脑上也是如此。OpenMesh便是其中一种…

Java-很深我只知其一-泛型

Java-很深我只知其一-泛型 目录 泛型历史 泛型类/泛型接口 泛型方法 泛型属性 泛型约束 泛型历史 JAVA 泛型(generics)是 JDK 5 中引入的一个新特性, 允许程序员在编程时指定类型参数,使编译器可以在编译代码时检测到非法的类型。泛型的…

相交链表 LeetCode热题100

题目 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 题目数据 保证 整个链式结构中不存在环。 思路 使用两个指针x,y同时遍历两个链表A和B。 当两个链表有相交节点时&am…

小研究 - 主动式微服务细粒度弹性缩放算法研究(四)

微服务架构已成为云数据中心的基本服务架构。但目前关于微服务系统弹性缩放的研究大多是基于服务或实例级别的水平缩放,忽略了能够充分利用单台服务器资源的细粒度垂直缩放,从而导致资源浪费。为此,本文设计了主动式微服务细粒度弹性缩放算法…

Centos安装libwebcam库运行 uvcdynctrl 命令

Centos 软件包仓库中没有 libwebcam 库,因此需要下载源文件手动编译 源文件地址:https://github.com/lucasrangit/libwebcam 解压后进入项目文件夹 mkdir build cd build cmake .. make make install 如果使用uvcdynctrl提示找不到库,则 vi…

k8s apiserver如何支持http访问?

原本是可以通过设置api-server的--insecure-port来实现,但是这个参数已经被废弃了,更好的方法则是使用proxy来实现: 在集群任意一个节点上起一个proxy服务,并设置允许所有host访问: kubectl proxy --address0.0.0.0 …