Mysql8.0实现主从复制

1、什么是主从复制

数据库的主从复制(master-slave replication)是一种数据复制技术,其中一台数据库服务器(主服务器)上的数据变更会复制到另一台或多台数据库服务器(从服务器)上。这种复制可以是同步的或异步的。

在主从复制中,主服务器会将其上的数据库修改记录(DDL和DML操作)通过二进制日志(binlog)发送给从服务器。从服务器通过读取主服务器的二进制日志并重新执行其中的操作,来保持与主服务器的数据一致。

在这里插入图片描述

主从复制可以用于提高数据可用性、备份、恢复以及水平扩展数据库系统的性能。

从服务器重要的两个状态指示器:

  1. Slave_IO_Running:表示从服务器(slave)的I/O线程是否正在运行。I/O线程是负责从主服务器接收二进制日志(binlog)并写入本地中继日志(relay log)的线程。
  2. Slave_SQL_Running:表示从服务器(slave)的SQL线程是否正在运行。SQL线程是负责从本地中继日志(relay log)读取事件,并在从服务器上执行这些操作的线程。

在主从复制中,I/O线程和SQL线程是协同工作的。I/O线程负责从主服务器接收日志并写入本地中继日志,而SQL线程则负责从中继日志中读取事件并在从服务器上执行。因此,确保这两个线程都正常运行是实现成功的主从复制的关键。

2、使用主从复制的原因

优点:

  1. 提高数据可用性:主从复制可以实现数据的实时备份,即使主服务器发生故障,从服务器也可以继续提供服务,保证数据的可用性。
  2. 负载均衡:通过将读操作分担到多个从服务器上,可以减轻主服务器的负载,提高整个系统的性能。
  3. 数据备份和恢复:从服务器可以作为主服务器的备份,保证数据的安全性。同时,如果主服务器发生故障,可以从从服务器上快速恢复数据。
  4. 扩展性:主从复制可以实现系统的水平扩展,提高系统的处理能力和性能。
  5. 实现复杂应用场景:主从复制可以满足各种复杂的应用场景,如读写分离、数据备份、容灾等。

缺点:

  1. 延迟问题:由于数据是从主服务器复制到从服务器的,因此当主服务器上的数据发生改变时,从服务器上的数据可能会存在一定的延迟。这可能会对一些需要实时同步的应用场景造成影响。
  2. 复杂性:主从复制需要配置和维护多个服务器和数据库,这会增加系统的复杂性和管理难度。此外,如果主从服务器之间的网络通信出现故障,可能会导致数据复制的中断或延迟。
  3. 性能问题:虽然从服务器可以分担一部分读操作,但主服务器的负载仍然会因为写操作而增加。在某些情况下,如果主服务器的性能不足以处理所有的请求,可能会影响到整个系统的性能。
  4. 数据一致性问题:由于主从复制是异步的,因此可能会出现数据一致性问题。例如,当主服务器上的数据还没有完全复制到从服务器时,如果从服务器被用来写入数据,就可能会导致数据的不一致。
  5. 故障切换问题:如果主服务器出现故障,需要手动切换到从服务器,这可能会导致停机时间和数据丢失的风险。

3、Mysql主从复制的注意点

  1. Mysql的主服务器和从服务器的版本必须要一致。
  2. 主服务器和从服务器的IP一定是能ping通的。
  3. 在8.0之后的Mysql用户的密码加密方式已经改成了caching_sha2_password,当从服务器访问主服务器时,就会报错出现连接异常,此时就需要把加密方式改成mysql_native_password

以上三个条件缺一不可,很重要。

4、实现

4.1、下载Mysql

Mysql主从服务器的版本一定要一致。
Mysql主从服务器的版本一定要一致。
Mysql主从服务器的版本一定要一致。

Mysql的安装和配置可以参考我以前的博客:MySQL-8.0.23–64位配置

4.2、修改my.ini文件

my.ini文件是MySQL服务器配置的核心文件,它允许你调整各种参数和选项,以适应特定的环境和需求。

4.2.1、配置主服务器的my.ini文件

