配置MySQL读写分离(主从服务器)

首先我们要清楚为什么要配置读写分离?

一个应用程序,当数据不断增多的时候,数据库的压力倍增,数据库的增删改查 可以分为读操作和写操作,
我们可以把读和写分开进行。读是在某一个服务器,写是在某一个服务器,对应主从服务器,主服务器是写操作,
从服务器读操作,一个主服务器可以有多个从服务器,实际业务中,读操作往往倍大于写操作,例如 :淘宝京东的大量浏览

在主服务器写的同时,数据同步到每一个从服务器中 保持数据的一致性和完整性 (主从复制)这就是MySQL的读写分离

读写分离的原理

其实很简单,就是一个主服务器带领着一堆从服务器,应用程序对数据库都有两个基本操作 读和写,读写分离是建立在主从关系的基础上,写操作只在主服务器上完成,从服务器基于主服务器的二进制日志(binlog)跟踪所有的对数据库的完整更改实现。读操作呢会被分配到从服务器中。这样就实现了最基本的读写分离。

如何实现主从复制保持数据一致性?

要实现主从复制,必须在主服务器启动二进制日志(binlog)。主从复制是异步复制,所以有三个线程参数。主服务器一个线程(Io线程)从服务器两个线程(IO线程和SQL线程)

配置主从服务器

重点来咯,开始配置。先说一下我的环境 主服务器在虚拟机(ubnutu20.04)上, 从服务器在本机windows上,我只配了单主单从,一主多从配置文件都是一样的。

首先我们要配置主数据库(后面成为master)

如果你是直接从ubnutu20.04库里面下载的MySQL那配置文件应该在  /etc/mysql/mysqld.conf.d 里面有一个 mysqld.cnf

然后编辑这个文件,在里面加入以下配置

log-bin=mysql-bin #binlog的名字
binlog-do-db=smartvideo #要进行复制的数据库 可以有多个
binlog_ignore_db=mysql #不进行复制的数据库
binlog_ignore_db=information_schema  #不进行复制的数据库
binlog-format=mixed   #控制复制基于的方式,有基于语句(statement),基于行(row),混合(mixed),一般我们用mixed
read-only = 0  #(0为master 主库读写)
server-id=55 #MySQL服务器的id 这个随意配就行 只要从库和它不一样就行 一般我们用服务器ip的后缀

主要注释加的时候要给删除了,有的不支持中文的注释。好了 主数据库这样就算配置好了,还有很多其他功能的配置,这里呢我只是做了最简配置的读写分离,如有需要大家可以自行百度。

然后我们要创建一个从库能连接的用户 我这里用的MySQL8.0  它创建用户的语句和之前不一样

create user '用户名'@'允许访问的ip地址 %无限制,建议%' identified with mysql_native_password by '你的密码';

记住 MySQL8.0只要是和用户密码的操作必须带上 with mysql_native_password 不然是连接不上的 

flush privileges;刷新

然后执行sql命令  show master status;查看master的状态 你会看到

这个要记好 file和position 等会我们配置从库要用

接下来我们配置从数据库 因为我的从数据库是在windows上  所以配置文件的位置和ubuntu的不一样。如果你的从数据库也在ubuntu上 那么配置文件位置同上。打开MySQL所在的位置,我的配置文件名称是my.ini ,直接编辑 添加如下配置

relay-log  = mysql-bin #读取binlog的名字 要和主库保持一致
relay-log-index = mysql-bin.index #自己生成的binlog名称
binlog-do-db=smartvideo #要复制的数据库
read-only = 1  #(1为slave 从库只读)
server-id=143 #服务id 用服务器ip后缀

配置好后重启MySQL服务,然后执行下面的sql命令

stop slave;#这个是关闭slave线程

change master to 
        master_host='主库ip地址',
        master_user='前面我们创建的用户名',
        master_password='前面我们创建的密码',
        master_log_file='上面master file的值', #binlog文件的名字
        master_log_pos=上面master postion的值; #binlog文件的位置 注意这个时候不要对主库进行添加            
                                               修改等操作,不然postion是会变的

start slave; 

show slave status;

只要 Slave_IO_State 是 Waiting for master to send event;说明我们已经配置成功了,所有从库都是一样的配置

这里呢说几个可能会出现的报错 

Slave_IO_Running:Connecting ; Slave_SQL_Running:Yes

推荐大家看一下这里:https://blog.csdn.net/mbytes/article/details/86711508

Access denied; you need (at least one of) the SUPER privilege(s) for this operation

这个是binlog的文件定位错了,如果确定没有错 恭喜你 那你给从库 执行change master的时候 一定遇到了这个报错

Data cloumns 'Relay_log_name' too long 说我们的relaylog的名字太长,这个就是我们从库配置文件中relay-log-index的配置,报错的原因是不知道为什么生成的文件名称后面带了两个空格 ,试试重启一下服务 看行不行 如果不行 留言一下吧   这个我也不太确定怎么解决的  也是不知道咋回事它自己就好了 

好了 以上就是主从服务器的配置了,这里只是最简配置 各个参数也给的比较详细,给新手看的

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值