Windows环境下搭建MySQL主从同步实现读写分离

文章目录

  • 前言
    • 读写分离的基本原理
  • 环境介绍及说明
    • 主库my.ini初始配置
    • 创建用于同步的数据库和表
  • 一、新增mysql从库
    • 1.复制mysql文件夹
    • 2.修改从库的my.ini
    • 3.安装到windows服务
  • 二、在my.ini中配置主、从库相关参数
    • 1.主库新增配置参数
      • 不同版本参数不同问题
    • 2.从库新增配置参数
    • 3.删除auto.cnf文件
    • 4.重启主库和从库
  • 三、关联主从库
    • 1.主库授权主从复制专用账号
    • 2.设置从库向主库同步数据、并检查链路
    • 3.测试


前言

面对日益增加的系统访问量,数据库的吞吐量面临着巨大瓶颈。 对于同一时刻有大量并发读操作和较少写操作类型的应用系统来说,将数据库拆分为主库和从库,主库负责处理事务性的增删改操作,从库负责处理查询操作,能够有效的避免由数据更新导致的行锁,使得整个系统的查询性能得到极大的改善。
MySQL的读写分离是一种常见的数据库架构模式,用于提高数据库的可用性和扩展性。通过将读取请求分散到多个从服务器(slave servers),可以减轻主服务器(master server)的负载,从而提高读取性能。同时,写入请求仍然集中在一个主服务器上执行,保证了数据的一致性和完整性。
在这里插入图片描述

读写分离的基本原理

主服务器(Master):负责所有写操作(如插入、更新、删除)。
从服务器(Slave):通过复制主服务器的数据来保持与主服务器的数据一致性,负责读取请求(如查询)。

环境介绍及说明

mysql版本:5.7.22
主库端口:3306
从库端口:3307
mysql官网下载:https://downloads.mysql.com/archives/community/
注意:如果主从库两者版本不一致,一般主库的版本需要比从库的版本低,避免由于版本问题导致有些sql不能执行的问题。

主库my.ini初始配置

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 设置3306端口
port = 3306# 设置mysql的安装目录
basedir=D:\\tools\\mysql-5.7.22-winx64
# 设置mysql数据库的数据的存放目录(自动生成,不然可能报错)
datadir=D:\\tools\\mysql-5.7.22-winx64\\data
# 允许最大连接数
max_connections=10000
# 允许最大连接人数
max_user_connections=1000
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB# 连接时间一年
wait_timeout=31536000
interactive_timeout=31536000

创建用于同步的数据库和表

创建user_db库用于同步数据
在这里插入图片描述
创建user表

