zoukankan      html  css  js  c++  java
  • 主从复制 读写分离

      一般的应用对于数据库而言都是“读多写少”,也就是说对数据库读取数据的压力比较大。有人提出,采用数据库集群的方案,让主数据库只进行INSERT、UPDATE、DELETE,而从数据库只处理SELECT查询,这就是读写分离。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库,这就是主从复制。因此,一般来说都是通过主从复制(Master-Slave)的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。

    1、概念理解

      1.主从复制

       Mysql主服务器将更新写入二进制日志(Binary log)里面,从服务器上面启动一个I/O thread(实际上是主服务器的客户端进程),连接到主服务器上面请求读取二进制文件,然后把读取到的二进制文件写入到本地的一个Relay log里面。从服务器上开启一个SQL thread定时检查Relay log,如果发现又更新则立即在本机上执行更改的内容

      2.读写分离

      读写分离则是在数据库进行操作之前,我们需要通过识别这个操作(中间件,msqlproxy,逻辑层判断)来判断把这个请求发送到哪台服务器。如果是INSERT、UPDATE、DELETE操作则发给master,如果是SELECT操作则发给slave。如果有多台slave的话,我们可以通过slave的权重,轮询发给每个slave,这样就实现了简单的读写分离操作以及简单的负载均衡

      3.使用好处

       1.增加冗余,提高可用性,当一台数据库服务器宕机后,能通过调整到另一台服务器数据库来以最快的速度恢复服务。

      2.多服务起的处理能力会得到大大的提升

      3.master和slave负责各自的读写工作,极大的缓解了X锁和S锁的争用

      4.从库可以配置myisam引擎,提升查询性能和节约系统开销

      5.对于读大于写的应用比较适合读写分离,对于读写相近的应用,适合双主复制

    2、环境准备

      因为要配置主从复制,必要要两台服务器,一主(Master)一从(slave),并且两台服务器的数据库版本必须是一致的。

      192.168.0.36  Master  centos6.5  5.1.73(yum安装的版本略低)

      192.168.0.37  Slave  centos6.5  5.1.73

    3.主从配置

      1.配置master

      ①配置一个slave中可以登录的一个账号

      GRANT REPLICATION SLAVE ON *.* TO ‘mysql12’@’192.168.95.12’ IDENTIFIED BY ‘mysql12’;(TO后面跟的是用户名,BY后面跟的是密码)

      FLUSH PRIVILEGES;

         ②查看master的二进制文件名和位置

      SHOW MASTER STATUS;

      

      2.配置slave

      ①告知二进制文件名和位置

      在slave中执行

      

          CHANGE MASTER TO

                         >MASTER_HOST=’192.168.95.11’,#master的IP

                         >MASTER_USER=’mysql12’,#可访问账户的用户名

                         >MASTER_PASSWORD=’mysql12’,#可访问账户的密码

                         >MASTER_LOG_FILE=’mysql-bin.000048’,#这里是master的二进制文件位置

                         >MASTER_LOG_POS=432;#这里是master的position

    4.测试主从

      1.开启复制,查看配置

      SLAVE START;   #开启复制

      SHOW SLAVE STATUSG   #查看主从复制是否配置成功

      

      2.实际测试

      先登录master和slave执行SHOW DATABASES查看数据库,发现是一致的

      

      然后我们可以做一点实际性的操作来验证数据的同步

      在Master中执行如下代码:

        create database bb;

                use bb;

                create table test(id int auto_increment,name varchar(10),primary key(id));

                show databases;

                show tables;

      

      执行完之后我们来到slave,执行show databases;

      

      然后执行

      use bb;

      show tables;

      

      我们发现,数据库bb和test表已经完全复制过来了,说明数据已经达到了同步。

      主从复制是异步操作,所以不太适用于实时性要求很高以及验证保证数据一致性的应用场景。如果做主从仅是为了在一台服务器宕机的时候进行切换,那么可以做主主复制,两台服务器各自进行的操作都会同步到另一台服务器上去。

     

      

      

      

      

      

  • 相关阅读:
    saltstack总结-2018-0620
    我的书籍《Redis 源码日志》
    深入剖析 redis 主从复制
    深入剖析 redis AOF 持久化策略
    初探单点登录 SSO
    深入剖析 redis RDB 持久化策略
    深入剖析 redis 事件驱动
    memcached 源码阅读笔记
    Django 源码小剖: Django ORM 查询管理器
    Django 源码小剖: Django 对象关系映射(ORM)
  • 原文地址:https://www.cnblogs.com/lina520/p/7300874.html
Copyright © 2011-2022 走看看