如何提升数据库并发能力 ----- 主从复制

以下操作皆在Linux中进行

MySQL安装请看:CSDN

一、提升数据库高并发访问的效率的三种方式(考虑的顺序)

1、如何优化SQL和索引

2、采用缓存的策略,比如使用Redis将热点数据保存在内存数据库中,提升读取的效率

3、对数据库采用主从架构,进行读写分离。

二、主从复制的优点

  • 读写分离
    • 我们可以通过主从复制的方式来同步数据,然后通过读写分离来提高数据库并发处理能力。其中一个是Master主库,负责写入数据,我们称之为:写库。其它都是Slave从库,负责读取记录,我们称之为:读库。当主库进行更换新的时候,会自动将数据复制到从库中,而我们在客户端读取数据的时候,会从从库中进行读取。面对“读多写少”的需求,采用读写分离的方式,可以实现更高的并发访问。同时,我们还能对从服务器进行负载均衡,让不同的读请求按照策略均匀地分发到不同的从服务器上,让读取更加顺畅。读取更加顺畅的另一个原因,就是减少了锁表的影响,比如我们让主库负责写,当主库出现写锁的时候,不会影响到从库进行SELECT的读取。
  • 数据备份
    • 我们通过主从复制将主库上的数据复制到了从库上,相当于是一种热备份机制,也就是在主库正常运行的情况下进行的备份,不会影响到服务。

三、主从复制的原理

实际上主从同步的原理就是基于binlog进行数据同步的。在主从复制过程中,会基于3个线程 来操作,一个主库线程,两个从库线程。

  • 二进制日志转储线程(Binlog dump thread)是一个主库线程。当从库线程连接的时候, 主库可以将二进制日志发送给从库,当主库读取事件(Event)的时候,会在Binlog加锁,读取完成之后,再将锁释放掉。
  • 从库I/O线程会连接到主库,向主库发送请求更新Binlog。这时从库的I/O线程就可以读取到主库的二进制日志转储线程发送的Binlog更新部分,并且拷贝到本地的中继日志(Relay log)。
  • 从库SQL线程会读取从库中的中继日志,并且执行日志中的事件,将从库中的数据与主库保持同步。

1、原理剖析

1.1、三个线程

  实际上主从同步的原理就是基于binlog进行数据同步的。在主从复制过程中,会基于3个线程 来操作,一个主库线程,两个从库线程。

  二进制日志转储线程(Binlog dump thread)是一个主库线程。当从库线程连接的时候, 主库可以将二进制日志发送给从库,当主库读取事件(Event)的时候,会在Binlog加锁,读取完成之后,再将锁释放掉。

  从库I/O线程会连接到主库,向主库发送请求更新Binlog。这时从库的I/O线程就可以读取到主库的二进制日志转储线程发送的Binlog更新部分,并且拷贝到本地的中继日志(Relay log)。

  从库SQL线程会读取从库中的中继日志,并且执行日志中的事件,将从库中的数据与主库保持同步。

不是所有版本的MySQL都默认开启服务器的二进制日志。在进行主从同步的时候,我们需要先检查服务器是否已经开启了二进制日志。
除非特殊指定,默认情况下从服务器会执行所有主服务器中保存的事件。也可以通过配置,使从服务器执行特定的事件。

1.2、复制三步骤

  1. Master将写操作记录到二进制日志(binlog)。这些记录叫做二进制日志事件(binary log events);
  2. SlaveMaster的binary log events拷贝到它的中继日志(relay log);
  3. Slave重做中继日志中的事件,将改变应用到自己的数据库中。 MySQL复制是异步的且串行化的,而且重启后从接入点开始复制

1.3、复制的问题

  复制的最大问题: 延时

1.4、复制的基本原则

  • 每个Slave只有一个Master
  • 每个Slave只能有一个唯一的服务器ID
  • 每个Master可以有多个Slave

四、Linux下设置mysql主从复制配置

1、配置-主库Master

1.1、修改mysql的配置文件   vi /etc/my.cnf

[mysqld]
log-bin=mysql-bin   #[必须]启用二进制日志
server-id=99        #[必须]服务器唯一ID

1.2、重启mysql服务

systemctl restart mysqld

1.3、登录MySQL数据库,创建一个用户xxx,密码为xxxx,给此用户授予用于建立复制时需要用到的用户权限,也就是slave必须被master授权,具有该权限的用户,才能通过该用户复制

grant replication slave on *.* to 'user123'@'%' identified by 'user123@PWD123';

这里的用户为user123密码为user123@PWD123。

注:密码规范符合长度不小于8位,且必须含有数字,小写或大写字母,特殊字符。

1.4、登录数据库,执行 show master status;  查看Master状态,记录 FilePosition 的值。之后不再执行任何操作,否则会改变上诉的值。 

2、配置-从库Slave

2.1 修改mysql的配置文件   vi /etc/my.cnf

#从库只需配置服务唯一ID
[mysqld]
server-id=199   #[必须]服务器唯一ID

2.2 重启mysql服务

systemctl restart mysqld

2.3 登录mysql数据库,执行以下SQL,指定主库ip,主库授权后的用户及密码,主库日志文件与位置

change master to
master_host='192.168.138.128',master_user='user123',master_password='user123@PWD123',master_log_file='mysql-bin.0000001',master_log_pos=440;

重启slave线程

start slave;

2.4 登录mysql数据库,查看从数据库的状态

show slave status;

​​​​​​​

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值