[mysqld]
port=3306
basedir=E:\MySQL\mysql-8.0.35-winx64
datadir=E:\MySQL\mysql-8.0.35-winx64\data
max_connections=100
max_connect_errors=10
character-set-server=utf8mb4
default-storage-engine=INNODB# 主要部分
server-id=1
log-bin=master-bin
binlog-do-db=mysql_test
binlog_format=MIXED[mysql]
default-character-set=utf8mb4[client]
port=3306

主要部分参数:

参数名称参数描述
server-id服务端的唯一ID(唯一),主/从服务器的server-id不能一致
log-bin主服务器的同步二进制日志文件名称
binlog-do-db需要同步的数据库名称
binlog_format二进制文件的格式
binlog-ignore-db不需要同步的数据库名称

binlog_format可以选取的参数:

参数名称参数描述
STATEMENT将每条会修改数据的SQL语句记录到binlog中,不记录具体的数据变化。这样的好处是binlog文件较小,但是在主从复制中可能会出现数据不一致的问题。
(这是MySQL 5.7.7之前的默认格式)
ROW将每一行数据的变化都记录到binlog中。
(这是MySQL 5.7.7及更高版本的默认值)
MIXED是STATEMENT和ROW的混合模式,会根据执行的SQL语句的类型来决定记录到binlog中的内容,这种格式在兼容性上相对较好。
(在NDB群集中,默认值是MIXED,因为NDB群集不支持基于语句的复制)

4.2.2、配置从服务器的my.ini文件

[mysqld]
port=3306
basedir=D:\mysql\mysql-8.0.35-winx64
datadir=D:\mysql\mysql-8.0.35-winx64\data
max_connections=100
max_connect_errors=10
character-set-server=utf8mb4
default-storage-engine=INNODB# 主要部分
server-id=2
replicate-do-db=mysql_test[mysql]
default-character-set=utf8mb4
[client]
port=3306
参数名称参数描述
server-id从服务器的唯一ID
replicate-do-db从服务器要从主服务器复制的数据库名称

4.2.3、重启Mysql服务

无论是主服务器还是从服务器,配置好my.ini文件后一定要重启Mysql服务。

打开任务管理器中的服务,找到MySQL服务后,选择重新启动

在这里插入图片描述

4.3、新建用户

在完成上述的操作后,我们需要在Master端创建一个用户让Slave端来进行连接。
当然也可以使用管理员的账号root给Slave进行连接,但是需要修改mysql这个数据库中的user表中root用户的host,默认这个host指向的是localhost,只能本地来访问,其他的机器是无法访问的,所以如果想使用root用户来给Slave进行连接,就需要把host改为Slave的IP地址或者%。

但是我们还是支持一户专用的方式,所以我们在Master端新建一个账户。

1、新建用户
%表示所有IP地址。

# 语法:CREATE USER 'username'@'IP address' IDENTIFIED BY '密码';
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

2、给用户赋权

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' WITH GRANT OPTION;

赋予的权限可以在mysql数据库中的user表中看到,主要是赋予Grant_privReple_slave_priv两个字段的权限。

3、刷新权限系统

FLUSH PRIVILEGES;

4、查看用户信息

select host,user,plugin,authentication_string from mysql.user;

在这里插入图片描述

4.4、主从连接

完成上述步骤后,就可以进行MySQL的主从连接了。

4.4.1、查看Master状态

show master status;

在这里插入图片描述
执行上述SQL命令后,会查询出以下截图中的信息,其中重要的是FilePosition两个字段。

  • File:Master端的同步日志文件。
  • Position:用于记录Slave在Master二进制日志中的位置。它用于同步主从服务器之间的数据复制过程。

4.4.2、Slave端连接Master端

1、先暂停Slave的复制信息,如果从来没开过,默认就是关闭的。

STOP SLAVE;

2、连接Master

CHANGE MASTER TO MASTER_HOST ='192.168.72.122',  # Master IP Address
MASTER_PORT=3306, # Master Mysql Port
MASTER_USER ='slave', # username
MASTER_PASSWORD ='123456', # password
MASTER_LOG_FILE ='master-bin.000003', # Master log file name
MASTER_LOG_POS = 450; # position

