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

news/2024/9/21 1:30:10 标签: 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_60">一、新增mysql从库

mysql_61">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

windows_91">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.niftyadmin.cn/n/5667961.html

相关文章

视频单目标跟踪研究

由于对视频单目标跟踪并不是很熟悉,所以首先得对该领域有个大致的了解。 视频目标跟踪是计算机视觉领域重要的基础性研究问题之一,是指在视频序列第一帧指定目标 后,在后续帧持续跟踪目标,即利用边界框(通常用矩形框表…

卷积神经网络经典模型架构简介

【图书推荐】《PyTorch深度学习与企业级项目实战》-CSDN博客 《PyTorch深度学习与企业级项目实战(人工智能技术丛书)》(宋立桓,宋立林)【摘要 书评 试读】- 京东图书 (jd.com) ImageNet是一个包含超过1 500万幅手工标记的高分辨率图像的数据…

MySQL索引知识个人笔记总结(持续整理)

本篇笔记是个人整理的索引知识总结,刚开始有点乱,后续会一直边学边整理边总结 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。就好比索引就是数据的目录 索引结构 Btree索引,Hash索引,Full-text索引,R-tree(空…

2、无线通信的主要特点

无线通信针对有线通信静态的缺点,以开放式来传递消息,打破了一定要有全封闭链路的限制,并将通信方式从静态推广到可移动的准动态。其代价是牺牲了全封闭的优质人造通道,来换取无须采用固定介质专用线路的开放式传输的灵活性&#…

一起对话式学习-机器学习03——模型评估与模型选择

【一】前言 这一部分其实已在第二节中介绍到,这节起到回顾归纳的作用。 【二】训练误差与测试误差 首先,在分类问题中,有误差率和准确率两个概念,二者和为1。 误差率:分类错误的样本数占总数的比例。 其次&#xff0c…

页面关键路径渲染详解

关键路径渲染 浏览器不会等待全部资源都下载完后才进行渲染,而是采用渐进式的渲染方式,本文就介绍一下这种渐进式的渲染方式。 当浏览器获取到用于呈现网页的资源后,通常就会开始渲染网页。那么究竟是在什么时候就会开始渲染? …

docker容器的172的ip地址,如何与宿主机之外的网络设备通信?

宿主机的地址比如是192.168.1.51 而docker容器比如web1,的ip地址是172.17.0.3 容器如何与外界通信? 通过NAT,网络地址转换 首先,宿主机需要设置 echo net.ipv4.ip_forward 1 >> /etc/sysctl.conf sysctl -p 开启…

深度学习实战91-利用时空特征融合模型的城市网络流量预测分析与应用

大家好,我是微学AI,今天给大家介绍一下深度学习实战91-利用时空特征融合模型的城市网络流量预测分析与应用。本文围绕基于时空特征融合的城市网络流量预测展开。介绍了城市网络流量预测的重要性和现实需求,以及时空特征融合模型,包括其原理和优势。然后展示所使用的数据集,…