Mysql主从分离

一、前言

        某个应用场景中,在操作数据库这部分,往往是数据库的读取往往大于数据库的写入,当读取数据达到数据库的瓶颈时,性能下滑,影响数据的写入,导致整个应用的不可用。为了解决这个问题,这时,引入了 读写分离的数据库架构,多个从库分摊了读数据的压力。

二、什么是读写分离 

        读写分离其实就是将数据库分为主从库,主库负责写入数据,从库负责读取数据,主库与从库通过 mysql 的 Slave机制进行主从复制。主数据库只有一个,从数据库有多个,这是一种常见的数据库架构。

三、读写分离的结构图

        

         上图,客户端访问服务器,服务器通过 数据库中间件 或者其他的逻辑,使得[写入、修改、删除] 操作 主库 , 而查询读取从库。

        主库生产 binary log 的二进制日志文件,通过 slave 机制,通过连接主库,读取 binarylog 生成 中级文件,从数据同步 中级文件,写入从数据库,从而实现了 主从数据的同步。

四、前提条件

         1、搭建读写分离数据库结构前,读库 slave 需要跟写库 master 的数据一致。

         2、写数据必须操作主库

        3、读去数据不一定是从库,因为从库同步主库的数据,会有一定的延迟,在延迟内,主从数据可能不一致,因此,在某些特殊的情况下,需要读取主库来保证数据的即使型。

        读写分离降低主数据库的读压力,但是并不代表主库就不允许读数据了。在一些特殊场景允许读取主数据库的数据。

五、环境准备

         为了实验,我这里准备了3台机器,一台  window , 2台 centos 7 的虚拟机。

避免一些不必要问题,推荐主从mysql 版本一致。

主机角色系统mysql版本
192.168.83.1win115.7.26注意开放3306端口
192.168.23.148centos78.0.34

主数据库:

 从数据库:

 

 六、配置主数据库

        我们配置主数据库时,只需要生成 binary log 的二进制日志文件  和创建一个拥有访问权限的 mysql 用户 即可,其他的操作不会影响到从数据库的配置。

        1、看看一下主数据库的状态

        查看 主库的状态。

show master status;

 输出结果: 

        从上图可以看出, 暂时没有主从的设置。 

        2、配置文件的设置

        找到 win 11 下面的 mysql 配置文件  my.ini 。在 配置文件的 [mysqld] 下面增加配置,如下:

#  这里填1 ,可以任意填写,但是不允许数据库之间同
server-id=1
# 只备份的数据库
binlog-do-db=demo_slave
# binlog_ignore_db 表述忽略备份的数据库
binlog_ignore_db=mysqld
# binary log 二进制日志文件的格式,有三种(statement , row , mixed),可以根据场景选用,mysql默认采用statement,建议使用mixed
binlog_format=mixed
# 二进制文件记录
log-bin=master-bin
# 生成二进制文件的名称格式
log-bin-index=master-bin.index

        把上面的配置复制到 mysql 的配置文件,然后重启 mysql 服务,在使用 show master status; 查看主库的配置情况。

主从配置还有很多配置,请自行配置百度。

 重启之后,你会发现在 mysql 存放数据库的文件里面出现了 对应的 binary log 文件。

 登录 MySQL, 查看状态:

 如果出现上诉结果,则主库的配置部分已完成。

3、创建主从访问的用户

        1、查看一下用户

        2、创建复制用户 [repl]

-- 创建用户
create user repl;

         3、给[repl]用户权限

# 给 repl 用户授权,并设置密码为  replpwd
# 允许 % 所有服务器访问
grant replication slave on *.* to 'repl'@'%' identified by'replpwd';

输出结果:

 七、配置从数据库

 1、查看从数据库的slave状态

# 查看 slave 的状态
show slave status \G;

 2、查看从数据库的配置

 

 3、配置文件的设置

 在配置文件 【mysqld】 下面增加配置如下:

#  这里填2 ,可以任意填写,但是不允许数据库之间同
server-id=2
# 中继日志文件的命名格式
relay-log-index=slave-relay-bin.index
# 中继日志文件的汇总文件
relay-log=slave-relay-bin

# 只复制数据库 , 多个数据库写多条
#只复制db1和db2数据库
; replicate-do-db=db1
; replicate-do-db=db2
replicate-do-db=demo_slave

# 忽略复制数据库 , 多个数据库写多条
replicate-ignore-db=mysql

 配置完成后,重启 mysql 服务,然后查看

         配置完成后, mysql 的数据 目录下 自动生产了  4个数据文件。

4、链接主数据库

-- 连接数据库
CHANGE MASTER TO
  MASTER_HOST='192.168.83.1',
  MASTER_USER='repl',
  MASTER_PASSWORD='replpwd',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='master-bin.000001',
  MASTER_LOG_POS=154;

-- MASTER_HOST 主数据库的IP
-- MASTER_USER 主数据库的用户
-- MASTER_PASSWORD 主数据库的用户密码
-- MASTER_PORT  主数据库的端口,必须查看主数据库服务器是否有开放端口
-- MASTER_LOG_FILE   主数据库的  binarylog 二进制日志文件
-- MASTER_LOG_POS    主数据库的  binarylog 二进制日志 的偏移量(主数据库是多少则填多少)

 启动 slave

start slave

如果报错:

ERROR 1872 (HY000): Replica failed to initialize applier metadata structure from the repository

         因为从数据库可能以前配置过,生成过 中继日志文件,导致 从数据库 slave 中还记录着旧数据,这时可以使用 命令

reset slave

重新设置即可。

 查看状态:

查看数据库: 

 

 5、检查从数据库是否运作正常

 在主数据库创建 demo_master 数据库,看看 从数据库是否同步过来。

 有上图可知,没有同步上来。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值