以上命令在满足第三点的条件后,Master信息一定要写对,否则无法进行主从复制。

3、启动Slave和查看连接状态

# 重启Slave
START SLAVE;
# 查看Slave状态
SHOW SLAVE status

在这里插入图片描述
查看Slave的状态主要看两个状态指示器Slave_IO_RunningSlave_SQL_Running
如果两个指示器都是yes,则表示主从复制成功。

4.5、所遇错误

1、如果Slave_IO_Running一直都是connecting状态。

  • Master端和Slave端的Mysql版本是否一致。
  • 在Slave端的可视化工具中连接Master端的Mysql,看是否可以连接,如果不能连接,则查看Slave端连接Master端的用户密码加密是不是使用的是mysql_native_password
  • Master端的用户Grant_privReple_slave_priv两个权限是否开通。

2、数据库连接报错1251: Client does not support authentication protocol requested by server; consider upgrading MySQL client

  • 查看Mysql版本是否一致。
  • 修改用户密码的加密方式,caching_sha2_password改成mysql_native_password

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

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

相关文章

羊大师讲解,一天喝多少羊奶才是健康的饮用量?

羊大师讲解,一天喝多少羊奶才是健康的饮用量? 在当今快节奏的生活中,更加健康的生活方式备受追捧。作为一种营养丰富的饮品,羊奶备受人们的喜爱。但是,一天喝多少羊奶才是健康的饮用量呢?本文小编羊大师将…

mysql EXPLAIN命令的输出列简介

MySQL :: MySQL 8.2 Reference Manual :: 8.8.2 EXPLAIN Output Format explain命令提供了mysql数据库如何执行SQL语句的信息,可以跟 SELECT, DELETE, INSERT, REPLACE, UPDATE, 和 TABLE一起使用。 explain命令可能输出多行,每行涉及一个表 。 先来看…

3D摄影棚布光:Set A Light 3D Studio

Set A Light 3D Studio是一款专业的灯光模拟软件,旨在帮助摄影师和电影制片人在电脑上进行虚拟灯光布置和场景模拟,以实现更加精准和高质量的拍摄效果。该软件提供了丰富的灯光和场景模型,支持灵活调整光源位置、强度、颜色和效果等参数&…

PMP备考总结:项目管理PMP考试提高通过率,轻松上岸~

分享一篇左羊学霸的备考总结,希望能帮到正在备考的友友们~ 前言 作为⼀名通过PMP项⽬管理认证并且拿到3A成绩 ( PMP认证最好成绩) 的 学习者, 来跟⼤家分享下我考取PMP证书的动机与过程 。考证不是主要⽬ 的, 在考证的过程深化⾃⼰的项⽬管理…

element日历组件只显示月和日,把年份隐藏掉

最终效果: 把年份和旁边的两个小标志小标去掉, 也就是把这红色框框内的内容隐藏掉 我们先用控制台看看里面具体的样式 1、可以看到 class “el-date-picker__header” 的 div是控制日历组件的标题的,div里面的button和span就是对应标题里面…

Python自动化:selenium常用方法总结

使用的Python版本为3.8,selenium版本为4.15.2 Python自动化:selenium常用方法总结 1. 三种等待方式2. 浏览器操作3. 8种查找元素的方法4. 高级事件 1. 三种等待方式 强制等待 使用模块time下的sleep()实现等待效果隐式等待 使用driver.implicitly_wait()方法&#…

如何在Kali Linux安装Xrdp+cpolar内网穿透实现远程访问Kali系统

文章目录 前言1. Kali 安装Xrdp2. 本地远程Kali桌面3. Kali 安装Cpolar 内网穿透4. 配置公网远程地址5. 公网远程Kali桌面连接6. 固定连接公网地址7. 固定地址连接测试 前言 Kali远程桌面的好处在于,它允许用户从远程位置访问Kali系统,而无需直接物理访…

PyCharm连接远程服务器上Docker容器,使用远程服务器的python intercepter解释器和GPU资源 [本地调试深度学习代码]

概述 在编写常规深度学习代码时,总是需要使用服务器上的GPU资源,所以一般要写完代码,放到服务器,然后使用GPU运行。但是由于之前的习惯,总想本地调试一下或者本地直接跑测试结果,再放到服务器去跑。 网上…