CREATE TABLE `user` (`id` int(11) NOT NULL,`name` varchar(50) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

一、新增mysql从库

1.复制mysql文件夹

打开原有的mysql文件夹,复制一份改为从库
如:D:\tools\mysql-5.7.22-winx64(作为主库) --> D:\tools\mysql-5.7.22-winx64-s1(作为从库)
在这里插入图片描述

2.修改从库的my.ini

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 设置3307端口
port = 3307# 设置mysql的安装目录
basedir=D:\\tools\\mysql-5.7.22-winx64-s1
# 设置mysql数据库的数据的存放目录(自动生成,不然可能报错)
datadir=D:\\tools\\mysql-5.7.22-winx64-s1\\data
# 允许最大连接数
max_connections=10000
# 允许最大连接人数
max_user_connections=1000
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB# 连接时间一年
wait_timeout=31536000
interactive_timeout=31536000

3.安装到windows服务

然后将从库安装为windows服务,注意配置文件位置:
在cmd窗口(命令行窗口)中输入以下命令

mysqld install MYSQL5s1

在这里插入图片描述
打开服务可以看到已经安装到服务中
在这里插入图片描述

注意:以管理员身份运行命令
由于从库是从主库复制过来的,因此里面的数据完全一致,可使用原来的账号、密码登录。

点击启动此服务,启动成功后即完成第一步。
在这里插入图片描述

二、在my.ini中配置主、从库相关参数

1.主库新增配置参数

# 主从配置
server_id = 1    # 主库和从库需要不一致,分别配一个唯一的ID编号
log_bin=master-bin    # 二进制文件存放路径,存放在根目录data文件夹下
#设置需要同步的数据库
binlog_do_db=user_db
#屏蔽系统库同步
binlog_ignore_db=mysql
binlog_ignore_db=information_schema
binlog_ignore_db=performance_schema

注意:要添加在[mysql]下

完整my.ini配置

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 设置3306端口
port = 3306
# 主从配置
server_id = 1    # 主库和从库需要不一致,分别配一个唯一的ID编号
log_bin=master-bin    # 二进制文件存放路径,存放在根目录data文件夹下
#设置需要同步的数据库
binlog_do_db=user_db
#屏蔽系统库同步
binlog_ignore_db=mysql
binlog_ignore_db=information_schema
binlog_ignore_db=performance_schema# 设置mysql的安装目录
basedir=D:\\tools\\mysql-5.7.22-winx64
# 设置mysql数据库的数据的存放目录(自动生成,不然可能报错)
datadir=D:\\tools\\mysql-5.7.22-winx64\\data
# 允许最大连接数
max_connections=10000
# 允许最大连接人数
max_user_connections=1000
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB# 连接时间一年
wait_timeout=31536000
interactive_timeout=31536000                                                                                                                                                                  

不同版本参数不同问题

有些mysql版本可能参数不一样,导致my.ini配置完重启mysql失败,可以尝试使用以下配置

[mysqld]
#开启二进制日志,记录了所有更改数据库数据的SQL语句
log‐bin = mysql‐bin
#设置服务id,主从不能一致
server‐id = 1
#设置需要同步的数据库
binlog‐do‐db=sharding_user_db
#屏蔽系统库同步
binlog‐ignore‐db=mysql
binlog‐ignore‐db=information_schema
binlog‐ignore‐db=performance_schema

详情可以看这篇文章:https://blog.csdn.net/weixin_46425661/article/details/142390527

2.从库新增配置参数

server_id = 2    # 主库和从库需要不一致,分别配一个唯一的ID编号
log_bin=master-bin    # 二进制文件存放路径,存放在根目录data文件夹下
#设置需要同步的数据库
replicate_wild_do_table=user_db.%
#屏蔽系统库同步
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%

注意:要添加在[mysql]下

完整my.ini配置

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 设置3307端口
port = 3307
server_id = 2    # 主库和从库需要不一致,分别配一个唯一的ID编号
log_bin=master-bin    # 二进制文件存放路径,存放在根目录data文件夹下
#设置需要同步的数据库
replicate_wild_do_table=user_db.%
#屏蔽系统库同步
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%
# 设置mysql的安装目录
basedir=D:\\tools\\mysql-5.7.22-winx64-s1
# 设置mysql数据库的数据的存放目录(自动生成,不然可能报错)
datadir=D:\\tools\\mysql-5.7.22-winx64-s1\\data
# 允许最大连接数
max_connections=10000
# 允许最大连接人数
max_user_connections=1000
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB# 连接时间一年
wait_timeout=31536000
interactive_timeout=31536000                                                                                                                                                                      

3.删除auto.cnf文件

主从MySQL下的数据(data)目录下有个文件auto.cnf,文件中定义了uuid,要保证主从数据库实例的uuid不一样,建议直接删除掉,重启服务后将会重新生成。
在这里插入图片描述

4.重启主库和从库

net start [主库服务名]net start [从库服务名]

或在服务中重启服务
在这里插入图片描述

三、关联主从库

1.主库授权主从复制专用账号

进入主库,我这里使用navicat

#授权主库复制专用账号
GRANT REPLICATION SLAVE ON *.* TO 'db_sync'@'%' IDENTIFIED BY 'db_sync123';
#刷新权限
FLUSH PRIVILEGES;
#确认位点 记录下文件名以及位点
show master status;

在这里插入图片描述

2.设置从库向主库同步数据、并检查链路

先停止同步

STOP SLAVE;

修改从库指向到主库,使用上一步记录的文件名以及位点

CHANGE MASTER TO
master_host = 'localhost',
MASTER_PORT=3306,
master_user = 'db_sync',
master_password = 'db_sync123',
master_log_file = 'master-bin.000002',
master_log_pos = 1090;

字段说明:
master_host :主库的ip
MASTER_PORT:主库的端口号,不写默认3306
master_user 和 master_password: 为上面主库操作中授权主备授权主库复制专用账号时填写的字符串
master_log_file和master_log_pos:填写在主库中通过show master status查询到的File和Position字段

#启动同步
START SLAVE;
#查看从库状态Slave_IO_Runing和Slave_SQL_Runing都为Yes说明同步成功,如果不为Yes,请检查error_log,然后排查相关异常。
show slave status;

当Slave_IO_Running和Slave_SQL_Running字段为Yes时表示配置成功。
在这里插入图片描述

3.测试

在主库user表中添加数据
在这里插入图片描述
刷新从库user表
在这里插入图片描述
发现自动同步数据成功。


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

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

相关文章

CSS 复合选择器简单学习

目录 1. Emmet 语法 1.1 快速生成 HTML 结构语法 1.2 快速生成 CSS 样式 1.3 格式化工具 2. 调试 2.1 打开调试工具 2.2 使用调试工具 3. 复合选择器 3.1 后代选择器 3.2 子选择器 3.3 并集选择器 3.4 伪类选择器 3.3.1 链接伪类选择器 3.3.2 :focus 伪类选择器 …

7--SpringBoot-后端开发、原理详解(面试高频提问点)

目录 SpringBoot原理 起步依赖 自动配置 配置优先级 Bean设置 获取Bean 第三方Bean SpringBoot原理 内容偏向于底层的原理分析 基于Spring框架进行项目的开发有两个不足的地方: 在pom.xml中依赖配置比较繁琐,在项目开发时,需要自己去找…

VuePress搭建文档网站/个人博客(详细配置)主题配置-侧边栏配置

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

洞悉市场先机,Vatee万腾平台助力企业精准决策

在瞬息万变的商业环境中,每一个市场动向都可能成为企业兴衰的关键。因此,洞悉市场先机,做出精准决策,成为了企业持续发展和保持竞争力的核心要素。Vatee万腾平台,凭借其强大的数据分析能力和智能化技术,正成…

生信初学者教程(八):数据收集

文章目录 数据分布表达谱数据最终数据分布自动下载GSE14520下载GSE149614下载其它数据在确定研究疾病为肝细胞癌**(Liver Hepatocellular Carcinoma: HCC)**后,系统地进行了文献回顾,专注于搜索与HCC相关的荟萃分析文章,以获取该领域的研究动态和已有成果。为了支持的研究…

dev c++输出中文乱码解决 printf乱码解决

把编码换成utf8就行 打开eiditor options

数据结构修炼——顺序表和链表的区别与联系

目录 一、线性表二、顺序表2.1 概念及结构2.2 接口实现2.3 一些思考以及顺序表的缺点 三、链表3.1 概念及结构3.2 链表的分类3.3 链表的实现3.3.1 无头单向非循环链表3.3.2 带头双向循环链表 四、顺序表和链表的区别 一、线性表 线性表(linear list)是n…

叶片检测系统源码分享

叶片检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

地平线4登录xbox后提示需要登录档案怎么解决

这个游戏是真nt(在联机上),典型搞联机2小时游玩半小时,多半时间都花费在联机上了,不是为了联机和朋友跑车,早给他卸载了。 本人的游戏问题:看了一些视频感觉没什么作用,我的现象就是…

【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第一篇-原理】

如果想直接制作,请看【第二篇】内容 这次做一个这样的东西,通过在2DRT上实时绘制,生成动态的体积纹理,也就是可以runtime的VDB 设想的文章流程: 对原理进行学习制作体积渲染制作实时绘制 第一篇(本篇)是对“…

Java面试——集合篇

1.Java中常用的容器有哪些? 容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表。 如图: 面试官追问:说说集合有哪些类及他们各自的区别和特点? S…

Web+Mysql——MyBatis

MyBatis 目标 能够完成Mybatis代理方式查询数据能够理解Mybatis核心配置文件的配置 1,Mybatis 1.1 Mybatis概述 1.1.1 Mybatis概念 MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发 MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由…

idea启动oom了解决

解决 Error:java: java.lang.OutOfMemoryError: WrappedJavaFileObject[org.jetbrains.jps.javac.InputFileObject[file:///D:/mingan/pb/backend/src/main/java/com/cy/backend/service/impl/StorageServiceImpl.java]]pos36199: WrappedJavaFileObject[org.jetbrains.jps.j…

nodejs 012:Babel(巴别塔)语言转换与代码兼容

这里写目录标题 安装 Babel配置presets配置:常见的 Babel Presetsplugins配置:以 plugin-transform-class-properties 的类中属性为例index.jsx Babel 是一个独立的 JavaScript 编译器,主要用于将现代 JavaScript 代码转换为旧版本的 JavaScr…

Jira Cloud涨价5%-20%,钉钉项目Teambition成优选替代

近日,Jira再次宣布涨价,Cloud版涨幅达到5%-20%,这一消息来源于Atlassian官方面向合作伙伴发布的2024年最新涨价通知。 Atlassian旗下核心产品,包括Jira、Confluence、JiraServiceManagement等的Cloud版本价格将有所提高&#xff…

使用k8s搭建mariadb+nginx+wordpress

前期准备 1.启动docker进程 2.拉取三个镜像 mariadb:latest wordpress:latest nginx:alpine 3.保存三个镜像 docker save -o wordpress.tar wordpress:latest 4.上传到其他的节点主机 scp wordpress.tar root 192.168.118.88:~ 5.切换到node01和node02两个节点上 ctr…

【最新华为OD机试E卷】报文响应时间(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…

谷歌女高管被裁员,3份兼职越干越开心!55岁正是闯的年纪!

在职场的金字塔顶端,那些大龄女性高管正在面对一场无形却深刻的危机。曾经,她们凭借坚定的决心和无畏的勇气,在职场中披荆斩棘,闯出了一片天地。 现代职场的年轻化和技术更新正将她们逐渐推向边缘。裁员通知的突如其来&#xff0…

Leetcode面试经典150题-97.交错字符串

给定三个字符串 s1、s2、s3&#xff0c;请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下&#xff0c;其中每个字符串都会被分割成若干 非空 子字符串 &#xff1a; s s1 s2 ... snt t1 t2 ... tm|n - m| < 1交错 是…

好的头戴式降噪耳机一定很贵吗?四款热门头戴耳机盘点及推荐!

在快节奏的现代生活中&#xff0c;噪音无处不在&#xff0c;它常常干扰着我们的工作、学习与休闲时光。而一款高性价比的降噪蓝牙耳机&#xff0c;就如同一个贴心的伙伴&#xff0c;能为我们营造出一片宁静的听觉空间。如今&#xff0c;耳机市场蓬勃发展&#xff0c;想要好的头…