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.mfbz.cn/a/233927.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Copilot】Edge浏览器的copilot消失了怎么办

这种原因,可能是因为你的ip地址的不在这个服务的允许范围内。你需要重新使用之前出现copilot的ip地址,然后退出edge的账号,重新登录一遍,最后重启edge,就能够使得copilot侧边栏重新出现了。

C语言算法与数据结构,旅游景区地图求最短路径

背景: 本次作业要求完成一个编程项目。请虚构一张旅游景区地图,景区地图包括景点(结点)和道路(边):地图上用字母标注出一些点,表示景点(比如,以点 A、B、C、…

线程及实现方式

一、线程 线程是一个基本的CPU执行单元,也是程序执行流的最小单位。引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务&#x…

漏洞复现-大华dss struts2-045表达式注入漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

EdgeYOLO: anchor-free,边缘部署友好

简体中文 1 Intro 2 Updates 3 Coming Soon 4 Models 5 Quick Start \quad 5.1 setup

Leetcode刷题笔记题解(C++):92. 反转链表 II

思路:获取要反转的区间,拆开之后进行反转再拼接 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* …

我有才专属定制适合个人的知识付费平台,打造个性化品牌与自主管理体验

在当今数字化时代,知识付费平台已经成为人们获取专业知识、提升自身素质的重要渠道。然而,公共知识付费平台虽然内容丰富,但难以满足个人或企业个性化的需求和品牌打造。因此,我们提出了专属定制适合个人的知识付费平台的概念&…

题目:跳石头(蓝桥OJ 364)

题目描述&#xff1a; 解题思路&#xff1a; 注意点&#xff1a;二分需要一些冗余&#xff0c;即遍历的r大小可能比需要建立的数组大。 题解&#xff1a; #include<bits/stdc.h> using namespace std; const int N 5e4 9; using ll long long; int L, n, m; int a[N…

55.手写实现grpc连接池以及gin和grpc交互

文章目录 一、简介前置说明 二、敏感词过滤服务1、定义sensitive.proto文件2、protoc生成pb.go文件3、sensitive服务端实现 三、关键词匹配服务1、编写keywords.proto文件2、生成pb.go文件3、keywords服务端实现 四、gin web 路由服务1、新建grpcpool服务作为gin web服务2、根据…

202301209将RK3399的挖掘机开发板在Android10下设置系统默认为24小时制

202301209将RK3399的挖掘机开发板在Android10下设置系统默认为24小时制 2023/12/9 22:07 应该也可以适用于RK3399的Android12系统 --- a/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/frameworks/base/packages/SettingsProvider/res/values/default…

AtCoder Beginner Contest 328

A - Not Too Hard (atcoder.jp) AC代码: #include<bits/stdc.h> #define endl \n //#define int long long using namespace std; const int N10; int s[N]; int n,x; void solve() {cin>>n>>x;for(int i1;i<n;i) cin>>s[i];int ans0;for(int i1;…

【现代信息检索】国科大何苯老师现代信息检索课程作业 —— 第一次作业

1 考虑如下几篇文档&#xff1a; 文档1&#xff1a;new home sales top forecasts 文档2&#xff1a;home prices rise in june 文档3&#xff1a;increase in home sales in june 文档4&#xff1a;july new home sales rise a. 画出文档集对应的词项-文档矩阵。 文档 1文…

java--DateTimeFormatter、Period、Duration

1.DateTimeFormatter 2.LocalDateTime提供的格式化、解析时间的方法 3.Period(一段时期) 可以用于计算两个LocalDate对象相差的年数、月数、天数。 4.Duration(持续时间) 可以用于计算两个时间对象相差的天数、小时数、分数、秒数、纳秒数&#xff1b;支持LocalTime、LocalDa…

linux通过命令切换用户

在Linux中&#xff0c;你可以使用su&#xff08;substitute user或switch user&#xff09;命令来切换用户。这个命令允许你临时或永久地以另一个用户的身份运行命令。以下是基本的用法&#xff1a; 基本切换到另一个用户&#xff08;需要密码&#xff09;&#xff1a;su [用户…

【数据结构】哈希表算法总结

知识概览&#xff08;哈希表&#xff09; 哈希表可以将一些值域较大的数映射到较小的空间内&#xff0c;通常用x mod 质数的方式进行映射。为什么用质数呢&#xff1f;这样的质数还要离2的整数幂尽量远。这可以从数学上证明&#xff0c;这样冲突最小。取余还是会出现冲突情况。…

智慧工地安全管理方案,智慧工地云平台源码,java项目源码

智慧工地安全管理方案&#xff0c;智慧工地云平台源码 智慧工地是一种以信息技术为手段&#xff0c;全面提升建筑施工过程的管理水平、提高工程质量和安全、降低工程成本和风险、提高施工效率和管理水平的智能化技术和系统。通过物联网、互联网、大数据、云计算等技术的应用&a…

跟着chatgpt一起学|clickhouse入门(3)MergeTree

跟着chatgpt一起学|2.clickhouse入门&#xff08;1&#xff09;-CSDN博客 跟着chatgpt一起学|2.Clickhouse入门&#xff08;2&#xff09;-CSDN博客 chatgpt规划的学习路径如下&#xff1a; 3.MergeTree的分类和适用场景 MergeTree 引擎是 ClickHouse 中最为强大和多用途的引…

linux Ubuntu下,第一个C++程序访问数据库,遇到的问题,及解决办法

在ubuntu下安装了mysql&#xff0c;mysql以后&#xff0c;编写了第一个访问数据库的程序&#xff1a; #include <iostream> #include <string> #include <cstdlib> //for system #include <mysql.h>using namespace std;int main() {mysqlpp::Connect…

文心一言API(高级版)使用

文心一言API高级版使用 一、百度文心一言API(高级版)二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例 三、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 四、重要说明 一、百度文心一言API(高级版) 基于百度文心一言语言大模型的智能文本对话AI机器…

C语言指针基础题(一)

目录 例题一题目解析答案 例题二题目解析答案 例题三题目解析答案 例题四题目解析答案 例题五题目解析答案 例题六题目解析答案 例题七题目解析答案 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412; 个人主页 &#x…
最新文章