zoukankan      html  css  js  c++  java
  • mysql运维入门2:主从架构

    mysql主从原理

    随着访问量的增加,数据库压力的增加,需要对msyql进行优化和架构改造,优化方法有:

    • 高可用
    • 主从复制
    • 读写分离
    • 拆分库
    • 拆分表

    原理

    • 异步复制过程
    • master开启bin-log日志功能,默认关闭
    • slave开启IO线程和SQL线程

    过程

    1. salve执行slave start,salve服务IO线程会通过授权的用户连接上master,并请求master从指定的文件和位置之后发送bin-log日志内容
    2. master服务器接收到来自slave服务器的IO线程请求后,master服务器上的IO线程根据slave服务器发送的指定bin-log日志之后的内容,然后返回给slave的IO线程,返回的信息中出了bin-log日志内容wait,还有本次返回日志内容后在master服务器端新的binlog文件名已经在binlog中的下一个指定更新位
    3. slave的IO线程接收到信息后,将接收到的日志内容依次添加到salve端的relay-log文件的最末端,并将读取到的master端的bin-log的文件名和位置记录到master-info文件中,以便下一次读取的时候能够清楚的告诉master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”、
    4. slave的SQL线程检测到relay-log中新增了内容后,会马上解析relay-log的内容成为master端真实执行时候的那些可执行的内容,并在自身执行。

    主从配置

    • master my.cnf
    • [mysqld]  
      datadir=/data/mysql  
      socket=/var/lib/mysql/mysql.sock  
      user=mysql 
       
      # Disabling symbolic-links is recommended to prevent assorted security risks  
       
      symbolic-links=0 
      log-bin=mysql-bin  
      server-id = 1 
      auto_increment_offset=1    
      auto_increment_increment=2
       
      [mysqld_safe]  
      log-error=/var/log/mysqld.log  
      pid-file=/var/run/mysqld/mysqld.pid   
      replicate-do-db =all

      slave my,cnf

    • [mysqld]  
      datadir=/data/mysql  
      socket=/var/lib/mysql/mysql.sock  
      user=mysql 
       
      # Disabling symbolic-links is recommended to prevent assorted security risks  
       
      symbolic-links=0 
      log-bin=mysql-bin  
      server-id = 2 
      auto_increment_offset=2    
      auto_increment_increment=2
      
      [mysqld_safe]  
      log-error=/var/log/mysqld.log  
      pid-file=/var/run/mysqld/mysqld.pid  
      master-host =192.168.33.10  
      master-user=tongbu 
      master-pass=123456 
      master-port =3306 
      master-connect-retry=60 
      replicate-do-db =all

      maste

    • grant  replication  slave  on *.* to  'tongbu'@'%'  identified by  '123456';
      show master status;
      +------------------+----------+--------------+------------------+
      | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
      +------------------+----------+--------------+------------------+
      | mysql-bin.000006 |       98 |              |                  | 
      +------------------+----------+--------------+------------------+
      1 row in set (0.00 sec)

      slave

    • change master to 
      master_host='192.168.33.10',master_user='tongbu',master_password='123456',master_log_file='mysql-bin.000006',master_log_pos=98;
      show slave statusG

      Slave_IO_Running: Yes

      Slave_SQL_Running: Yes

    • 两个状态为YES,代表slave已经启动两个线程,一个为IO线程,一个为SQL线程。

     问题:如果master挂掉了,如果快速恢复服务

    方法一:

    • 如果程序连的是master的IP,直接在slave服务器上添加master的IP即可
    • 手动操作,花费时间长,存在误操作可能,不推荐

    方法二:

    • 使用keeplved、heartbeat作为HA检测软件
    • 检车mysql服务,不正常则自动切换到slave上
  • 相关阅读:
    第一节 49_ref_out 简单
    第一节 38函数 简单
    第二节 2面向对像简介 简单
    第一节 42字符串基础 简单
    第二节 3属性 简单
    第一节 33enum枚举 简单
    Java jdbc 数据库
    css 使IE和FIREFOX下变为手型
    JS调用PageMethods
    USB设备量产导致通用串行总线控制器显示感叹号解决办法
  • 原文地址:https://www.cnblogs.com/jenvid/p/8410922.html
Copyright © 2011-2022 走看看