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 status\G

    Slave_IO_Running: Yes

    Slave_SQL_Running: Yes

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

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

方法一:

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

方法二:

  • 使用keeplved、heartbeat作为HA检测软件
  • 检车mysql服务,不正常则自动切换到slave上

 

posted @ 2018-01-27 22:29  Jenvid  阅读(263)  评论(0编辑  收藏  举报