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

news2024/9/21 18:36:40

文章目录

  • 前言
    • 读写分离的基本原理
  • 环境介绍及说明
    • 主库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.coloradmin.cn/o/2153019.html

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

相关文章

rabbitmq 短信验证码

1.生成的验证码用redis存 减少数据库压力 2.通知运营商发送短信的事情交给rabbitmq的队列去做,无论成功或者是失败,用户那边都不知道。没有收到验证码(监听失败)用户只会觉得是运营商的问题,而不会怀疑是我们的系统有问…

Linux文件IO(四)-返回错误处理与errno详解

1.前言 在上一文章中,给大家编写了很多的示例代码,大家会发现这些示例代码会有一个共同的特点,那就是当判断函数执行失败后,会调用 return 退出程序,但是对于我们来说,我们并不知道为什么会出错&#xff0…

C++进阶|多态知识点详解及经典面试题总结

🍬 mooridy-CSDN博客 🧁C专栏(更新中!) 目录 1. 多态的概念 2. 多态的定义及实现 2.1 多态的构成条件 2.2 虚函数的重写/覆盖 2.3 虚函数重写的⼀些其他问题 2.4 override 和 final关键字 2.5 重载/重写/隐藏的…

(笔记自用)位运算总结+LeetCode例题:颠倒二进制位+位1的个数

一.位运算总结: 在解题之前理解一下为什么需要位运算?它的本质是什么? 力扣上不少位运算相关的题,并且很多题也会用到位运算的技巧。这又是为什么? 位运算的由来 在计算机里面,任何数据最终都是用数字来表示的&…

mysqldump使用cmd窗口和powersell窗口导出sql中文乱码的问题

项目场景 我在使用Mariadb数据库更新数据的时候,由于数据库的表格中含有中文,在使用mysqldump导出sql语句的时候,中文显示乱码,如下图所示: 环境描述 系统:windows10数据库: Mariadb -10.6.16…

Vue2中路由的介绍和使用

一.路由的基本概念 一说路由,大家首先想到的可能是路由器,路由器的原理就是给连接的设备一个IP地址,通过IP地址来映射到设备,实现连接,本质上是一种映射关系。 在vue2中就是路径与组件间的映射。 路由是使用vue2制作…

Python爬虫使用实例-umei

优美图库 www.umei.cc BV1Ag41137re 1/获取资源 查看网站资源结构 多页,每个item只有一张图 多页,每个item都是一个图集 最大页码 内外层图集均有若干page。 通过尾页按钮确定pageNum: 2/发送请求 response requests.get(urlurl, header…

快速将Mongo Compass的shell语句转成java代码

步骤一、从MongoCompass中获取java代码 将java代码复制出来&#xff0c;从MongoCompass中复制的java代码基本格式如下&#xff1a;&#xff08;是Bson原生格式&#xff09; List<Document> list Arrays.asList(new Document("$match",new Document("name…

探索视频美颜SDK与直播美颜工具的开发实践方案

直播平台的不断发展&#xff0c;让开发出性能优异、效果自然的美颜技术&#xff0c;成为了技术团队必须面对的重要挑战。本篇文章&#xff0c;小编将深入讲解视频美颜SDK与直播美颜工具的开发实践方案。 一、视频美颜SDK的核心功能 视频美颜SDK是视频处理中的核心组件&#xf…

Cocos Creator3.x设置动态加载背景图并且循环移动

效果图 项目结构 项目层级结构&#xff1a; 预制&#xff1a; 代码 import { _decorator, CCFloat, Component, Node, Sprite, instantiate, Prefab, assert } from cc; const { ccclass, property } _decorator;/*** 背景脚本*/ ccclass(Background) export class Backg…

2024年华为杯研赛(D题)数学建模竞赛解题思路|完整代码论文集合

我是Tina表姐&#xff0c;毕业于中国人民大学&#xff0c;对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在&#xff0c;我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…

反激电路中TL431光耦反馈参数的计算,环路设计思路

反馈的过程 当副边的输出电压升高时&#xff0c;TL431参考端电压&#xff08;R端&#xff09;电压也会升高&#xff0c;使得TL431的导通量增加&#xff0c;同时光耦内部的发光二极管流过的电流也会增大&#xff0c;进而使得光耦三极管导通量增加&#xff0c;相连的电源IC电压反…

《粮油与饲料科技》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问&#xff1a;《粮油与饲料科技》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的第一批认定 学术期刊。 问&#xff1a;《粮油与饲料科技》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;中文天地出版传媒集团股份有限公司…

缺陷及缺陷管理(复习)

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; 今日目标 能够说出缺陷的判定标准 能够说出描述缺陷的6大核心内容 能够描述缺陷状态、严重程度、优先级的作用 能够按照提供的缺陷模版完成一个缺陷的提交 能够说出缺陷的跟踪流程 能够在禅道中提交测…

黑神话:悟空配置推荐,升级显卡还是ToDesk云电脑

虽然距离《黑神话&#xff1a;悟空》上线已有一个月的时间&#xff0c;但该游戏在国内外市场仍然火热&#xff0c;想要玩好、玩顺它着实是需要花费一些心力的。除了操作上的经验、技巧&#xff0c;用高配置电脑设备来实现无疑是最为关键的要素之一。那么如若现有机型性能不足&a…

2024年华为杯数学建模研赛(C题) 建模解析| 磁芯损耗建模 | 小鹿学长带队指引全代码文章与思路

我是鹿鹿学长&#xff0c;就读于上海交通大学&#xff0c;截至目前已经帮2000人完成了建模与思路的构建的处理了&#xff5e; 本篇文章是鹿鹿学长经过深度思考&#xff0c;独辟蹊径&#xff0c;实现综合建模。独创复杂系统视角&#xff0c;帮助你解决研赛的难关呀。 完整内容可…

(学习总结18)C++多态

C多态 一、多态的概念二、多态的定义及实现多态的构成条件1. 实现多态的两个必须条件&#xff1a;2. 虚函数3. 虚函数的重写/覆盖4. 多态场景的一个选择题5. 虚函数重写的一些其他问题协变析构函数的重写 6. override 和 final 关键字7. 重载/重写/隐藏的对比 三、纯虚函数和抽…

【堆栈操作基本规则】假设SS的初值为2000H,SP初值为0200H,在执行了5次入栈操作和2次出栈操作后SP的内容为多少?写出计算过程。

欢迎来到我的技术博客&#xff01; &#x1f389; 这里不仅有满满的编程干货和学习资源&#xff0c;我的某站账号也为你准备了更多实用的技术视频和知识分享。 &#x1f449; 点击关注我的小破站账号&#xff0c;获取更多编程技巧和学习资源&#xff01; 小破站主页 我们来逐…

新手入门:小程序架构快速上手

目录 新建项目和配置 项目基本结构 新建小程序页面 修改项目首页 全局配置 窗口 tabBar 页面配置 小程序基本语法 wxml 数据绑定 条件渲染 列表渲染 wxss wxss 对比 css rpx import 全局样式和局部样式 js wxs 数据请求 get和post请求 小程序和跨域 小程…

C++进阶 set和map讲解

set 和 map set 和 multiset set set 类的介绍 set 是基于红黑树实现的有序容器。它的插入、删除、查找操作的时间复杂度均为 O(log n)。遍历时&#xff0c;set 的迭代器按照中序遍历&#xff0c;因此它总是以升序排列元素。 set 的声明如下&#xff0c;T 表示 set 的关键字类…