zoukankan      html  css  js  c++  java
  • mysql的主从复制

    1. 为什么需要主从复制?

      a. 在复杂的业务中,有一个sql需要锁表,导致不能使用读的服务,影响业务的运行,使用主从复制,让主库写,从库读,保证业务的运行

      b. 做数据的热备

      c. 架构扩展,业务量原来越大,I/O访问评率过高,做多库存储,提高单个机器的I/O性能

    2. 原理(默认采用的是异步的方式,不是强一致性)

      MySQL 中有一种日志叫做 bin 日志(二进制日志),这个日志会记录下所有修改了数据库的SQL语句。主从复制的原理其实就是"从"服务器向"主"服务器请求这个日志文件,"主"服务器会把这个 bin 日志复制到"从"服务器上执行一遍,这样"从"服务器上的数据就和"主"服务器上的数据相同了。

      

      主服务器必须启动二进制日志binlog,记录任何修改数据库数据的sql

      从服务器开启一个线程(I/O thread)把自己扮演成mysql的客户端,通过mysql协议,请求主服务器的二进制日志文件binlog

      主服务器启动一个线程(Dump thread),检查自己二进制日志中的sql,核对参数,对比,将binlog日志发送到从服务器

      从服务器接收到主服务器的数据放到中继日志relay log文件中

      从服务器启动一个线程sql thread,把relay log中的事件读取出来,在本地执行

    3. mysql主从同步延时分析

      业务的持久成实现采用分库架构,mysql服务可平行扩展,分散压力

      读写分离

      mysql之间加入redis或者cache层,降低mysql压力

      使用比主库更好的设备作为slave

      使用更好的硬件设备

    mysql5.7之后使用MTS并行复制技术


    4. 安装配置  

      a. 在两台数据库中分别创建数据库,库名一样

        create database aaa;

      b. 在主服务器进行配置

        #在mysqld模块中添加如下配置信息

        vi /etc/my.cnf

        log-bin=master-bin #二进制文件名称

        binlog-format=ROW  #二进制日志格式,有row、statement、mixed三种格式

        server-id=1    #要求各个服务器的id必须不一样

        binlog-do-db=aaa   #同步的数据库名称

      c. 配置主服务器的账号授权,允许从服务器访问    

        --授权操作
        set global validate_password_policy=0;
        set global validate_password_length=1;
        grant replication slave on *.* to 'root'@'%' identified by '123456';
        --刷新权限
        flush privileges;

       d. 从服务器的配置

        #修改配置文件,执行以下命令打开mysql配置文件
        vi /etc/my.cnf
        #在mysqld模块中添加如下配置信息
        log-bin=master-bin #二进制文件的名称
        binlog-format=ROW #二进制文件的格式
        server-id=2 #服务器的id

       e. 重启主服务器的mysqlid服务

        #重启mysql服务
        service mysqld restart
        #登录mysql数据库
        mysql -uroot -p
        #查看master的状态
        show master status,记录binlog文件的名称,和位置

       f. 重启从服务器进行相关配置

        #重启mysql服务
        service mysqld restart
        #登录mysql
        mysql -uroot -p
        #连接主服务器
        change master to                                   master_host='192.168.85.11',master_user='root',master_password='123456',master_port=3306,master_log_file='master-bin.000001',master_log_pos=154;
        #启动slave
        start slave
        #查看slave的状态
        show slave statusG(注意没有分号)

        

        

      

      

  • 相关阅读:
    子类继承和调用父类的构造方法 (转)
    数组复制 System.arraycopy 与 Arrays.copyof()
    ArrayList的使用方法 (转)
    Eclipse 的debug 用法 (转)
    for each
    二维数组 排序 随机数 练习
    react 之 reflux 填坑
    react & vue 项目创建的方式
    数组实例的 copyWithin()
    es6的正则扩展笔记之修饰符
  • 原文地址:https://www.cnblogs.com/zhaoatian/p/12331084.html
Copyright © 2011-2022 走看看