【coco】掩膜mask影像转coco格式txt(含python代码)

最近在做实例分割,遇到二值掩膜影像——coco格式txt的实例分割转换问题,困扰很久,不知道怎么转换,转出来的txt没法用代码成功读取。一系列问题,索性记录下自己的结局路程,方便大家python代码自取。 目录 &…

DevOps搭建(五)-JDK安装详细步骤

1、官网下载 官方网站下载JDK,这里我们安装JDK8 https://docs.oracle.com/javase/8/docs/technotes/guides/install/install_overview.html 点击上图中的Java SE Downloads项目,也可直接点击下面链接进入: Java Downloads | Oracle 往下滚…

学习Linux(3)-Linux软件安装之yum

什么是yum yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。 假设,在一台window系统的电脑上要用qq,那么我们回去下载qq的安装包,然后执行qq.exe文件在本机上进…

10 个顶级 iPhone 数据恢复软件工具评测

很多事情都可能导致 iPhone 数据丢失:iOS 更新失败、越狱错误、解锁问题等。如果您遇到类似情况并且想要访问您的文件,通常最好的解决方案是使用数据恢复工具。由于研究市场上可用的工具可能会花费您大量的时间(在尝试从 iPhone 恢复数据时&a…

7.25 SpringBoot项目实战【我的借阅记录】

文章目录 前言一、编写控制器二、编写服务层三、Git提交前言 至此,我们已经实现 图书借阅、收藏、评论等场景,最后来到【还书】场景,首先 还书的 入口 一般 是【我的借阅记录】,在这里可以根据产品设计,对于需要归还的书 操作【还书】,所以本文来实现【我的借阅记录】。…

SAP STMC教程

一、概述 SAP Technical Monitoring Cockpit(STMC)是SAP最新推出的数据迁移工具,方便在项目部署阶段进行期初数据的导入,是LSMW的小平替,做过LSMW的朋友应该都知道,LSMW步骤比较繁复,并且校验复…

从零开始创建一个项目,springBoot+mybatisPlus+mysql+swagger+maven

一,前提 从零开始创建一个项目,绑定了数据库 用到的技术栈:springBootmybatisPlusmysqlswaggermaven 二,创建项目步骤 1,创建项目 创建出来的项目结构如图所示 2,修改配置文件 因为我比较习惯yml语言&…

Java刷题篇——LeetCode118. 杨辉三角

1.题目描述 给定一个非负整数numRows,生成杨辉三角的前numRows行。 在杨辉三角中,每个数是它左上方和右上方的数的和。 示例1 输入:numRows 5 输出:[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1] 示例2 输入:numRows 1…

如何在 Eolink Apikit 中发起 TCP/UDP 文档测试

TCP/UDP 是两种常用的网络传输协议。TCP 协议提供可靠的连接,而 UDP 协议提供不可靠的连接。 TCP 协议是面向连接的协议,在建立连接之前,客户端和服务器需要先握手。握手完成后,客户端和服务器之间就会建立一个可靠的连接。在连接…

开源协作知识库软件AFFINE如何本地部署并结合内网穿透实现远程访问——“cpolar内网穿透”

前言 本篇文章讲解Notion开源平替全能知识库工具AFFINE如何本地部署,并实现公网远程访问。AFFiNE 是一个全新的开源项目,旨在克服 Notion 和 Miro 在安全和隐私方面的一些局限性。它的设计目标是帮助用户将会议记录、待办事项、文档中的目标、视频会议白…

快速排序的非递归实现

上期我们实现了快速排序的递归实现,但是我们知道如果递归深度太深,栈就会溢出,所以我们本期将为大家讲述快速排序的非递归实现,我们需要用到栈的数据结构,我们知道栈中的数据全是在堆区开辟的空间,堆的空间…

Halcon reduce_domain和scale_image的作用

在Halcon中,reduce_domain是用于缩小图像域(Image Domain)的操作。 它的作用是通过指定一个感兴趣区域(ROI,Region of Interest),将图像数据限制在该区域内,从而实现对图像进行裁剪…